summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRobert Speicher <robert@gitlab.com>2017-01-03 21:11:10 +0000
committerRobert Speicher <robert@gitlab.com>2017-01-03 21:11:10 +0000
commit115aac77f614a9130aa9bc6ff48aed47339aebfc (patch)
tree775412586cc3676662ef04f0760510422f8f44ef /lib
parent8daff07ca70aeefb0fc11541b77298570de4f47e (diff)
parentbabb7d5260087abfe09d7c4d6994433def7d8b99 (diff)
downloadgitlab-ce-115aac77f614a9130aa9bc6ff48aed47339aebfc.tar.gz
Merge branch 'ldap_person_attributes' into 'master' include-uncovered-jasmine
Gitlab::LDAP::Person uses LDAP attributes configuration Closes #26290 See merge request !8418
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/ldap/person.rb19
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/gitlab/ldap/person.rb b/lib/gitlab/ldap/person.rb
index b81f3e8e8f5..333f170a484 100644
--- a/lib/gitlab/ldap/person.rb
+++ b/lib/gitlab/ldap/person.rb
@@ -28,7 +28,7 @@ module Gitlab
end
def name
- entry.cn.first
+ attribute_value(:name)
end
def uid
@@ -40,7 +40,7 @@ module Gitlab
end
def email
- entry.try(:mail)
+ attribute_value(:email)
end
def dn
@@ -56,6 +56,21 @@ module Gitlab
def config
@config ||= Gitlab::LDAP::Config.new(provider)
end
+
+ # Using the LDAP attributes configuration, find and return the first
+ # attribute with a value. For example, by default, when given 'email',
+ # this method looks for 'mail', 'email' and 'userPrincipalName' and
+ # returns the first with a value.
+ def attribute_value(attribute)
+ attributes = Array(config.attributes[attribute.to_sym])
+ selected_attr = attributes.find { |attr| entry.respond_to?(attr) }
+
+ return nil unless selected_attr
+
+ # Some LDAP attributes return an array,
+ # even if it is a single value (like 'cn')
+ Array(entry.public_send(selected_attr)).first
+ end
end
end
end