diff options
author | Robert Speicher <robert@gitlab.com> | 2017-01-03 21:11:10 +0000 |
---|---|---|
committer | Robert Speicher <robert@gitlab.com> | 2017-01-03 21:11:10 +0000 |
commit | 115aac77f614a9130aa9bc6ff48aed47339aebfc (patch) | |
tree | 775412586cc3676662ef04f0760510422f8f44ef /lib | |
parent | 8daff07ca70aeefb0fc11541b77298570de4f47e (diff) | |
parent | babb7d5260087abfe09d7c4d6994433def7d8b99 (diff) | |
download | gitlab-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.rb | 19 |
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 |