aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Felder <feld@FreeBSD.org>2020-08-05 11:36:12 -0500
committerMark Felder <feld@FreeBSD.org>2020-08-05 11:36:12 -0500
commit81126b0142ec54c785952d0c84a2bdef76965fc7 (patch)
tree6794d2a0264fc088191b55dd08a0dd8e2ac60059
parent2192d1e4920e2c6deffe9a205cc2ade27d4dc0b1 (diff)
downloadpleroma-81126b0142ec54c785952d0c84a2bdef76965fc7.tar.gz
Add email to user account only if it exists in LDAP
-rw-r--r--lib/pleroma/user.ex9
-rw-r--r--lib/pleroma/web/auth/ldap_authenticator.ex8
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index df9f34baa..6d39c9d1b 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -643,12 +643,21 @@ defmodule Pleroma.User do
when is_nil(password) do
params = Map.put_new(params, :accepts_chat_messages, true)
+ params =
+ if Map.has_key?(params, :email) do
+ Map.put_new(params, :email, params[:email])
+ else
+ params
+ end
+
struct
|> cast(params, [
:name,
:nickname,
+ :email,
:accepts_chat_messages
])
+ |> validate_required([:name, :nickname])
|> unique_constraint(:nickname)
|> validate_exclusion(:nickname, Config.get([User, :restricted_nicknames]))
|> validate_format(:nickname, local_nickname_regex())
diff --git a/lib/pleroma/web/auth/ldap_authenticator.ex b/lib/pleroma/web/auth/ldap_authenticator.ex
index f667da68b..b1645a359 100644
--- a/lib/pleroma/web/auth/ldap_authenticator.ex
+++ b/lib/pleroma/web/auth/ldap_authenticator.ex
@@ -103,13 +103,19 @@ defmodule Pleroma.Web.Auth.LDAPAuthenticator do
{:scope, :eldap.wholeSubtree()},
{:timeout, @search_timeout}
]) do
- {:ok, {:eldap_search_result, [{:eldap_entry, _, _}], _}} ->
+ {:ok, {:eldap_search_result, [{:eldap_entry, _, attributes}], _}} ->
params = %{
name: name,
nickname: name,
password: nil
}
+ params =
+ case List.keyfind(attributes, 'mail', 0) do
+ {_, [mail]} -> Map.put_new(params, :email, :erlang.list_to_binary(mail))
+ _ -> params
+ end
+
changeset = User.register_changeset(%User{}, params)
case User.register(changeset) do