X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/230ac956317ec9389252240de934edc168098a76..33606c82797185fa65751f5724304f02605e0e05:/services/api/app/controllers/user_sessions_controller.rb diff --git a/services/api/app/controllers/user_sessions_controller.rb b/services/api/app/controllers/user_sessions_controller.rb index 696ae026c5..256a67bcbb 100644 --- a/services/api/app/controllers/user_sessions_controller.rb +++ b/services/api/app/controllers/user_sessions_controller.rb @@ -1,6 +1,7 @@ class UserSessionsController < ApplicationController before_filter :require_auth_scope, :only => [ :destroy ] + skip_before_filter :set_cors_headers skip_before_filter :find_object_by_uuid skip_before_filter :render_404_if_no_object @@ -57,6 +58,9 @@ class UserSessionsController < ApplicationController end end + # For the benefit of functional and integration tests: + @user = user + # prevent ArvadosModel#before_create and _update from throwing # "unauthorized": Thread.current[:user] = user @@ -96,6 +100,8 @@ class UserSessionsController < ApplicationController # to save the return_to parameter (if it exists; see the application # controller). /auth/joshid bypasses the application controller. def login + auth_provider = if params[:auth_provider] then "auth_provider=#{CGI.escape(params[:auth_provider])}" else "" end + if current_user and params[:return_to] # Already logged in; just need to send a token to the requesting # API client. @@ -105,9 +111,9 @@ class UserSessionsController < ApplicationController send_api_token_to(params[:return_to], current_user) elsif params[:return_to] - redirect_to "/auth/joshid?return_to=#{CGI.escape(params[:return_to])}" + redirect_to "/auth/joshid?return_to=#{CGI.escape(params[:return_to])}&#{auth_provider}" else - redirect_to "/auth/joshid" + redirect_to "/auth/joshid?#{auth_provider}" end end @@ -136,4 +142,8 @@ class UserSessionsController < ApplicationController callback_url += 'api_token=' + api_client_auth.api_token redirect_to callback_url end + + def cross_origin_forbidden + send_error 'Forbidden', status: 403 + end end