X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/7c3e13d4876a8e37feffee3cdaebc44b20b7b61b..cf0171de6e0f875748cc80026c9ea8a11147c750:/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 55db16a4b5..77fc0a45af 100644 --- a/services/api/app/models/api_client_authorization.rb +++ b/services/api/app/models/api_client_authorization.rb @@ -92,9 +92,11 @@ class ApiClientAuthorization < ArvadosModel uuid_prefix+".arvadosapi.com") end - def self.make_http_client + def self.make_http_client(uuid_prefix:) clnt = HTTPClient.new - if Rails.configuration.TLS.Insecure + + if uuid_prefix && (Rails.configuration.RemoteClusters[uuid_prefix].andand.Insecure || + Rails.configuration.RemoteClusters['*'].andand.Insecure) clnt.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE else # Use system CA certificates @@ -106,10 +108,26 @@ class ApiClientAuthorization < ArvadosModel clnt end + def self.check_system_root_token token + if token == Rails.configuration.SystemRootToken + return ApiClientAuthorization.new(user: User.find_by_uuid(system_user_uuid), + uuid: uuid_prefix+"-gj3su-000000000000000", + api_token: token, + api_client: ApiClient.new(is_trusted: true, url_prefix: "")) + else + return nil + end + end + def self.validate(token:, remote: nil) - return nil if !token + return nil if token.nil? or token.empty? remote ||= Rails.configuration.ClusterID + auth = self.check_system_root_token(token) + if !auth.nil? + return auth + end + case token[0..2] when 'v2/' _, token_uuid, secret, optional = token.split('/') @@ -167,7 +185,7 @@ class ApiClientAuthorization < ArvadosModel # by a remote cluster when the token absent or expired in our # database. To begin, we need to ask the cluster that issued # the token to [re]validate it. - clnt = ApiClientAuthorization.make_http_client + clnt = ApiClientAuthorization.make_http_client(uuid_prefix: token_uuid_prefix) host = remote_host(uuid_prefix: token_uuid_prefix) if !host @@ -219,20 +237,16 @@ class ApiClientAuthorization < ArvadosModel # Sync user record. if remote_user_prefix == Rails.configuration.Login.LoginCluster - # Remote cluster controls our user database, copy both - # 'is_active' and 'is_admin' - user.is_active = remote_user['is_active'] + # Remote cluster controls our user database, set is_active if + # remote is active. If remote is not active, user will be + # unsetup (see below). + user.is_active = true if remote_user['is_active'] user.is_admin = remote_user['is_admin'] else if Rails.configuration.Users.NewUsersAreActive || Rails.configuration.RemoteClusters[remote_user_prefix].andand["ActivateUsers"] - # Default policy is to activate users, so match activate - # with the remote record. - user.is_active = remote_user['is_active'] - elsif !remote_user['is_active'] - # Deactivate user if the remote is inactive, otherwise don't - # change 'is_active'. - user.is_active = false + # Default policy is to activate users + user.is_active = true if remote_user['is_active'] end end @@ -241,6 +255,10 @@ class ApiClientAuthorization < ArvadosModel end act_as_system_user do + if user.is_active && !remote_user['is_active'] + user.unsetup + end + user.save! # We will accept this token (and avoid reloading the user