Class: GitHub::Ldap

Inherits:
Object
  • Object
show all
Defined in:
lib/github/ldap.rb,
lib/github/ldap/domain.rb,
lib/github/ldap/server.rb

Defined Under Namespace

Classes: Domain

Constant Summary collapse

DEFAULT_FIXTURES_PATH =

Preconfigured user fixtures. If you want to use them for your own tests.

File.expand_path('fixtures.ldif', File.dirname(__FILE__))
DEFAULT_SERVER_OPTIONS =
{
  user_fixtures:  DEFAULT_FIXTURES_PATH,
  user_domain:     'dc=github,dc=com',
  admin_user:      'uid=admin,dc=github,dc=com',
  admin_password:  'secret',
  quiet:           true,
  port:            3897
}

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Ldap

Returns a new instance of Ldap.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/github/ldap.rb', line 6

def initialize(options = {})
  @uid = options[:uid] || "sAMAccountName"

  @connection = Net::LDAP.new({
    host: options[:host],
    port: options[:port]
  })

  @connection.authenticate(options[:admin_user], options[:admin_password])

  if encryption = check_encryption(options[:encryptation])
    @connection.encryption(encryption)
  end
end

Class Attribute Details

.ldap_server ⇒ Object (readonly)

ldap_server: is the instance of the testing ldap server, you should never interact with it, but it's used to grecefully stop it after your tests finalize.



26
27
28
# File 'lib/github/ldap/server.rb', line 26

def ldap_server
  @ldap_server
end

.server_options ⇒ Object (readonly)

server_options: is the options used to start the server, useful to know in development.



21
22
23
# File 'lib/github/ldap/server.rb', line 21

def server_options
  @server_options
end

Class Method Details

.server_tmp ⇒ Object

Determine the temporal directory where the ldap server lives. If there is no temporal directory in the environment we create one in the base path.

Returns the path to the temporal directory.



57
58
59
60
61
62
63
64
65
66
# File 'lib/github/ldap/server.rb', line 57

def self.server_tmp
  tmp = ENV['TMPDIR'] || ENV['TEMPDIR']

  if tmp.nil?
    tmp = 'tmp'
    Dir.mkdir(tmp) unless File.directory?('tmp')
  end

  tmp
end

.start_server(options = {}) ⇒ Object

Start a testing server. If there is already a server initialized it doesn't do anything.

options: is a hash with the custom options for the server.



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/github/ldap/server.rb', line 33

def self.start_server(options = {})
  @server_options = DEFAULT_SERVER_OPTIONS.merge(options)

  @ldap_server ||= Ladle::Server.new(
    allow_anonymous: false,
    ldif:            server_options[:user_fixtures],
    domain:          server_options[:user_domain],
    port:            server_options[:port],
    quiet:           server_options[:quiet],
    tmpdir:          server_tmp)

  @ldap_server.start
end

.stop_server ⇒ Object

Stop the testing server. If there is no server started this method doesn't do anything.



49
50
51
# File 'lib/github/ldap/server.rb', line 49

def self.stop_server
  ldap_server && ldap_server.stop
end

Instance Method Details

#check_encryption(encryption) ⇒ Object

Check the legacy auth configuration options (before David's war with omniauth) to determine whether to use encryptation or not.

encryptation: is the encryptation method, either 'ssl', 'tls', 'simple_tls' or 'start_tls'.

Returns the real encryptation type.



27
28
29
30
31
32
33
34
35
36
# File 'lib/github/ldap.rb', line 27

def check_encryption(encryption)
  return unless encryption

  case encryption.downcase.to_sym
  when :ssl, :simple_tls
    :simple_tls
  when :tls, :start_tls
    :start_tls
  end
end

#domain(base_name) ⇒ Object

Creates a new domain object to perform operations

base_name: is the dn of the base root.

Returns a new Domain object.



53
54
55
# File 'lib/github/ldap.rb', line 53

def domain(base_name)
  Domain.new(base_name, @connection, @uid)
end

#test_connection ⇒ Object

Utility method to check if the connection with the server can be stablished. It tries to bind with the ldap auth default configuration.

Return true if the connection is successful. Return false if the authentication settings are not valid. Raises an Net::LDAP::LdapError if the connection fails.



44
45
46
# File 'lib/github/ldap.rb', line 44

def test_connection
  @connection.bind
end