class Seiso::ImportLdap
Imports LDAP person data into Seiso
.
- Author
-
Willie Wheeler (wwheeler@expedia.com)
- Copyright
-
Copyright © 2014-2015 Expedia, Inc.
- License
-
Apache 2.0
Constants
- ACTIVE_DIRECTORY_ATTRS
Active Directory: msdn.microsoft.com/en-us/library/ms675090(v=vs.85).aspx
- BATCH_SIZE
Public Class Methods
new(ldap_settings, seiso_settings)
click to toggle source
Creates a new LDAP importer.
-
ldap_settings: Has the following settings
-
host
-
port
-
username
-
password
-
ldap_base_dn: tree base (for searching)
-
ldap_user_dn: user filter (for searching)
-
-
seiso_settings
See sample-conf for example configurations.
# File lib/seiso/import_ldap.rb, line 65 def initialize(ldap_settings, seiso_settings) @source = ldap_settings['source'] # LDAP connector @ldap = Net::LDAP.new @ldap.host = ldap_settings['host'] @ldap.port = ldap_settings['port'] @ldap.auth ldap_settings['username'], ldap_settings['password'] # Seiso connector @seiso = Seiso::Connector.new seiso_settings # LDAP search params @tree_base = ldap_settings['tree_base'] @person_filter = Net::LDAP::Filter::FilterParser.parse(ldap_settings['person_filter']) puts "tree_base=#{@tree_base}" puts "person_filter=#{@person_filter}" end
Public Instance Methods
import_all()
click to toggle source
# File lib/seiso/import_ldap.rb, line 92 def import_all if !ldap.bind raise Seiso::ImportLdap::AuthenticationFailedError end # TODO Currently we assume Active Directory. Will generalize if/when somebody asks for it. attrs = ACTIVE_DIRECTORY_ATTRS # Hash so we can resolve managers by distinguished name (DN) users = {} ldap.search(:base => @tree_base, :filter => @person_filter, :attributes => attrs) do |user| dn = single_value(user, "dn") users[dn] = user end # Step #1: Delete stale users # seiso_users = seiso.get_keys("people", @source, 0) # puts seiso_users # TODO # Step #2: Create users people = [] users.each do |dn, user| people << to_seiso_person(user) end # TODO Page this, and use PATCH instead of PUT to avoid nulling out managers seiso.post_items("people", people) # Step #3: Link managers # TODO end
ldap()
click to toggle source
# File lib/seiso/import_ldap.rb, line 84 def ldap @ldap end
seiso()
click to toggle source
# File lib/seiso/import_ldap.rb, line 88 def seiso @seiso end
Private Instance Methods
single_value(user, attr)
click to toggle source
# File lib/seiso/import_ldap.rb, line 145 def single_value(user, attr) values = user[attr] (values.nil? || values.empty?) ? nil : values[0].to_s.force_encoding("UTF-8") end
to_seiso_person(user)
click to toggle source
# File lib/seiso/import_ldap.rb, line 127 def to_seiso_person(user) { "username" => single_value(user, "sAMAccountName"), "firstName" => single_value(user, "givenName"), "lastName" => single_value(user, "sn"), "title" => single_value(user, "title"), "company" => single_value(user, "company"), "department" => single_value(user, "department"), "division" => single_value(user, "division"), "location" => single_value(user, "l"), "streetAddress" => single_value(user, "streetAddress"), "workPhone" => single_value(user, "telephoneNumber"), "email" => single_value(user, "mail"), "ldapDn" => single_value(user, "dn"), "source" => @source } end