From 0b773d60455701311d9d036bf3bda3824f0ce6f8 Mon Sep 17 00:00:00 2001 From: Phil Murray Date: Tue, 7 Apr 2015 14:12:28 +1200 Subject: [PATCH 1/4] Loosen the sass-rails gem version constraint A fresh Rails 4.2 install includes sass-rails 5.0.3, which clashes with CASino's requirement of sass-rails 4.x --- casino.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/casino.gemspec b/casino.gemspec index 9a6ccc21..87c244f4 100644 --- a/casino.gemspec +++ b/casino.gemspec @@ -34,7 +34,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'coveralls', '~> 0.7' s.add_runtime_dependency 'rails', '>= 4.1.0', '< 4.3.0' - s.add_runtime_dependency 'sass-rails', '~> 4.0.0' + s.add_runtime_dependency 'sass-rails', '> 4.0.0' s.add_runtime_dependency 'http_accept_language', '~> 2.0.0.pre' s.add_runtime_dependency 'addressable', '~> 2.3' s.add_runtime_dependency 'terminal-table', '~> 1.4' From 33ec971f6a49c1f5618e91f8e50e5069187608f9 Mon Sep 17 00:00:00 2001 From: Phil Murray Date: Tue, 25 Aug 2015 15:23:17 +1200 Subject: [PATCH 2/4] Add context argument for an authenticator to use Sometimes a login might require more information than just a username and password, in these cases the extra info can be pased to the authenticator via the context parameter as a Hash. --- app/controllers/casino/sessions_controller.rb | 2 +- app/processors/casino/authentication_processor.rb | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) mode change 100644 => 100755 app/controllers/casino/sessions_controller.rb mode change 100644 => 100755 app/processors/casino/authentication_processor.rb diff --git a/app/controllers/casino/sessions_controller.rb b/app/controllers/casino/sessions_controller.rb old mode 100644 new mode 100755 index 321b702c..7e9f1eec --- 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], params[:content]) if !validation_result show_login_error I18n.t('login_credential_acceptor.invalid_login_credentials') else diff --git a/app/processors/casino/authentication_processor.rb b/app/processors/casino/authentication_processor.rb old mode 100644 new mode 100755 index 2acf3648..05666537 --- 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 = {}) 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 From f6edddf5b462c7f97f0888be8a480c3d1fde1f41 Mon Sep 17 00:00:00 2001 From: Joel Van Horn Date: Sat, 26 Sep 2015 15:35:00 -0400 Subject: [PATCH 3/4] Created configurable authenticator context --- app/controllers/casino/sessions_controller.rb | 2 +- app/helpers/casino/sessions_helper.rb | 4 ++++ lib/casino.rb | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/controllers/casino/sessions_controller.rb b/app/controllers/casino/sessions_controller.rb index 7e9f1eec..9e1d08fc 100755 --- 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], params[:content]) + 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/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', From 8798094a015ef58436541c5bbbbcf782ec916c3b Mon Sep 17 00:00:00 2001 From: Joel Van Horn Date: Sat, 26 Sep 2015 15:35:14 -0400 Subject: [PATCH 4/4] Don't assume the context is a `Hash` --- app/processors/casino/authentication_processor.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/processors/casino/authentication_processor.rb b/app/processors/casino/authentication_processor.rb index 05666537..c0b3ad9d 100755 --- a/app/processors/casino/authentication_processor.rb +++ b/app/processors/casino/authentication_processor.rb @@ -3,7 +3,7 @@ module CASino::AuthenticationProcessor extend ActiveSupport::Concern - def validate_login_credentials(username, password, context = {}) + def validate_login_credentials(username, password, context = nil) authentication_result = nil authenticators.each do |authenticator_name, authenticator| begin