X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0adb096afc227db376823f84956de6d7ea30dc10..021f8eb819919d4606d7b4c72a2497e842041526:/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 53ae6af464..7645d1597c 100644 --- a/services/api/app/models/api_client_authorization.rb +++ b/services/api/app/models/api_client_authorization.rb @@ -87,14 +87,14 @@ class ApiClientAuthorization < ArvadosModel end def self.remote_host(uuid_prefix:) - Rails.configuration.remote_hosts[uuid_prefix] || - (Rails.configuration.remote_hosts_via_dns && + (Rails.configuration.RemoteClusters[uuid_prefix].andand.Host) || + (Rails.configuration.RemoteClusters["*"].Proxy && uuid_prefix+".arvadosapi.com") end def self.validate(token:, remote: nil) return nil if !token - remote ||= Rails.configuration.uuid_prefix + remote ||= Rails.configuration.ClusterID case token[0..2] when 'v2/' @@ -134,7 +134,7 @@ class ApiClientAuthorization < ArvadosModel end uuid_prefix = uuid[0..4] - if uuid_prefix == Rails.configuration.uuid_prefix + if uuid_prefix == Rails.configuration.ClusterID # If the token were valid, we would have validated it above return nil elsif uuid_prefix.length != 5 @@ -153,12 +153,18 @@ class ApiClientAuthorization < ArvadosModel # [re]validate it. begin clnt = HTTPClient.new - if Rails.configuration.sso_insecure + if Rails.configuration.TLS.Insecure clnt.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE + else + # Use system CA certificates + ["/etc/ssl/certs/ca-certificates.crt", + "/etc/pki/tls/certs/ca-bundle.crt"] + .select { |ca_path| File.readable?(ca_path) } + .each { |ca_path| clnt.ssl_config.add_trust_ca(ca_path) } end remote_user = SafeJSON.load( clnt.get_content('https://' + host + '/arvados/v1/users/current', - {'remote' => Rails.configuration.uuid_prefix}, + {'remote' => Rails.configuration.ClusterID}, {'Authorization' => 'Bearer ' + token})) rescue => e Rails.logger.warn "remote authentication with token #{token.inspect} failed: #{e}" @@ -181,8 +187,8 @@ class ApiClientAuthorization < ArvadosModel end end - if Rails.configuration.new_users_are_active || - Rails.configuration.auto_activate_users_from.include?(remote_user['uuid'][0..4]) + if Rails.configuration.Users.NewUsersAreActive || + Rails.configuration.RemoteClusters[remote_user['uuid'][0..4]].andand["ActivateUsers"] # Update is_active to whatever it is at the remote end user.is_active = remote_user['is_active'] elsif !remote_user['is_active'] @@ -236,6 +242,13 @@ class ApiClientAuthorization < ArvadosModel 'v2/' + uuid + '/' + api_token end + def salted_token(remote:) + if remote.nil? + token + end + 'v2/' + uuid + '/' + OpenSSL::HMAC.hexdigest('sha1', api_token, remote) + end + protected def permission_to_create