X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/351a497c96770f379acdfe58ebeff34262e1308b..707ed2964a24ebe940ae440af22fdcb56781fcbd:/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 256a67bcbb..5de85bc98b 100644 --- a/services/api/app/controllers/user_sessions_controller.rb +++ b/services/api/app/controllers/user_sessions_controller.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + class UserSessionsController < ApplicationController before_filter :require_auth_scope, :only => [ :destroy ] @@ -15,12 +19,16 @@ class UserSessionsController < ApplicationController unless identity_url_ok # Whoa. This should never happen. logger.error "UserSessionsController.create: omniauth object missing/invalid" - logger.error "omniauth.pretty_inspect():\n\n#{omniauth.pretty_inspect()}" + logger.error "omniauth: "+omniauth.pretty_inspect return redirect_to login_failure_url end - user = User.find_by_identity_url(omniauth['info']['identity_url']) + # Only local users can create sessions, hence uuid_like_pattern + # here. + user = User.where('identity_url = ? and uuid like ?', + omniauth['info']['identity_url'], + User.uuid_like_pattern).first if not user # Check for permission to log in to an existing User record with # a different identity_url @@ -45,6 +53,9 @@ class UserSessionsController < ApplicationController :identity_url => omniauth['info']['identity_url'], :is_active => Rails.configuration.new_users_are_active, :owner_uuid => system_user_uuid) + if omniauth['info']['username'] + user.set_initial_username(requested: omniauth['info']['username']) + end act_as_system_user do user.save or raise Exception.new(user.errors.messages) end @@ -93,7 +104,7 @@ class UserSessionsController < ApplicationController flash[:notice] = 'You have logged off' return_to = params[:return_to] || root_url - redirect_to "#{CUSTOM_PROVIDER_URL}/users/sign_out?redirect_uri=#{CGI.escape return_to}" + redirect_to "#{Rails.configuration.sso_provider_url}/users/sign_out?redirect_uri=#{CGI.escape return_to}" end # login - Just bounce to /auth/joshid. The only purpose of this function is @@ -124,7 +135,8 @@ class UserSessionsController < ApplicationController # Stub: automatically register all new API clients api_client_url_prefix = callback_url.match(%r{^.*?://[^/]+})[0] + '/' act_as_system_user do - @api_client = ApiClient.find_or_create_by_url_prefix api_client_url_prefix + @api_client = ApiClient. + find_or_create_by(url_prefix: api_client_url_prefix) end api_client_auth = ApiClientAuthorization.