Add config endpoint

This commit is contained in:
Chocobozzz
2019-03-22 10:53:38 +01:00
parent 0b1845a1fb
commit e864b38ec6
11 changed files with 157 additions and 11 deletions

View File

@@ -0,0 +1,7 @@
defmodule Mobilizon.CommonConfig do
def registrations_open?(), do: instance_config() |> get_in([:registrations_open])
def instance_name(), do: instance_config() |> get_in([:name])
defp instance_config(), do: Application.get_env(:mobilizon, :instance)
end

View File

@@ -146,13 +146,8 @@ defmodule Mobilizon.Users.User do
end
end
def is_confirmed(%User{confirmed_at: nil} = _user) do
{:error, :unconfirmed}
end
def is_confirmed(%User{} = user) do
{:ok, user}
end
def is_confirmed(%User{confirmed_at: nil} = _user), do: {:error, :unconfirmed}
def is_confirmed(%User{} = user), do: {:ok, user}
def owns_actor(%User{actors: actors}, actor_id) do
case Enum.find(actors, fn a -> a.id == actor_id end) do

View File

@@ -0,0 +1,14 @@
defmodule MobilizonWeb.Resolvers.Config do
@moduledoc """
Handles the config-related GraphQL calls
"""
require Logger
import Mobilizon.CommonConfig
@doc """
Get config
"""
def get_config(_parent, _params, _context) do
{:ok, %{name: instance_name(), registrations_open: registrations_open?()}}
end
end

View File

@@ -3,6 +3,7 @@ defmodule MobilizonWeb.Resolvers.User do
Handles the user-related GraphQL calls
"""
alias Mobilizon.Actors.Actor
alias Mobilizon.CommonConfig
alias Mobilizon.Users.User
alias Mobilizon.{Actors, Users}
alias Mobilizon.Service.Users.{ResetPassword, Activation}
@@ -64,15 +65,23 @@ defmodule MobilizonWeb.Resolvers.User do
end
@doc """
Register an user :
Register an user:
- check registrations are enabled
- create the user
- send a validation email to the user
"""
@spec create_user(any(), map(), any()) :: tuple()
def create_user(_parent, args, _resolution) do
with {:ok, %User{} = user} <- Users.register(args) do
with {:registrations_open, true} <- {:registrations_open, CommonConfig.registrations_open?()},
{:ok, %User{} = user} <- Users.register(args) do
Activation.send_confirmation_email(user)
{:ok, user}
else
{:registrations_open, false} ->
{:error, "Registrations are not enabled"}
err ->
err
end
end

View File

@@ -18,6 +18,7 @@ defmodule MobilizonWeb.Schema do
import_types(MobilizonWeb.Schema.Actors.PersonType)
import_types(MobilizonWeb.Schema.Actors.GroupType)
import_types(MobilizonWeb.Schema.CommentType)
import_types(MobilizonWeb.Schema.ConfigType)
alias MobilizonWeb.Resolvers
@@ -133,6 +134,7 @@ defmodule MobilizonWeb.Schema do
import_fields(:participant_queries)
import_fields(:tag_queries)
import_fields(:address_queries)
import_fields(:config_queries)
end
@desc """

View File

@@ -0,0 +1,23 @@
defmodule MobilizonWeb.Schema.ConfigType do
@moduledoc """
Schema representation for User
"""
use Absinthe.Schema.Notation
alias MobilizonWeb.Resolvers.Config
@desc "A config object"
object :config do
# Instance name
field(:name, :string)
field(:registrations_open, :boolean)
end
object :config_queries do
@desc "Get the instance config"
field :config, :config do
resolve(&Config.get_config/3)
end
end
end