Add possibility to create users with provider (such as LDAP)

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2021-07-22 15:09:12 +02:00
parent 395675ce6a
commit fa8cae681f
6 changed files with 133 additions and 25 deletions

View File

@@ -34,6 +34,9 @@ defmodule Mobilizon.Service.Auth.Authenticator do
@callback can_change_password?(User.t()) :: boolean
def can_change_password?(%User{} = user), do: implementation().can_change_password?(user)
@callback provider_name :: String.t() | nil
def provider_name, do: implementation().provider_name()
@spec has_password?(User.t()) :: boolean()
def has_password?(%User{provider: provider}), do: is_nil(provider) or provider == "ldap"

View File

@@ -22,6 +22,7 @@ defmodule Mobilizon.Service.Auth.LDAPAuthenticator do
@connection_timeout 10_000
@search_timeout 10_000
@impl Authenticator
def login(email, password) do
with {:ldap, true} <- {:ldap, Mobilizon.Config.get([:ldap, :enabled])},
%User{} = user <- ldap_user(email, password) do
@@ -39,10 +40,15 @@ defmodule Mobilizon.Service.Auth.LDAPAuthenticator do
end
end
@impl Authenticator
def can_change_email?(%User{provider: provider}), do: provider != "ldap"
@impl Authenticator
def can_change_password?(%User{provider: provider}), do: provider != "ldap"
@impl Authenticator
def provider_name, do: "ldap"
defp ldap_user(email, password) do
ldap = Mobilizon.Config.get(:ldap, [])
host = Keyword.get(ldap, :host, "localhost")

View File

@@ -11,6 +11,7 @@ defmodule Mobilizon.Service.Auth.MobilizonAuthenticator do
@behaviour Authenticator
@impl Authenticator
def login(email, password) do
require Logger
@@ -33,7 +34,12 @@ defmodule Mobilizon.Service.Auth.MobilizonAuthenticator do
end
end
@impl Authenticator
def can_change_email?(%User{provider: provider}), do: is_nil(provider)
@impl Authenticator
def can_change_password?(%User{provider: provider}), do: is_nil(provider)
@impl Authenticator
def provider_name, do: nil
end