ldap.rb 1.4 KB

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