Guest User

Untitled

a guest
Jan 23rd, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. require 'net-ldap'
  2.  
  3. HOST = "XXXXXX"
  4. PORT = 389
  5. LDAP = Net::LDAP.new(:host => HOST, :port => PORT)
  6.  
  7. # get account info somewhere safe
  8. LDAP.auth(CONFIG.admin_user, CONFIG.admin_password)
  9.  
  10. if LDAP.bind
  11. log "ldap logged in"
  12. else
  13. log "ldap login failed"
  14. abort
  15. end
  16.  
  17. # CONFIG.permitted_users is the name of the apps security group
  18. $members = get_members CONFIG.permitted_users
  19.  
  20. def get_ldap_username cn
  21. treebase = "ou=xxxxxx,ou=xxxxxx,ou=xxxxxxx,ou=xxxxxx,dc=xxx,dc=xx"
  22. filter = Net::LDAP::Filter.eq("cn", cn)
  23. LDAP.search(:filter => filter, :base => treebase) do |item|
  24. return item.sAMAccountName.first
  25. end
  26. end
  27.  
  28. def get_members name, members = []
  29. treebase = "ou=xxxxxxx,ou=xxxxxxx,ou=xxxxxxx,ou=xxxxxx,dc=xxx,dc=xx"
  30. filter = Net::LDAP::Filter.eq("cn", name)
  31. LDAP.search(:filter => filter, :base => treebase) do |item|
  32. item.each do |attribute, values|
  33. if attribute == :member
  34. values.each do |value|
  35. cn = value[/CN=([^,]+),/,1]
  36.  
  37. # my groups all begin with a letter/number sequence
  38. # recurse this method if member is a group itself
  39. if cn[0..2].downcase == "xxx" # xxx something else of course
  40. get_members cn, members
  41. else
  42. members << get_ldap_username(cn)
  43. end
  44.  
  45. end
  46. end
  47. end
  48. end
  49. members # an array of permitted usernames
  50. end
  51.  
  52. before do
  53. # authentication code
  54. # see https://stackoverflow.com/questions/5506932/is-there-a-way-to-read-a-clients-windows-login-name-using-ruby-on-rails/48407500#48407500
  55.  
  56. # authorisation
  57. unless $members.include? @username
  58. halt "No access"
  59. end
  60. end
Add Comment
Please, Sign In to add comment