Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'net/ldap'
- $serverlist = ["ldap1", "ldap2"]
- $domain = "DOMAIN"
- $treebase = 'dc=domain,dc=com'
- class User < ActiveRecord::Base
- has_many :estimates
- def self.authenticate(userid, password)
- user = nil
- $serverlist.each do |server|
- begin
- print "trying server: #{server}\n"
- ldap_user = User.get_user_from_ldap_server(server, $domain, userid, password)
- if ldap_user
- # so, we have an ldap user..
- # find user data locally. if not found, create.
- user = User.find_by_username(ldap_user.samaccountname[0])
- if !user
- user = User.new
- # set some defaults.
- user.username = ldap_data.samaccountname[0]
- user.password = ""
- user.edit_users = false
- user.edit_other_estimates = false
- user.approve_estimates = false
- user.edit_products = false
- user.edit_laborrates = false
- end
- user.sync_from_ldap_data(ldap_user)
- user.save
- end
- break
- rescue Net::LDAP::LdapError => err
- if err.message == "no connection to server"
- next
- end
- end
- end
- user
- end
- def self.get_user_from_ldap_server(server, domain, username, password)
- ldap_user = nil
- # connect to server. error travels up...
- ldap = Net::LDAP.new(:host => server, :port => 389, :auth => {:method => :simple, :username => $domain + "\\" + username, :password => password})
- ldap.bind
- # find user
- filter1 = Net::LDAP::Filter.eq('samaccountname', username)
- dn = ldap.search(:base => $treebase, :filter => filter1)
- ldap_user = dn[0] if dn and !dn.empty?
- ldap_user
- end
- # sync a particular user from the ldap server
- def sync_from_ldap(server, domain, username, password)
- ldap_user = get_user_from_ldap_server(server, domain, username, password)
- if ldap_user
- sync_from_ldap_data(ldap_user)
- end
- end
- # sync a particular user from ldap data
- def sync_from_ldap_data(ldap_data)
- return if !ldap_data # quick check for !nil.. just in case.
- print "Syncing from ldap\n"
- self.fullname = ldap_data.name[0]
- end
- end
Add Comment
Please, Sign In to add comment