From 2883ec58edf910c665c9f88d804d86a4062611d5 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Wed, 6 May 2020 10:40:55 -0600 Subject: [PATCH 01/20] thinkwell/yolk#78 : integrate resource db lookup into authenticate_crowd_credentials --- .../strategies/credentials_authenticatable.rb | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index 78ac1af..39a6b6f 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -49,7 +49,35 @@ def valid_params? def authenticate_crowd_credentials username = authentication_hash[resource_class.crowd_username_key] - token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(username, password) } if username + + if username + # try to first authenticate against DB password if exists + resource = resource_class.find_by_username(username) + if resource && resource.valid_password?(password) + token = resource.get_or_create_token + end + + # if DB authentication not successful try against crowd + unless token + Rails.logger.debug "AUTHENTICATE : #{username} : in CROWD ..." + token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(username, password) } + end + + if token + # if user does not exist create and update from crowd user + unless resource + resource = resource_class.new + crowd_user = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(username) } + resource.update_from_crowd_user crowd_user + Rails.logger.debug "AUTHENTICATE : #{username} : created user from CROWD #{crowd_user.inspect}" + end + + # if successful update password hash in DB via devise + Rails.logger.debug "AUTHENTICATE : #{username} : update password in DB" + resource.password = password + resource.save! + end + end if token self.crowd_token = token From 2f39ea24afff22c2df39edc1b14434921ace2561 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Wed, 6 May 2020 13:52:30 -0600 Subject: [PATCH 02/20] thinkwell/yolk#78 : check UserToken in token_authenticatable --- .../strategies/token_authenticatable.rb | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/devise_crowd/strategies/token_authenticatable.rb b/lib/devise_crowd/strategies/token_authenticatable.rb index 05703ec..1dc2639 100644 --- a/lib/devise_crowd/strategies/token_authenticatable.rb +++ b/lib/devise_crowd/strategies/token_authenticatable.rb @@ -71,14 +71,23 @@ def crowd_token_param def authenticate_crowd_token self.crowd_record = nil if has_crowd_token? - if DeviseCrowd.crowd_fetch { crowd_client.is_valid_user_token?(crowd_token) } - crowd_session = DeviseCrowd.session(warden, scope) - if crowd_session['crowd.last_token'] == crowd_token && crowd_session['crowd.last_username'] - self.crowd_username = crowd_session['crowd.last_username'] - else - self.crowd_record = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_token(crowd_token) } + # try to first authenticate against DB token if exists + resource = resource_class.find_by_token(crowd_token) + if resource + self.crowd_username = resource.send(resource_class.crowd_username_key) + end + + unless self.crowd_username + Rails.logger.debug "AUTHENTICATE token : #{username} : in CROWD ..." + if DeviseCrowd.crowd_fetch { crowd_client.is_valid_user_token?(crowd_token) } + crowd_session = DeviseCrowd.session(warden, scope) + if crowd_session['crowd.last_token'] == crowd_token && crowd_session['crowd.last_username'] + self.crowd_username = crowd_session['crowd.last_username'] + else + self.crowd_record = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_token(crowd_token) } + end + DeviseCrowd::Logger.send("cannot find user for token key") unless self.crowd_username end - DeviseCrowd::Logger.send("cannot find user for token key") unless self.crowd_username end end end From bdca434b91b6a9e55aee47d1da9b49c8ed1b66ba Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Wed, 6 May 2020 15:02:50 -0600 Subject: [PATCH 03/20] thinkwell/yolk#78 : fix log message --- lib/devise_crowd/strategies/token_authenticatable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/devise_crowd/strategies/token_authenticatable.rb b/lib/devise_crowd/strategies/token_authenticatable.rb index 1dc2639..fd8a23e 100644 --- a/lib/devise_crowd/strategies/token_authenticatable.rb +++ b/lib/devise_crowd/strategies/token_authenticatable.rb @@ -78,7 +78,7 @@ def authenticate_crowd_token end unless self.crowd_username - Rails.logger.debug "AUTHENTICATE token : #{username} : in CROWD ..." + Rails.logger.debug "AUTHENTICATE token : #{crowd_token} : in CROWD ..." if DeviseCrowd.crowd_fetch { crowd_client.is_valid_user_token?(crowd_token) } crowd_session = DeviseCrowd.session(warden, scope) if crowd_session['crowd.last_token'] == crowd_token && crowd_session['crowd.last_username'] From 776bf1c92d4675cf14e2186429742d0d8d01a434 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Thu, 7 May 2020 04:49:40 -0600 Subject: [PATCH 04/20] thinkwell/yolk#78 : update password only if not pwd exist or invalid in resource class --- .../strategies/credentials_authenticatable.rb | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index 39a6b6f..6ada70f 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -61,21 +61,21 @@ def authenticate_crowd_credentials unless token Rails.logger.debug "AUTHENTICATE : #{username} : in CROWD ..." token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(username, password) } - end - if token - # if user does not exist create and update from crowd user - unless resource - resource = resource_class.new - crowd_user = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(username) } - resource.update_from_crowd_user crowd_user - Rails.logger.debug "AUTHENTICATE : #{username} : created user from CROWD #{crowd_user.inspect}" + if token + # if user does not exist create and update from crowd user + unless resource + resource = resource_class.new + crowd_user = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(username) } + resource.update_from_crowd_user crowd_user + Rails.logger.debug "AUTHENTICATE : #{username} : created user from CROWD #{crowd_user.inspect}" + end + + # if successful update password hash in DB via devise + Rails.logger.debug "AUTHENTICATE : #{username} : update password in DB" + resource.password = password + resource.save! end - - # if successful update password hash in DB via devise - Rails.logger.debug "AUTHENTICATE : #{username} : update password in DB" - resource.password = password - resource.save! end end From ed1e910ac3703e66d9b155dd698c28df2cf893b5 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Thu, 7 May 2020 04:54:19 -0600 Subject: [PATCH 05/20] thinkwell/yolk#78 : improve log messages --- lib/devise_crowd/strategies/credentials_authenticatable.rb | 6 +++--- lib/devise_crowd/strategies/token_authenticatable.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index 6ada70f..5c38efa 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -59,7 +59,7 @@ def authenticate_crowd_credentials # if DB authentication not successful try against crowd unless token - Rails.logger.debug "AUTHENTICATE : #{username} : in CROWD ..." + Rails.logger.debug "DEVISE CREDS AUTH : #{username} : in CROWD ..." token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(username, password) } if token @@ -68,11 +68,11 @@ def authenticate_crowd_credentials resource = resource_class.new crowd_user = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(username) } resource.update_from_crowd_user crowd_user - Rails.logger.debug "AUTHENTICATE : #{username} : created user from CROWD #{crowd_user.inspect}" + Rails.logger.debug "DEVISE CREDS AUTH : #{username} : created user from CROWD #{crowd_user.inspect}" end # if successful update password hash in DB via devise - Rails.logger.debug "AUTHENTICATE : #{username} : update password in DB" + Rails.logger.debug "DEVISE CREDS AUTH : #{username} : update password in DB" resource.password = password resource.save! end diff --git a/lib/devise_crowd/strategies/token_authenticatable.rb b/lib/devise_crowd/strategies/token_authenticatable.rb index fd8a23e..4a731d7 100644 --- a/lib/devise_crowd/strategies/token_authenticatable.rb +++ b/lib/devise_crowd/strategies/token_authenticatable.rb @@ -78,7 +78,7 @@ def authenticate_crowd_token end unless self.crowd_username - Rails.logger.debug "AUTHENTICATE token : #{crowd_token} : in CROWD ..." + Rails.logger.debug "DEVISE TOKEN AUTH : #{crowd_token} : in CROWD ..." if DeviseCrowd.crowd_fetch { crowd_client.is_valid_user_token?(crowd_token) } crowd_session = DeviseCrowd.session(warden, scope) if crowd_session['crowd.last_token'] == crowd_token && crowd_session['crowd.last_username'] From 0ad907873a4cc9136d08fac71346c1e3389f7650 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Thu, 7 May 2020 08:34:17 -0600 Subject: [PATCH 06/20] thinkwell/yolk#78 : only sync_from_crowd when update_crowd_records = true, add config.cookie_domain and config.cookie_secure --- lib/devise_crowd/config.rb | 6 ++++++ lib/devise_crowd/cookie.rb | 13 +++++++++++-- lib/devise_crowd/models/common.rb | 3 ++- lib/devise_crowd/strategies/common.rb | 7 ++++++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/lib/devise_crowd/config.rb b/lib/devise_crowd/config.rb index 2d64881..0d6af95 100644 --- a/lib/devise_crowd/config.rb +++ b/lib/devise_crowd/config.rb @@ -33,6 +33,12 @@ module Devise mattr_accessor :crowd_auto_register @@crowd_auto_register = true + mattr_accessor :cookie_domain + @@cookie_domain = nil + + mattr_accessor :cookie_secure + @@cookie_secure = nil + mattr_accessor :add_crowd_records @@add_crowd_records = false diff --git a/lib/devise_crowd/cookie.rb b/lib/devise_crowd/cookie.rb index 897012a..48def38 100644 --- a/lib/devise_crowd/cookie.rb +++ b/lib/devise_crowd/cookie.rb @@ -1,8 +1,17 @@ module DeviseCrowd + def self.get_cookie_info(record_class, crowd_client) + if record_class.cookie_domain + {domain: record_class.cookie_domain, secure: record_class.cookie_secure} + else + Rails.logger.debug "DEVISE CROWD : set_cookie : get_cookie_info" + DeviseCrowd.crowd_fetch { crowd_client.get_cookie_info } + end + end + def self.set_cookie(token, warden, record_class, crowd_client=nil) crowd_client ||= record_class.crowd_client - cookie_info = DeviseCrowd.crowd_fetch { crowd_client.get_cookie_info } + cookie_info = self.get_cookie_info(record_class, crowd_client) if cookie_info warden.cookies[record_class.crowd_token_key] = { :domain => cookie_info[:domain], @@ -14,7 +23,7 @@ def self.set_cookie(token, warden, record_class, crowd_client=nil) def self.destroy_cookie(warden, record_class, crowd_client=nil) crowd_client ||= record_class.crowd_client - cookie_info = DeviseCrowd.crowd_fetch { crowd_client.get_cookie_info } + cookie_info = self.get_cookie_info(record_class, crowd_client) if cookie_info warden.cookies.delete(record_class.crowd_token_key, :domain => cookie_info[:domain]) end diff --git a/lib/devise_crowd/models/common.rb b/lib/devise_crowd/models/common.rb index e27b172..ce66b15 100644 --- a/lib/devise_crowd/models/common.rb +++ b/lib/devise_crowd/models/common.rb @@ -55,6 +55,7 @@ def crowd_record if @crowd_record.nil? @crowd_record = false username = self.send(:"#{self.class.crowd_username_key}") + Rails.logger.debug "DEVISE CROWD model : crowd_record : find_user_by_name #{username}" record = DeviseCrowd.crowd_fetch {crowd_client.find_user_by_name(username)} if username @crowd_record = record if record end @@ -151,7 +152,7 @@ def do_sync_to_crowd module ClassMethods - Devise::Models.config(self, :crowd_enabled, :crowd_service_url, :crowd_app_name, :crowd_app_password, :crowd_token_key, :crowd_username_key, :crowd_auth_every, :crowd_allow_forgery_protection, :crowd_auto_register, :add_crowd_records, :update_crowd_records) + Devise::Models.config(self, :crowd_enabled, :crowd_service_url, :crowd_app_name, :crowd_app_password, :crowd_token_key, :crowd_username_key, :crowd_auth_every, :crowd_allow_forgery_protection, :crowd_auto_register, :add_crowd_records, :update_crowd_records, :cookie_domain, :cookie_secure) def crowd_client SimpleCrowd::Client.new({ diff --git a/lib/devise_crowd/strategies/common.rb b/lib/devise_crowd/strategies/common.rb index 541b739..07597a0 100644 --- a/lib/devise_crowd/strategies/common.rb +++ b/lib/devise_crowd/strategies/common.rb @@ -13,6 +13,7 @@ def crowd_username=(username) end def crowd_record + Rails.logger.debug "DEVISE CROWD : crowd_record : find_user_by_name #{@crowd_username}" @crowd_record ||= @crowd_username && DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(@crowd_username) } end @@ -36,7 +37,7 @@ def validate_crowd_username! fail(:crowd_unverified_request) else DeviseCrowd::Logger.send("authenticated via #{authenticatable_name}!") - sync_from_crowd(resource) if sync_from_crowd? + sync_from_crowd(resource) if sync_from_crowd? and update_crowd_records? cache_authentication if store? yield(resource) if block_given? success!(resource) @@ -68,6 +69,10 @@ def crowd_auto_register? !!resource_class.crowd_auto_register end + def update_crowd_records? + !!resource_class.update_crowd_records + end + def crowd_client @crowd_client ||= resource_class.crowd_client end From d61b75a7dfa295437d44ce40a1d69dba5872f0cb Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Thu, 7 May 2020 12:28:55 -0600 Subject: [PATCH 07/20] thinkwell/yolk#78 : try to find resource by username in DB first --- lib/devise_crowd/strategies/common.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/devise_crowd/strategies/common.rb b/lib/devise_crowd/strategies/common.rb index 07597a0..f097b70 100644 --- a/lib/devise_crowd/strategies/common.rb +++ b/lib/devise_crowd/strategies/common.rb @@ -25,7 +25,13 @@ def crowd_record=(record) private def validate_crowd_username! + # lookup resource on DB first if crowd_username + resource = resource_class.find_by_username(crowd_username) + end + + # if resource not found lookup on CROWD + if crowd_username && !resource resource = resource_class.find_for_crowd_username(crowd_username) resource = create_from_crowd if !resource && crowd_auto_register? end From b5ef818169a4462cc3ab334a00b797ff9a586b7a Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Fri, 8 May 2020 05:16:26 -0600 Subject: [PATCH 08/20] thinkwell/yolk#78 : create user token in DB after validating and fetching in crowd --- lib/devise_crowd/strategies/common.rb | 8 +++++-- .../strategies/token_authenticatable.rb | 21 ++++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/devise_crowd/strategies/common.rb b/lib/devise_crowd/strategies/common.rb index f097b70..3153b14 100644 --- a/lib/devise_crowd/strategies/common.rb +++ b/lib/devise_crowd/strategies/common.rb @@ -13,8 +13,12 @@ def crowd_username=(username) end def crowd_record - Rails.logger.debug "DEVISE CROWD : crowd_record : find_user_by_name #{@crowd_username}" - @crowd_record ||= @crowd_username && DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(@crowd_username) } + if !@crowd_record && @crowd_username + Rails.logger.debug "DEVISE CROWD : crowd_record : find_user_by_name #{@crowd_username}" + @crowd_record = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(@crowd_username) } + end + + @crowd_record end def crowd_record=(record) diff --git a/lib/devise_crowd/strategies/token_authenticatable.rb b/lib/devise_crowd/strategies/token_authenticatable.rb index 4a731d7..f7de0c9 100644 --- a/lib/devise_crowd/strategies/token_authenticatable.rb +++ b/lib/devise_crowd/strategies/token_authenticatable.rb @@ -78,15 +78,34 @@ def authenticate_crowd_token end unless self.crowd_username - Rails.logger.debug "DEVISE TOKEN AUTH : #{crowd_token} : in CROWD ..." if DeviseCrowd.crowd_fetch { crowd_client.is_valid_user_token?(crowd_token) } + Rails.logger.debug "DEVISE TOKEN AUTH : #{crowd_token} : is valid in CROWD" crowd_session = DeviseCrowd.session(warden, scope) if crowd_session['crowd.last_token'] == crowd_token && crowd_session['crowd.last_username'] self.crowd_username = crowd_session['crowd.last_username'] else self.crowd_record = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_token(crowd_token) } + if self.crowd_record + Rails.logger.debug "DEVISE TOKEN AUTH : #{crowd_token} : found user by token in CROWD : #{self.crowd_username}" + resource = resource_class.find_by_username(self.crowd_username) + # if user does not exist create and update from crowd user + unless resource + resource = resource_class.new + resource.update_from_crowd_user self.crowd_record + resource.save! + Rails.logger.debug "DEVISE TOKEN AUTH : #{self.crowd_username} : created user #{resource.id} from CROWD" + end + + # if successful update user token in DB + Rails.logger.debug "DEVISE TOKEN AUTH : #{self.crowd_username} : update user token in DB" + resource.update_token(crowd_token) + else + Rails.logger.debug "DEVISE TOKEN AUTH : #{crowd_token} : no user found by token in CROWD" + end end DeviseCrowd::Logger.send("cannot find user for token key") unless self.crowd_username + else + Rails.logger.debug "DEVISE TOKEN AUTH : #{crowd_token} : NOT valid in CROWD" end end end From 2bd0b0a0fec42a3615743faea16f94c1e3a2528c Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Tue, 12 May 2020 09:48:41 -0600 Subject: [PATCH 09/20] thinkwell/yolk#78 : lookup resource by email or username --- lib/devise_crowd/strategies/common.rb | 2 +- .../strategies/credentials_authenticatable.rb | 57 +++++++++++-------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/lib/devise_crowd/strategies/common.rb b/lib/devise_crowd/strategies/common.rb index 3153b14..479e6a5 100644 --- a/lib/devise_crowd/strategies/common.rb +++ b/lib/devise_crowd/strategies/common.rb @@ -31,7 +31,7 @@ def crowd_record=(record) def validate_crowd_username! # lookup resource on DB first if crowd_username - resource = resource_class.find_by_username(crowd_username) + resource = resource_class.find_by_username_or_email(crowd_username) end # if resource not found lookup on CROWD diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index 5c38efa..96cf31d 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -48,40 +48,47 @@ def valid_params? end def authenticate_crowd_credentials - username = authentication_hash[resource_class.crowd_username_key] - - if username + crowd_username = authentication_hash[resource_class.crowd_username_key] + email = params[@scope][:username] || params[@scope][:email] || crowd_username + if email # try to first authenticate against DB password if exists - resource = resource_class.find_by_username(username) - if resource && resource.valid_password?(password) - token = resource.get_or_create_token + resource = resource_class.find_by_username_or_email(email) + unless resource + Rails.logger.debug "DEVISE CREDS AUTH : #{email} : no User found in DB" + else + if resource.valid_password?(password) + crowd_username = email + token = resource.get_or_create_token + else + Rails.logger.debug "DEVISE CREDS AUTH : #{email} : password in DB does not match" + end end + end - # if DB authentication not successful try against crowd - unless token - Rails.logger.debug "DEVISE CREDS AUTH : #{username} : in CROWD ..." - token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(username, password) } - - if token - # if user does not exist create and update from crowd user - unless resource - resource = resource_class.new - crowd_user = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(username) } - resource.update_from_crowd_user crowd_user - Rails.logger.debug "DEVISE CREDS AUTH : #{username} : created user from CROWD #{crowd_user.inspect}" - end - - # if successful update password hash in DB via devise - Rails.logger.debug "DEVISE CREDS AUTH : #{username} : update password in DB" - resource.password = password - resource.save! + # if DB authentication not successful try against crowd + unless token + Rails.logger.debug "DEVISE CREDS AUTH : #{crowd_username} : in CROWD ..." + token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(crowd_username, password) } + + if token + # if user does not exist create and update from crowd user + unless resource + resource = resource_class.new + crowd_user = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(crowd_username) } + resource.update_from_crowd_user crowd_user + Rails.logger.debug "DEVISE CREDS AUTH : #{resource.email} : created user from CROWD #{crowd_user.inspect}" end + + # if successful update password hash in DB via devise + Rails.logger.debug "DEVISE CREDS AUTH : #{resource.email} : update password in DB" + resource.password = password + resource.save! end end if token self.crowd_token = token - self.crowd_username = username + self.crowd_username = crowd_username else self.crowd_token = self.crowd_username = nil end From 02e4dd59d67bea9e2e99bfa6f1c88c77c051bcc8 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Wed, 13 May 2020 09:13:35 -0600 Subject: [PATCH 10/20] thinkwell/yolk#81 : rename config.disabled to config.noop --- lib/devise_crowd/config.rb | 3 +++ lib/devise_crowd/models/common.rb | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/devise_crowd/config.rb b/lib/devise_crowd/config.rb index 0d6af95..7c57722 100644 --- a/lib/devise_crowd/config.rb +++ b/lib/devise_crowd/config.rb @@ -7,6 +7,9 @@ module Devise mattr_accessor :crowd_service_url @@crowd_service_url = "http://localhost:8095/crowd" + mattr_accessor :crowd_noop + @@crowd_noop = false + mattr_accessor :crowd_app_name @@crowd_app_name = "crowd" diff --git a/lib/devise_crowd/models/common.rb b/lib/devise_crowd/models/common.rb index ce66b15..0f2ce48 100644 --- a/lib/devise_crowd/models/common.rb +++ b/lib/devise_crowd/models/common.rb @@ -152,7 +152,7 @@ def do_sync_to_crowd module ClassMethods - Devise::Models.config(self, :crowd_enabled, :crowd_service_url, :crowd_app_name, :crowd_app_password, :crowd_token_key, :crowd_username_key, :crowd_auth_every, :crowd_allow_forgery_protection, :crowd_auto_register, :add_crowd_records, :update_crowd_records, :cookie_domain, :cookie_secure) + Devise::Models.config(self, :crowd_enabled, :crowd_noop, :crowd_service_url, :crowd_app_name, :crowd_app_password, :crowd_token_key, :crowd_username_key, :crowd_auth_every, :crowd_allow_forgery_protection, :crowd_auto_register, :add_crowd_records, :update_crowd_records, :cookie_domain, :cookie_secure) def crowd_client SimpleCrowd::Client.new({ @@ -160,6 +160,7 @@ def crowd_client :app_name => self.crowd_app_name, :app_password => self.crowd_app_password, :cache_store => Rails.cache, + :noop => self.crowd_noop }) end From 7930e4e66680096297e32f51052d6f6b3b0b455d Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Sat, 23 May 2020 05:43:36 -0600 Subject: [PATCH 11/20] thinkwell/yolk#78 : use resource.upsert_user_token to update or insert token --- .../strategies/credentials_authenticatable.rb | 19 +++++++++++++------ .../strategies/token_authenticatable.rb | 15 ++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index 96cf31d..ed4ac1e 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -54,20 +54,24 @@ def authenticate_crowd_credentials # try to first authenticate against DB password if exists resource = resource_class.find_by_username_or_email(email) unless resource - Rails.logger.debug "DEVISE CREDS AUTH : #{email} : no User found in DB" + Rails.logger.info "DEVISE CREDS AUTH : #{email} : no User found in DB" else if resource.valid_password?(password) crowd_username = email - token = resource.get_or_create_token + if resource.user_token + token = resource.upsert_user_token resource.user_token.token + else + token = resource.upsert_user_token + end else - Rails.logger.debug "DEVISE CREDS AUTH : #{email} : password in DB does not match" + Rails.logger.info "DEVISE CREDS AUTH : #{email} : password in DB does not match" end end end # if DB authentication not successful try against crowd unless token - Rails.logger.debug "DEVISE CREDS AUTH : #{crowd_username} : in CROWD ..." + Rails.logger.info "DEVISE CREDS AUTH : #{crowd_username} : in CROWD ..." token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(crowd_username, password) } if token @@ -76,11 +80,14 @@ def authenticate_crowd_credentials resource = resource_class.new crowd_user = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(crowd_username) } resource.update_from_crowd_user crowd_user - Rails.logger.debug "DEVISE CREDS AUTH : #{resource.email} : created user from CROWD #{crowd_user.inspect}" + Rails.logger.info "DEVISE CREDS AUTH : #{resource.email} : created user from CROWD #{crowd_user.inspect}" end + Rails.logger.info "DEVISE CREDS AUTH : #{resource.email} : upsert user token in DB : #{token}" + resource.upsert_user_token token + # if successful update password hash in DB via devise - Rails.logger.debug "DEVISE CREDS AUTH : #{resource.email} : update password in DB" + Rails.logger.info "DEVISE CREDS AUTH : #{resource.email} : update password in DB" resource.password = password resource.save! end diff --git a/lib/devise_crowd/strategies/token_authenticatable.rb b/lib/devise_crowd/strategies/token_authenticatable.rb index f7de0c9..157e908 100644 --- a/lib/devise_crowd/strategies/token_authenticatable.rb +++ b/lib/devise_crowd/strategies/token_authenticatable.rb @@ -74,38 +74,39 @@ def authenticate_crowd_token # try to first authenticate against DB token if exists resource = resource_class.find_by_token(crowd_token) if resource + resource.upsert_user_token(crowd_token) self.crowd_username = resource.send(resource_class.crowd_username_key) end unless self.crowd_username if DeviseCrowd.crowd_fetch { crowd_client.is_valid_user_token?(crowd_token) } - Rails.logger.debug "DEVISE TOKEN AUTH : #{crowd_token} : is valid in CROWD" + Rails.logger.info "DEVISE TOKEN AUTH : #{crowd_token} : is valid in CROWD" crowd_session = DeviseCrowd.session(warden, scope) if crowd_session['crowd.last_token'] == crowd_token && crowd_session['crowd.last_username'] self.crowd_username = crowd_session['crowd.last_username'] else self.crowd_record = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_token(crowd_token) } if self.crowd_record - Rails.logger.debug "DEVISE TOKEN AUTH : #{crowd_token} : found user by token in CROWD : #{self.crowd_username}" + Rails.logger.info "DEVISE TOKEN AUTH : #{crowd_token} : found user by token in CROWD : #{self.crowd_username}" resource = resource_class.find_by_username(self.crowd_username) # if user does not exist create and update from crowd user unless resource resource = resource_class.new resource.update_from_crowd_user self.crowd_record resource.save! - Rails.logger.debug "DEVISE TOKEN AUTH : #{self.crowd_username} : created user #{resource.id} from CROWD" + Rails.logger.info "DEVISE TOKEN AUTH : #{self.crowd_username} : created user #{resource.id} from CROWD" end # if successful update user token in DB - Rails.logger.debug "DEVISE TOKEN AUTH : #{self.crowd_username} : update user token in DB" - resource.update_token(crowd_token) + Rails.logger.info "DEVISE TOKEN AUTH : #{self.crowd_username} : update user token in DB" + resource.upsert_user_token(crowd_token) else - Rails.logger.debug "DEVISE TOKEN AUTH : #{crowd_token} : no user found by token in CROWD" + Rails.logger.info "DEVISE TOKEN AUTH : #{crowd_token} : no user found by token in CROWD" end end DeviseCrowd::Logger.send("cannot find user for token key") unless self.crowd_username else - Rails.logger.debug "DEVISE TOKEN AUTH : #{crowd_token} : NOT valid in CROWD" + Rails.logger.info "DEVISE TOKEN AUTH : #{crowd_token} : NOT valid in CROWD" end end end From 783abfc43d9638143f85eb24bca86586357b0b31 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Tue, 26 May 2020 14:05:41 -0600 Subject: [PATCH 12/20] thinkwell/yolk#78 : get token from user_token response --- lib/devise_crowd/strategies/credentials_authenticatable.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index ed4ac1e..f8dc439 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -59,9 +59,9 @@ def authenticate_crowd_credentials if resource.valid_password?(password) crowd_username = email if resource.user_token - token = resource.upsert_user_token resource.user_token.token + token = resource.upsert_user_token(resource.user_token.token).token else - token = resource.upsert_user_token + token = resource.upsert_user_token().token end else Rails.logger.info "DEVISE CREDS AUTH : #{email} : password in DB does not match" From ac1d9b5a96f42f31cf7d5be9326a925a8210087d Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Tue, 26 May 2020 14:20:01 -0600 Subject: [PATCH 13/20] thinkwell/yolk#78 : use DeviseCrowd::Logger for logging --- .../strategies/credentials_authenticatable.rb | 12 ++++++------ lib/devise_crowd/strategies/token_authenticatable.rb | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index f8dc439..608db7f 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -54,7 +54,7 @@ def authenticate_crowd_credentials # try to first authenticate against DB password if exists resource = resource_class.find_by_username_or_email(email) unless resource - Rails.logger.info "DEVISE CREDS AUTH : #{email} : no User found in DB" + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{email} : no User found in DB" else if resource.valid_password?(password) crowd_username = email @@ -64,14 +64,14 @@ def authenticate_crowd_credentials token = resource.upsert_user_token().token end else - Rails.logger.info "DEVISE CREDS AUTH : #{email} : password in DB does not match" + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{email} : password in DB does not match" end end end # if DB authentication not successful try against crowd unless token - Rails.logger.info "DEVISE CREDS AUTH : #{crowd_username} : in CROWD ..." + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{crowd_username} : in CROWD ..." token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(crowd_username, password) } if token @@ -80,14 +80,14 @@ def authenticate_crowd_credentials resource = resource_class.new crowd_user = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(crowd_username) } resource.update_from_crowd_user crowd_user - Rails.logger.info "DEVISE CREDS AUTH : #{resource.email} : created user from CROWD #{crowd_user.inspect}" + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{resource.email} : created user from CROWD #{crowd_user.inspect}" end - Rails.logger.info "DEVISE CREDS AUTH : #{resource.email} : upsert user token in DB : #{token}" + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{resource.email} : upsert user token in DB : #{token}" resource.upsert_user_token token # if successful update password hash in DB via devise - Rails.logger.info "DEVISE CREDS AUTH : #{resource.email} : update password in DB" + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{resource.email} : update password in DB" resource.password = password resource.save! end diff --git a/lib/devise_crowd/strategies/token_authenticatable.rb b/lib/devise_crowd/strategies/token_authenticatable.rb index 157e908..07e153a 100644 --- a/lib/devise_crowd/strategies/token_authenticatable.rb +++ b/lib/devise_crowd/strategies/token_authenticatable.rb @@ -80,33 +80,33 @@ def authenticate_crowd_token unless self.crowd_username if DeviseCrowd.crowd_fetch { crowd_client.is_valid_user_token?(crowd_token) } - Rails.logger.info "DEVISE TOKEN AUTH : #{crowd_token} : is valid in CROWD" + DeviseCrowd::Logger.send "DEVISE TOKEN AUTH : #{crowd_token} : is valid in CROWD" crowd_session = DeviseCrowd.session(warden, scope) if crowd_session['crowd.last_token'] == crowd_token && crowd_session['crowd.last_username'] self.crowd_username = crowd_session['crowd.last_username'] else self.crowd_record = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_token(crowd_token) } if self.crowd_record - Rails.logger.info "DEVISE TOKEN AUTH : #{crowd_token} : found user by token in CROWD : #{self.crowd_username}" + DeviseCrowd::Logger.send "DEVISE TOKEN AUTH : #{crowd_token} : found user by token in CROWD : #{self.crowd_username}" resource = resource_class.find_by_username(self.crowd_username) # if user does not exist create and update from crowd user unless resource resource = resource_class.new resource.update_from_crowd_user self.crowd_record resource.save! - Rails.logger.info "DEVISE TOKEN AUTH : #{self.crowd_username} : created user #{resource.id} from CROWD" + DeviseCrowd::Logger.send "DEVISE TOKEN AUTH : #{self.crowd_username} : created user #{resource.id} from CROWD" end # if successful update user token in DB - Rails.logger.info "DEVISE TOKEN AUTH : #{self.crowd_username} : update user token in DB" + DeviseCrowd::Logger.send "DEVISE TOKEN AUTH : #{self.crowd_username} : update user token in DB" resource.upsert_user_token(crowd_token) else - Rails.logger.info "DEVISE TOKEN AUTH : #{crowd_token} : no user found by token in CROWD" + DeviseCrowd::Logger.send "DEVISE TOKEN AUTH : #{crowd_token} : no user found by token in CROWD" end end DeviseCrowd::Logger.send("cannot find user for token key") unless self.crowd_username else - Rails.logger.info "DEVISE TOKEN AUTH : #{crowd_token} : NOT valid in CROWD" + DeviseCrowd::Logger.send "DEVISE TOKEN AUTH : #{crowd_token} : NOT valid in CROWD" end end end From 594ca0268d2d691aa062bada1d72d4d0915ef992 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Wed, 27 May 2020 05:24:20 -0600 Subject: [PATCH 14/20] thinkwell/yolk#78 : get token from crowd before upserting --- .../strategies/credentials_authenticatable.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index 608db7f..3930f95 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -57,12 +57,18 @@ def authenticate_crowd_credentials DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{email} : no User found in DB" else if resource.valid_password?(password) - crowd_username = email - if resource.user_token - token = resource.upsert_user_token(resource.user_token.token).token + token = resource.user_token && resource.user_token.token + unless token + token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(crowd_username, password) } + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{crowd_username} : got token from CROWD #{token}" if token + end + if token + resource.upsert_user_token(token) else token = resource.upsert_user_token().token + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{email} : generated token : #{token}" end + crowd_username = email else DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{email} : password in DB does not match" end From 4c93a78ac60a244020b999f76a1070240037b892 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Thu, 28 May 2020 08:28:59 -0600 Subject: [PATCH 15/20] thinkwell/yolk#78 : use crowd first in credentials_authenticatable --- .../strategies/credentials_authenticatable.rb | 63 ++++++++----------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index 3930f95..bc343f2 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -50,24 +50,39 @@ def valid_params? def authenticate_crowd_credentials crowd_username = authentication_hash[resource_class.crowd_username_key] email = params[@scope][:username] || params[@scope][:email] || crowd_username - if email - # try to first authenticate against DB password if exists + + # authentication against crowd + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{crowd_username} : in CROWD ..." + token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(crowd_username, password) } + + if token resource = resource_class.find_by_username_or_email(email) + # if user does not exist create and update from crowd user + unless resource + resource = resource_class.new + crowd_user = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(crowd_username) } + resource.update_from_crowd_user crowd_user + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{resource.email} : created user from CROWD #{crowd_user.inspect}" + end + + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{resource.email} : upsert user token in DB : #{token}" + resource.upsert_user_token token + + # if successful update password hash in DB via devise + DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{resource.email} : update password in DB" + resource.password = password + resource.save! + end + + if email && !token + # authenticate against DB password + resource = resource || resource_class.find_by_username_or_email(email) unless resource DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{email} : no User found in DB" else if resource.valid_password?(password) token = resource.user_token && resource.user_token.token - unless token - token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(crowd_username, password) } - DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{crowd_username} : got token from CROWD #{token}" if token - end - if token - resource.upsert_user_token(token) - else - token = resource.upsert_user_token().token - DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{email} : generated token : #{token}" - end + token = resource.upsert_user_token(token).token crowd_username = email else DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{email} : password in DB does not match" @@ -75,30 +90,6 @@ def authenticate_crowd_credentials end end - # if DB authentication not successful try against crowd - unless token - DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{crowd_username} : in CROWD ..." - token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(crowd_username, password) } - - if token - # if user does not exist create and update from crowd user - unless resource - resource = resource_class.new - crowd_user = DeviseCrowd.crowd_fetch { crowd_client.find_user_by_name(crowd_username) } - resource.update_from_crowd_user crowd_user - DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{resource.email} : created user from CROWD #{crowd_user.inspect}" - end - - DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{resource.email} : upsert user token in DB : #{token}" - resource.upsert_user_token token - - # if successful update password hash in DB via devise - DeviseCrowd::Logger.send "DEVISE CREDS AUTH : #{resource.email} : update password in DB" - resource.password = password - resource.save! - end - end - if token self.crowd_token = token self.crowd_username = crowd_username From d2f0d80c6dee250b96541ae09d9dd82512113516 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Fri, 5 Jun 2020 10:31:14 -0600 Subject: [PATCH 16/20] thinkwell/yolk#82 : use prepend CrowdUsernameKeyWithDefault instead of alias_method_chain --- lib/devise_crowd/config.rb | 2 +- lib/devise_crowd/models/common.rb | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/devise_crowd/config.rb b/lib/devise_crowd/config.rb index 2d64881..0ab48b3 100644 --- a/lib/devise_crowd/config.rb +++ b/lib/devise_crowd/config.rb @@ -22,7 +22,7 @@ module Devise # The name of the crowd username parameter/field. If nil (default), the # first authentication_keys key will be used (e.g. email). mattr_accessor :crowd_username_key - @@crowd_username_key = nil + @@crowd_username_key = "crowd_username" mattr_accessor :crowd_logger @@crowd_logger = true diff --git a/lib/devise_crowd/models/common.rb b/lib/devise_crowd/models/common.rb index e27b172..270a47f 100644 --- a/lib/devise_crowd/models/common.rb +++ b/lib/devise_crowd/models/common.rb @@ -149,8 +149,19 @@ def do_sync_to_crowd private :do_sync_to_crowd + module CrowdUsernameKeyWithDefault + def default + key = super + unless key + key = (authentication_keys.is_a?(Hash) ? authentication_keys.keys : authentication_keys).first + end + key + end + end module ClassMethods + prepend CrowdUsernameKeyWithDefault + Devise::Models.config(self, :crowd_enabled, :crowd_service_url, :crowd_app_name, :crowd_app_password, :crowd_token_key, :crowd_username_key, :crowd_auth_every, :crowd_allow_forgery_protection, :crowd_auto_register, :add_crowd_records, :update_crowd_records) def crowd_client @@ -170,15 +181,6 @@ def crowd_enabled?(strategy=nil) end end - def crowd_username_key_with_default - key = crowd_username_key_without_default - unless key - key = (authentication_keys.is_a?(Hash) ? authentication_keys.keys : authentication_keys).first - end - key - end - alias_method_chain :crowd_username_key, :default - def find_for_crowd_username(username) find_for_authentication({self.crowd_username_key => username}) end From 022e249fb5d805006f4f9cb895a0f34a15dd0534 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Mon, 8 Jun 2020 08:51:00 -0600 Subject: [PATCH 17/20] thinkwell/yolk#82 : use with_indifferent_access for authentication_hash --- lib/devise_crowd/strategies/credentials_authenticatable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index 78ac1af..2313808 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -48,7 +48,7 @@ def valid_params? end def authenticate_crowd_credentials - username = authentication_hash[resource_class.crowd_username_key] + username = authentication_hash.with_indifferent_access[resource_class.crowd_username_key] token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(username, password) } if username if token From 5fba4451b752f62f85692f4684a9783b456d6cca Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Mon, 8 Jun 2020 09:38:34 -0600 Subject: [PATCH 18/20] thinkwell/yolk#82 : use seconds gor crowd_auth_every.ago --- lib/devise_crowd/models/common.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/devise_crowd/models/common.rb b/lib/devise_crowd/models/common.rb index 270a47f..3b64864 100644 --- a/lib/devise_crowd/models/common.rb +++ b/lib/devise_crowd/models/common.rb @@ -42,7 +42,7 @@ def has_crowd_record? end def needs_crowd_auth?(last_auth) - last_auth && last_auth <= self.class.crowd_auth_every.ago + last_auth && last_auth <= self.class.crowd_auth_every.seconds.ago end def next_crowd_auth(last_auth) From b246cbcc50233b096259e0e7b449f3b9546c6b1a Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Mon, 6 Jul 2020 06:33:29 -0600 Subject: [PATCH 19/20] thinkwell/yolk#78 : merge vs do-yolk-heroku-upgrade --- lib/devise_crowd/strategies/credentials_authenticatable.rb | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/devise_crowd/strategies/credentials_authenticatable.rb b/lib/devise_crowd/strategies/credentials_authenticatable.rb index cb21b42..b2d82bc 100644 --- a/lib/devise_crowd/strategies/credentials_authenticatable.rb +++ b/lib/devise_crowd/strategies/credentials_authenticatable.rb @@ -48,8 +48,7 @@ def valid_params? end def authenticate_crowd_credentials -<<<<<<< HEAD - crowd_username = authentication_hash[resource_class.crowd_username_key] + crowd_username = authentication_hash.with_indifferent_access[resource_class.crowd_username_key] email = params[@scope][:username] || params[@scope][:email] || crowd_username # authentication against crowd @@ -90,10 +89,6 @@ def authenticate_crowd_credentials end end end -======= - username = authentication_hash.with_indifferent_access[resource_class.crowd_username_key] - token = DeviseCrowd.crowd_fetch { crowd_client.authenticate_user(username, password) } if username ->>>>>>> do-yolk-heroku-upgrade if token self.crowd_token = token From c112fab0b57bcc8e2f5fc799be8fb3050b0838e8 Mon Sep 17 00:00:00 2001 From: Dominik Steiner Date: Mon, 12 Feb 2024 06:05:12 +0100 Subject: [PATCH 20/20] thinkwell/yolk#78 : fix File.exists? to File.exist? --- spec/rails_app/config/boot.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/rails_app/config/boot.rb b/spec/rails_app/config/boot.rb index 4489e58..f2830ae 100644 --- a/spec/rails_app/config/boot.rb +++ b/spec/rails_app/config/boot.rb @@ -3,4 +3,4 @@ # Set up gems listed in the Gemfile. ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) -require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) +require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])