Class: Ldap::Authenticator

Inherits:
Object
  • Object
show all
Defined in:
app/services/ldap/authenticator.rb

Instance Method Summary collapse

Constructor Details

#initialize(email:, password:) ⇒ Authenticator



4
5
6
7
# File 'app/services/ldap/authenticator.rb', line 4

def initialize(email:, password:)
  @password = password
  @email = email
end

Instance Method Details

#authenticateObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/services/ldap/authenticator.rb', line 9

def authenticate
  return nil if @password.blank?

  LdapServer.all.each do |server|
    ldap = Net::LDAP.new(
      host: server.host,
      port: server.port,
      encryption: server.use_ssl ? :simple_tls : nil,
      auth: {
        method: :simple,
        username: server.admin_user,
        password: server.admin_password
      }
    )

    filter = Net::LDAP::Filter.eq(server.auth_field, email) # server.auth_field
    treebase = server.base_dn

    ldap.search(base: treebase, filter: filter) do |entry|
      user_dn = entry.dn

      # Prova autenticazione utente
      user_ldap = Net::LDAP.new(
        host: server.host,
        port: server.port,
        encryption: server.use_ssl ? :simple_tls : nil,
        auth: {
          method: :simple,
          username: user_dn,
          password: password
        }
      )

      if user_ldap.bind
        return find_or_create_user(entry, server.id)
      end
    end
  end

  nil
end