Class: Gitlab::Auth::Ldap::Adapter
- Inherits:
-
Object
- Object
- Gitlab::Auth::Ldap::Adapter
- Defined in:
- lib/gitlab/auth/ldap/adapter.rb
Constant Summary collapse
- SEARCH_RETRY_FACTOR =
[1, 1, 2, 3].freeze
- MAX_SEARCH_RETRIES =
Rails.env.test? ? 1 : SEARCH_RETRY_FACTOR.size
Instance Attribute Summary collapse
-
#ldap ⇒ Object
readonly
Returns the value of attribute ldap.
-
#provider ⇒ Object
readonly
Returns the value of attribute provider.
Class Method Summary collapse
Instance Method Summary collapse
- #config ⇒ Object
- #dn_matches_filter?(dn, filter) ⇒ Boolean
-
#initialize(provider, ldap = nil) ⇒ Adapter
constructor
A new instance of Adapter.
- #ldap_search(*args) ⇒ Object
- #user ⇒ Object
- #users(fields, value, limit = nil) ⇒ Object
Constructor Details
#initialize(provider, ldap = nil) ⇒ Adapter
Returns a new instance of Adapter.
22 23 24 25 |
# File 'lib/gitlab/auth/ldap/adapter.rb', line 22 def initialize(provider, ldap = nil) @provider = provider @ldap = ldap || renew_connection_adapter end |
Instance Attribute Details
#ldap ⇒ Object (readonly)
Returns the value of attribute ldap.
10 11 12 |
# File 'lib/gitlab/auth/ldap/adapter.rb', line 10 def ldap @ldap end |
#provider ⇒ Object (readonly)
Returns the value of attribute provider.
10 11 12 |
# File 'lib/gitlab/auth/ldap/adapter.rb', line 10 def provider @provider end |
Class Method Details
.config(provider) ⇒ Object
18 19 20 |
# File 'lib/gitlab/auth/ldap/adapter.rb', line 18 def self.config(provider) Gitlab::Auth::Ldap::Config.new(provider) end |
.open(provider, &block) ⇒ Object
12 13 14 15 16 |
# File 'lib/gitlab/auth/ldap/adapter.rb', line 12 def self.open(provider, &block) Net::LDAP.open(config(provider).) do |ldap| yield(self.new(provider, ldap)) end end |
Instance Method Details
#config ⇒ Object
27 28 29 |
# File 'lib/gitlab/auth/ldap/adapter.rb', line 27 def config Gitlab::Auth::Ldap::Config.new(provider) end |
#dn_matches_filter?(dn, filter) ⇒ Boolean
40 41 42 43 44 45 |
# File 'lib/gitlab/auth/ldap/adapter.rb', line 40 def dn_matches_filter?(dn, filter) ldap_search(base: dn, filter: filter, scope: Net::LDAP::SearchScope_BaseObject, attributes: %w[dn]).any? end |
#ldap_search(*args) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/gitlab/auth/ldap/adapter.rb', line 47 def ldap_search(*args) retries ||= 0 # Net::LDAP's `time` argument doesn't work. Use Ruby `Timeout` instead. Timeout.timeout(timeout_time(retries)) do results = ldap.search(*args) if results.nil? response = ldap.get_operation_result check_empty_response_code(response) [] else results end end rescue Net::LDAP::Error, Timeout::Error => error retries += 1 = (error) Gitlab::AppLogger.warn() if retries < MAX_SEARCH_RETRIES renew_connection_adapter retry else raise LdapConnectionError, end end |
#user ⇒ Object
36 37 38 |
# File 'lib/gitlab/auth/ldap/adapter.rb', line 36 def user(...) users(...).first end |
#users(fields, value, limit = nil) ⇒ Object
31 32 33 34 |
# File 'lib/gitlab/auth/ldap/adapter.rb', line 31 def users(fields, value, limit = nil) = (Array(fields), value, limit) users_search() end |