ldap.rb 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. # Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
  2. require 'ldap'
  3. require 'ldap/user'
  4. class Auth
  5. class Ldap < Auth::Base
  6. def valid?(user, password)
  7. return false if !Setting.get('ldap_integration')
  8. ldap_user = ::Ldap::User.new()
  9. # get from config or fallback to login
  10. # for a list of user attributes which should
  11. # be used for logging in
  12. login_attributes = @config[:login_attributes] || %w(login)
  13. authed = login_attributes.any? do |attribute|
  14. ldap_user.valid?(user[attribute], password)
  15. end
  16. log_auth_result(user, authed)
  17. authed
  18. rescue => e
  19. message = "Can't connect to ldap backend, #{e}"
  20. Rails.logger.info message
  21. log(
  22. user: user,
  23. status: 'failed',
  24. response: message,
  25. )
  26. false
  27. end
  28. private
  29. def log_auth_result(user, authed)
  30. result = authed ? 'success' : 'failed'
  31. log(
  32. user: user,
  33. status: result,
  34. )
  35. end
  36. def log(user:, status:, response: nil)
  37. HttpLog.create(
  38. direction: 'out',
  39. facility: 'ldap',
  40. url: "bind -> #{user.login}",
  41. status: status,
  42. ip: nil,
  43. request: { content: user.login },
  44. response: { content: response || status },
  45. method: 'tcp',
  46. created_by_id: 1,
  47. updated_by_id: 1,
  48. )
  49. end
  50. end
  51. end