1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- # Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
- require_dependency 'ldap'
- require_dependency 'ldap/user'
- class Auth
- class Ldap < Auth::Base
- def valid?(user, password)
- return false if !Setting.get('ldap_integration')
- ldap_user = ::Ldap::User.new()
- # get from config or fallback to login
- # for a list of user attributes which should
- # be used for logging in
- login_attributes = @config[:login_attributes] || %w[login]
- authed = login_attributes.any? do |attribute|
- ldap_user.valid?(user[attribute], password)
- end
- log_auth_result(user, authed)
- authed
- rescue => e
- message = "Can't connect to ldap backend #{e}"
- Rails.logger.info message
- Rails.logger.info e
- log(
- user: user,
- status: 'failed',
- response: message,
- )
- false
- end
- private
- def log_auth_result(user, authed)
- result = authed ? 'success' : 'failed'
- log(
- user: user,
- status: result,
- )
- end
- def log(user:, status:, response: nil)
- HttpLog.create(
- direction: 'out',
- facility: 'ldap',
- url: "bind -> #{user.login}",
- status: status,
- ip: nil,
- request: { content: user.login },
- response: { content: response || status },
- method: 'tcp',
- created_by_id: 1,
- updated_by_id: 1,
- )
- end
- end
- end
|