@@ -14,14 +14,27 @@ def find_current_user
1414 # Get the header-provided login value
1515 login = read_sso_login
1616
17+ if login . present?
18+ perform_header_sso login , user
19+ elsif header_optional?
20+ user
21+ else
22+ handle_sso_failure!
23+ nil
24+ end
25+ end
26+
27+ def perform_header_sso ( login , user )
1728 # Log out the current user if the login does not match
1829 logged_user = match_sso_with_logged_user ( login , user )
1930
2031 # Return the logged in user if matches
2132 return logged_user if logged_user . present?
2233
2334 Rails . logger . debug { "Starting header-based auth source SSO for #{ header_name } ='#{ op_auth_header_value } '" }
24- perform_header_sso login
35+
36+ user = find_user_from_auth_source ( login ) || create_user_from_auth_source ( login )
37+ handle_sso_for! user , login
2538 end
2639
2740 def match_sso_with_logged_user ( login , user )
@@ -34,16 +47,6 @@ def match_sso_with_logged_user(login, user)
3447 nil
3548 end
3649
37- def perform_header_sso ( login )
38- if login
39- user = find_user_from_auth_source ( login ) || create_user_from_auth_source ( login )
40-
41- handle_sso_for! user , login
42- else
43- handle_sso_failure!
44- end
45- end
46-
4750 def read_sso_login
4851 get_validated_login! op_auth_header_value
4952 end
@@ -162,7 +165,8 @@ def sso_login_failed?(user)
162165 def handle_sso_for! ( user , login )
163166 if sso_login_failed? ( user )
164167 handle_sso_failure! ( { user : user , login : login } )
165- else # valid user
168+ else
169+ # valid user
166170 # If a user is invited, ensure it gets activated
167171 activated = user . invited?
168172 activate_user_if_invited! user
@@ -173,6 +177,8 @@ def handle_sso_for!(user, login)
173177
174178 def handle_sso_success ( user , just_activated )
175179 session [ :user_from_auth_header ] = true
180+ # remember the back_url so we can redirect to the original request
181+ session [ :back_url ] = request . fullpath
176182 successful_authentication ( user , reset_stages : true , just_registered : just_activated )
177183 end
178184
@@ -191,8 +197,6 @@ def perform_post_logout(prev_session, previous_user)
191197 end
192198
193199 def handle_sso_failure! ( session_args = { } )
194- return if header_optional?
195-
196200 session [ :auth_source_sso_failure ] = session_args . merge (
197201 back_url : request . base_url + request . original_fullpath ,
198202 ttl : 1
0 commit comments