remove all endpoints marked as deprecated (#91)
[akkoma] / lib / pleroma / web / auth / ldap_authenticator.ex
index f667da68b90fa726a04c84c8e0ec41cdcf878455..f77e8d20342648c012926639435b1e1b793dab8b 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.Auth.LDAPAuthenticator do
@@ -7,8 +7,7 @@ defmodule Pleroma.Web.Auth.LDAPAuthenticator do
 
   require Logger
 
-  import Pleroma.Web.Auth.Authenticator,
-    only: [fetch_credentials: 1, fetch_user: 1]
+  import Pleroma.Web.Auth.Helpers, only: [fetch_credentials: 1, fetch_user: 1]
 
   @behaviour Pleroma.Web.Auth.Authenticator
   @base Pleroma.Web.Auth.PleromaAuthenticator
@@ -103,14 +102,20 @@ 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
         }
 
-        changeset = User.register_changeset(%User{}, params)
+        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_ldap(%User{}, params)
 
         case User.register(changeset) do
           {:ok, user} -> user