diff --git a/app/controllers/casino/sessions_controller.rb b/app/controllers/casino/sessions_controller.rb old mode 100644 new mode 100755 index 321b702c..9e1d08fc --- a/app/controllers/casino/sessions_controller.rb +++ b/app/controllers/casino/sessions_controller.rb @@ -20,7 +20,7 @@ def new end def create - validation_result = validate_login_credentials(params[:username], params[:password]) + validation_result = validate_login_credentials(params[:username], params[:password], current_authenticator_context) if !validation_result show_login_error I18n.t('login_credential_acceptor.invalid_login_credentials') else diff --git a/app/helpers/casino/sessions_helper.rb b/app/helpers/casino/sessions_helper.rb index 1f688846..782df6b5 100644 --- a/app/helpers/casino/sessions_helper.rb +++ b/app/helpers/casino/sessions_helper.rb @@ -23,6 +23,10 @@ def current_user tgt.user end + def current_authenticator_context + CASino.config.authenticator_context_builder.call(params, request) + end + def ensure_signed_in redirect_to login_path unless signed_in? end diff --git a/app/processors/casino/authentication_processor.rb b/app/processors/casino/authentication_processor.rb old mode 100644 new mode 100755 index 2acf3648..c0b3ad9d --- a/app/processors/casino/authentication_processor.rb +++ b/app/processors/casino/authentication_processor.rb @@ -3,11 +3,17 @@ module CASino::AuthenticationProcessor extend ActiveSupport::Concern - def validate_login_credentials(username, password) + def validate_login_credentials(username, password, context = nil) authentication_result = nil authenticators.each do |authenticator_name, authenticator| begin - data = authenticator.validate(username, password) + credentials = [ username, password, context ] + + # Old authenticators that don't accept a 3rd context parameter will have a validate + # method that only accepts 2 arguments, so check for that. + credentials.pop if authenticator.class.instance_method(:validate).arity == 2 + + data = authenticator.validate(*credentials) rescue CASino::Authenticator::AuthenticatorError => e Rails.logger.error "Authenticator '#{authenticator_name}' (#{authenticator.class}) raised an error: #{e}" end diff --git a/lib/casino.rb b/lib/casino.rb index 7e59d284..6ff1a004 100644 --- a/lib/casino.rb +++ b/lib/casino.rb @@ -6,6 +6,7 @@ module CASino defaults = { authenticators: HashWithIndifferentAccess.new, + authenticator_context_builder: ->(params, request){ }, logger: Rails.logger, frontend: HashWithIndifferentAccess.new( sso_name: 'CASino',