Add possibility to create users with provider (such as LDAP)
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -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"
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user