1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: AGPL-3.0
5 class Arvados::V1::CredentialsController < ApplicationController
7 # "secret" is not returned in API calls, but we also want
8 # to disallow its use in queries in general.
13 raise ArvadosModel::PermissionDeniedError.new "Cannot use 'secret' in where clause"
17 def load_filters_param
21 raise ArvadosModel::PermissionDeniedError.new "Cannot filter on 'secret'"
26 def load_limit_offset_order_params
30 raise ArvadosModel::PermissionDeniedError.new "Cannot order by 'secret'"
35 def self._secret_method_description
36 "Fetch the secret part of the credential (can only be invoked by running containers)."
40 # Should have previously determined the user can read the credential in @object
41 c = Container.for_current_token
42 if !@object || !c || c.state != Container::Running
43 send_error("Token is not associated with a running container.", status: 403)
47 if Time.now >= @object.expires_at
48 send_error("Credential has expired.", status: 403)
52 lg = Log.new(event_type: "secret_access")
53 lg.object_uuid = @object.uuid
54 lg.object_owner_uuid = @object.owner_uuid
57 "credential_class": @object.credential_class,
58 "external_id": @object.external_id,
61 send_json({"external_id" => @object.external_id, "secret" => @object.secret})