X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/07dbd859d0b05d79680570c00c43a722102d7ea3..3facf89bf048487ee718fe15d012b489f2d407b7:/services/api/app/models/api_client_authorization.rb diff --git a/services/api/app/models/api_client_authorization.rb b/services/api/app/models/api_client_authorization.rb index 5386cb119a..518fe56937 100644 --- a/services/api/app/models/api_client_authorization.rb +++ b/services/api/app/models/api_client_authorization.rb @@ -113,7 +113,7 @@ class ApiClientAuthorization < ArvadosModel return ApiClientAuthorization.new(user: User.find_by_uuid(system_user_uuid), uuid: Rails.configuration.ClusterID+"-gj3su-000000000000000", api_token: token, - api_client: ApiClient.new(is_trusted: true, url_prefix: "")) + api_client: system_root_token_api_client) else return nil end @@ -164,6 +164,9 @@ class ApiClientAuthorization < ArvadosModel (secret == auth.api_token || secret == OpenSSL::HMAC.hexdigest('sha1', auth.api_token, remote)) # found it + if token_uuid[0..4] != Rails.configuration.ClusterID + Rails.logger.debug "found cached remote token #{token_uuid} with secret #{secret} in local db" + end return auth end @@ -223,6 +226,11 @@ class ApiClientAuthorization < ArvadosModel # Add or update user and token in local database so we can # validate subsequent requests faster. + if remote_user['uuid'][-22..-1] == '-tpzed-anonymouspublic' + # Special case: map the remote anonymous user to local anonymous user + remote_user['uuid'] = anonymous_user_uuid + end + user = User.find_by_uuid(remote_user['uuid']) if !user @@ -254,13 +262,20 @@ class ApiClientAuthorization < ArvadosModel user.send(attr+'=', remote_user[attr]) end + if remote_user['uuid'][-22..-1] == '-tpzed-000000000000000' + user.first_name = "root" + user.last_name = "from cluster #{remote_user_prefix}" + end + act_as_system_user do - if user.is_active && !remote_user['is_active'] + if (user.is_active && !remote_user['is_active']) or (user.is_invited && !remote_user['is_invited']) + # Synchronize the user's "active/invited" state state. This + # also saves the record. user.unsetup + else + user.save! end - user.save! - # We will accept this token (and avoid reloading the user # record) for 'RemoteTokenRefresh' (default 5 minutes). # Possible todo: @@ -274,6 +289,7 @@ class ApiClientAuthorization < ArvadosModel api_token: secret, api_client_id: 0, expires_at: Time.now + Rails.configuration.Login.RemoteTokenRefresh) + Rails.logger.debug "cached remote token #{token_uuid} with secret #{secret} in local db" end return auth else @@ -321,6 +337,7 @@ class ApiClientAuthorization < ArvadosModel end def log_update - super unless (changed - UNLOGGED_CHANGES).empty? + + super unless (saved_changes.keys - UNLOGGED_CHANGES).empty? end end