class Acs::Ldap::Connector

Public Class Methods

new(options = {}) click to toggle source
# File lib/acs/ldap/connector.rb, line 3
def initialize(options = {})
  @host     = options[:host] || '127.0.0.1'
  @port     = options[:port] || 389
  @base     = options[:base] || nil
  @dn       = options[:dn] || nil
  @password = options[:password] || nil
  @tls      = options[:tls] || false

  @connected = false
end

Public Instance Methods

add(dn, attributes) click to toggle source
# File lib/acs/ldap/connector.rb, line 61
def add(dn, attributes)
  #debugger
  logger.info "Add dn '#{dn}'  attributes '#{attributes.inspect}'"
  get_connection.add(dn: dn, attributes: attributes)
  result = Acs::Ldap::Result.new(get_connection.get_operation_result)
  logger.info "Add result #{result}"

  result
end
base() click to toggle source
# File lib/acs/ldap/connector.rb, line 96
def base
  @base
end
close_connection() click to toggle source
# File lib/acs/ldap/connector.rb, line 100
def close_connection
  if @connected
    @ldap = nil
  end
  @connected = false
end
delete(dn) click to toggle source
# File lib/acs/ldap/connector.rb, line 80
def delete(dn)
  logger.info "Delete dn '#{dn}'"
  get_connection.delete(dn: dn)
  result = Acs::Ldap::Result.new(get_connection.get_operation_result)
  logger.info "Delete result #{result}"

  result
end
delete_all(ou) click to toggle source
# File lib/acs/ldap/connector.rb, line 89
def delete_all(ou)
  logger.info "Delete all ou=#{ou}"
  search({base: "ou=#{ou},#{base}", attributes: 'uid'}).data.each do |entry|
    delete(entry[:dn].first) if entry[:uid].present?
  end
end
get_connection() click to toggle source
# File lib/acs/ldap/connector.rb, line 107
def get_connection
  if @connected
    @ldap
  else
    @ldap = connect
  end
  @ldap
end
ldap_params() click to toggle source
# File lib/acs/ldap/connector.rb, line 14
def ldap_params
  ldap_params = {
    host: @host,
    port: @port,
    base: @base,
    auth: {
      method: :simple, #other method ?
      username: @dn,
      password: @password
    }
  }

  ldap_params[:encryption] = :simple_tls if @tls

  logger.debug "Connection params: #{ldap_params}"

  ldap_params
end
search_by(base, key, value, attributes = nil) click to toggle source
# File lib/acs/ldap/connector.rb, line 47
def search_by(base, key, value, attributes = nil)
  filter = Net::LDAP::Filter.eq(key, value.to_s)
  search({base: base, filter: filter, attributes: attributes})
end
search_one(base, key, value, attributes = nil) click to toggle source
# File lib/acs/ldap/connector.rb, line 52
def search_one(base, key, value, attributes = nil)
  result = search_by(base, key, value, attributes)
  if result.data.count > 0
    result.data[0]
  else
    nil
  end
end
update(dn, operations) click to toggle source
# File lib/acs/ldap/connector.rb, line 71
def update(dn, operations)
  logger.info "Modify dn '#{dn}' operations '#{operations.inspect}'"
  get_connection.modify(dn: dn, operations: operations)
  result = Acs::Ldap::Result.new(get_connection.get_operation_result)
  logger.info "Modify result #{result}"

  result
end

Protected Instance Methods

connect() click to toggle source

get_connection should be used

# File lib/acs/ldap/connector.rb, line 119
def connect
  logger.debug "LDAP connect"
  if ! @connected
    logger.debug "Binding to ldap..."
    @ldap = Net::LDAP.new(ldap_params)
      if @ldap.bind
        logger.debug "Connection succeed"
        @connected = true
      else
        @connected = false
        @ldap = nil
        logger.debug "Connection failed"
      end
    @ldap
  else
    @logger.debug "LDAP already connected"
    nil
  end
end
logger() click to toggle source
# File lib/acs/ldap/connector.rb, line 139
def logger
  Acs::Ldap.logger
end