Class: Chaltron::LDAP::Connection

Inherits:
Object
  • Object
show all
Defined in:
lib/chaltron/ldap/connection.rb

Constant Summary collapse

NET_LDAP_ENCRYPTION_METHOD =
{
  simple_tls: :simple_tls,
  start_tls:  :start_tls,
  plain:      nil
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ Connection

Returns a new instance of Connection.



16
17
18
# File 'lib/chaltron/ldap/connection.rb', line 16

def initialize(params = {})
  @ldap = Net::LDAP.new(adapter_options)
end

Instance Attribute Details

#ldapObject (readonly)

Returns the value of attribute ldap.



14
15
16
# File 'lib/chaltron/ldap/connection.rb', line 14

def ldap
  @ldap
end

Instance Method Details

#auth(login, password) ⇒ Object



20
21
22
23
# File 'lib/chaltron/ldap/connection.rb', line 20

def auth(, password)
  filter = Net::LDAP::Filter.eq(uid, )
  ldap.bind_as(base: base, filter: filter, password: password)
end

#find_by_uid(id) ⇒ Object



25
26
27
28
29
# File 'lib/chaltron/ldap/connection.rb', line 25

def find_by_uid(id)
  opts = {}
  opts[uid.to_sym] = id
  ret = find_user(opts)
end

#find_groups_by_member(entry) ⇒ Object



74
75
76
77
78
79
80
# File 'lib/chaltron/ldap/connection.rb', line 74

def find_groups_by_member(entry)
  options = {
    base: Chaltron.ldap_group_base || base,
    filter: Chaltron.ldap_group_member_filter.call(entry)
  }
  ldap_search(options)
end

#find_user(*args) ⇒ Object



31
32
33
# File 'lib/chaltron/ldap/connection.rb', line 31

def find_user(*args)
  find_users(*args).first
end

#find_users(args) ⇒ Object



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
# File 'lib/chaltron/ldap/connection.rb', line 48

def find_users(args)
  return [] if args.empty?
  limit = args.delete(:limit)
  fields = args.keys

  if fields.include?(:dn)
    options = {
      base: args[:dn],
      scope: Net::LDAP::SearchScope_BaseObject
    }
  else
    filters = fields.map do |field|
      f = translate_field(field)
      Net::LDAP::Filter.eq(f, args[field]) if f
    end
    options = {
      base: base,
      filter: filters.inject { |sum, n| Net::LDAP::Filter.join(sum, n) }
    }
  end
  options.merge!(size: limit) unless limit.nil?
  ldap_search(options).map do |entry|
    Chaltron::LDAP::Person.new(entry, uid) if entry.respond_to? uid
  end.compact
end

#ldap_search(*args) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/chaltron/ldap/connection.rb', line 35

def ldap_search(*args)
  results = ldap.search(*args)
  if results.nil?
    response = ldap.get_operation_result
    unless response.code.zero?
      Rails.logger.warn("LDAP search error: #{response.message}")
    end
    []
  else
    results
  end
end

#update_attributes(dn, args) ⇒ Object



82
83
84
# File 'lib/chaltron/ldap/connection.rb', line 82

def update_attributes(dn, args)
  ldap.modify dn: dn, operations: args.map { |k,v| [:replace, k, v] }
end