commit: 363b462c54c454e847072869db09f8f4d5da4426
parent 14a9663f1abe49b8f4f4f719fa2f4db3a5dd81b7
Author: Mark Felder <feld@feld.me>
Date: Tue, 17 Sep 2024 13:36:46 -0400
Make the email attribute configurable
While here, fix the System.get_env usage to use the normal fallback value method and improve the UID label description
Diffstat:
3 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/config/config.exs b/config/config.exs
@@ -612,16 +612,17 @@ config :pleroma, Pleroma.Formatter,
config :pleroma, :ldap,
enabled: System.get_env("LDAP_ENABLED") == "true",
- host: System.get_env("LDAP_HOST") || "localhost",
- port: String.to_integer(System.get_env("LDAP_PORT") || "389"),
+ host: System.get_env("LDAP_HOST", "localhost"),
+ port: String.to_integer(System.get_env("LDAP_PORT", "389")),
ssl: System.get_env("LDAP_SSL") == "true",
sslopts: [],
tls: System.get_env("LDAP_TLS") == "true",
tlsopts: [],
- base: System.get_env("LDAP_BASE") || "dc=example,dc=com",
- uid: System.get_env("LDAP_UID") || "cn",
+ base: System.get_env("LDAP_BASE", "dc=example,dc=com"),
+ uid: System.get_env("LDAP_UID", "cn"),
# defaults to CAStore's Mozilla roots
- cacertfile: nil
+ cacertfile: System.get_env("LDAP_CACERTFILE", nil),
+ mail: System.get_env("LDAP_MAIL", "mail")
oauth_consumer_strategies =
System.get_env("OAUTH_CONSUMER_STRATEGIES")
diff --git a/config/description.exs b/config/description.exs
@@ -2280,7 +2280,7 @@ config :pleroma, :config_description, [
},
%{
key: :uid,
- label: "UID",
+ label: "UID Attribute",
type: :string,
description:
"LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"",
@@ -2291,6 +2291,13 @@ config :pleroma, :config_description, [
label: "CACertfile",
type: :string,
description: "Path to CA certificate file"
+ },
+ %{
+ key: :mail,
+ label: "Mail Attribute",
+ type: :string,
+ description: "LDAP attribute name to use as the email address when automatically registering the user on first login",
+ suggestions: ["mail"]
}
]
},
diff --git a/lib/pleroma/ldap.ex b/lib/pleroma/ldap.ex
@@ -205,6 +205,8 @@ defmodule Pleroma.LDAP do
end
defp try_register(name, attributes) do
+ mail_attribute = Config.get([:ldap, :mail])
+
params = %{
name: name,
nickname: name,
@@ -212,7 +214,7 @@ defmodule Pleroma.LDAP do
}
params =
- case List.keyfind(attributes, ~c"mail", 0) do
+ case List.keyfind(attributes, to_charlist(mail_attribute), 0) do
{_, [mail]} -> Map.put_new(params, :email, :erlang.list_to_binary(mail))
_ -> params
end