Guest User

Untitled

a guest
Mar 10th, 2018
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. require 'net/ldap'
  2.  
  3. $serverlist = ["ldap1", "ldap2"]
  4. $domain = "DOMAIN"
  5. $treebase = 'dc=domain,dc=com'
  6.  
  7. class User < ActiveRecord::Base
  8. has_many :estimates
  9.  
  10. def self.authenticate(userid, password)
  11. user = nil
  12. $serverlist.each do |server|
  13. begin
  14. print "trying server: #{server}\n"
  15. ldap_user = User.get_user_from_ldap_server(server, $domain, userid, password)
  16. if ldap_user
  17. # so, we have an ldap user..
  18. # find user data locally. if not found, create.
  19. user = User.find_by_username(ldap_user.samaccountname[0])
  20. if !user
  21. user = User.new
  22. # set some defaults.
  23. user.username = ldap_data.samaccountname[0]
  24. user.password = ""
  25. user.edit_users = false
  26. user.edit_other_estimates = false
  27. user.approve_estimates = false
  28. user.edit_products = false
  29. user.edit_laborrates = false
  30. end
  31. user.sync_from_ldap_data(ldap_user)
  32. user.save
  33. end
  34. break
  35. rescue Net::LDAP::LdapError => err
  36. if err.message == "no connection to server"
  37. next
  38. end
  39. end
  40. end
  41. user
  42. end
  43.  
  44. def self.get_user_from_ldap_server(server, domain, username, password)
  45. ldap_user = nil
  46. # connect to server. error travels up...
  47. ldap = Net::LDAP.new(:host => server, :port => 389, :auth => {:method => :simple, :username => $domain + "\\" + username, :password => password})
  48. ldap.bind
  49. # find user
  50. filter1 = Net::LDAP::Filter.eq('samaccountname', username)
  51. dn = ldap.search(:base => $treebase, :filter => filter1)
  52. ldap_user = dn[0] if dn and !dn.empty?
  53. ldap_user
  54. end
  55.  
  56. # sync a particular user from the ldap server
  57. def sync_from_ldap(server, domain, username, password)
  58. ldap_user = get_user_from_ldap_server(server, domain, username, password)
  59. if ldap_user
  60. sync_from_ldap_data(ldap_user)
  61. end
  62. end
  63.  
  64. # sync a particular user from ldap data
  65. def sync_from_ldap_data(ldap_data)
  66. return if !ldap_data # quick check for !nil.. just in case.
  67. print "Syncing from ldap\n"
  68.  
  69. self.fullname = ldap_data.name[0]
  70. end
  71.  
  72. end
Add Comment
Please, Sign In to add comment