class Csv::Ldap

Constants

DEFAULT_HEADERS
DEFAULT_OUTPUT_FILE_PATH
DEFAULT_TREE_BASE
VERSION

Attributes

errors[RW]
ldap[RW]

Public Class Methods

new(args) click to toggle source
# File lib/csv/ldap.rb, line 13
def initialize(args)
  @ldap = Net::LDAP.new args
end

Public Instance Methods

add_header() click to toggle source
# File lib/csv/ldap.rb, line 69
def add_header
  CSV.open(@output_file_path, 'w+', { force_quotes: false }) do |csv|
    csv << @headers
  end
end
bind() click to toggle source
# File lib/csv/ldap.rb, line 17
def bind
  @ldap.bind
end
delete(args) click to toggle source
# File lib/csv/ldap.rb, line 21
def delete(args)
  @ldap.delete(args)
end
export(args = {}) click to toggle source
# File lib/csv/ldap.rb, line 54
def export(args = {})
  @headers = args[:headers] || DEFAULT_HEADERS
  @treebase = args[:treebase] || DEFAULT_TREE_BASE
  @output_file_path = args[:output_file_path] || DEFAULT_OUTPUT_FILE_PATH
  @filter ||= args[:filter]

  add_header

  CSV.open(@output_file_path, 'a+', { force_quotes: false }) do |csv|
    ldap.search(base: @treebase, filter: @filter) do |entry|
      csv << @headers.map { |x| entry.send(x).first } rescue nil
    end
  end
end
import(input_file_path = nil, headers = []) click to toggle source
# File lib/csv/ldap.rb, line 31
def import(input_file_path = nil, headers = [])
  @headers ||= headers.empty? ? DEFAULT_HEADERS : headers
  @errors = []

  CSV.foreach(input_file_path, headers: true, skip_blanks: true) do |row|
    valid_headers row.headers

    dn = "cn=#{row['cn']}, ou=people, dc=example, dc=org"
    attr = row.to_h
    attr['objectclass'] = ['inetOrgPerson', 'posixAccount', 'shadowAccount']

    @ldap.add(dn: dn, attributes: attr)
    if @ldap.get_operation_result['message'] == 'Success'
      puts 'Adding cn:' + row['cn'] + ' ' +
      @ldap.get_operation_result['message']
    else
      puts 'Error cn:' + row['cn'] + ' ' +
      @ldap.get_operation_result['message']
      @errors << row['cn'] + ' ' + @ldap.get_operation_result['message']
    end
  end
end
valid_headers(headers = []) click to toggle source
# File lib/csv/ldap.rb, line 25
def valid_headers(headers = [])
  unless headers.all? { |header| @headers.include?(header) }
    raise 'Require headers to process the file.'
  end
end