class Keyrod::FedcloudClient
Constants
- PROJECTS_PATH
- REDIRECT_HEADER
- SCOPED_PATH
Attributes
access_token[R]
auth_path[R]
site[R]
ssl[R]
Public Class Methods
new()
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 13 def initialize @site = Keyrod::Settings[:site] @access_token = Keyrod::Settings[:'access-token'] @auth_path = "/v3/OS-FEDERATION/identity_providers/#{Keyrod::Settings[:'identity-provider']}/protocols/oidc/auth" @ssl = Keyrod::Settings[:ssl] end
Public Instance Methods
projects(unscoped_token)
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 25 def projects(unscoped_token) response = handle_response(projects_params(unscoped_token), error_message: 'Response for getting list of projects was') parse_projects(response.body) end
scoped_token(unscoped_token, project)
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 30 def scoped_token(unscoped_token, project) response = handle_response(scoped_token_params, body: scoped_token_body(unscoped_token, project), error_message: 'Response for getting scoped token was') response.headers[:'X-Subject-Token'] end
unscoped_token()
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 20 def unscoped_token response = handle_response(unscoped_token_params, error_message: 'Response for getting unscoped token was') response.headers[:'X-Subject-Token'] end
Private Instance Methods
connection(params)
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 89 def connection(params) Faraday.new(File.join(params[:site], params[:path]), ssl: ssl, headers: params[:headers]) end
handle_response(params, body: nil, error_message: '')
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 93 def handle_response(params, body: nil, error_message: '') conn = connection(params) logger.debug "Sending request with headers #{conn.headers}" begin response = body ? conn.post { |req| req.body = body } : conn.get if response.status == 401 && response.headers[REDIRECT_HEADER] params[:site] = parse_redirect(response) response = handle_response(params, body: body, error_message: error_message) end rescue Faraday::ClientError => e raise Keyrod::Errors::ConnectionError, e.message end raise Keyrod::Errors::ResponseError, "#{error_message} #{response.status}" unless response.success? response end
parse_projects(projects_body)
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 80 def parse_projects(projects_body) project_json = JSON.parse(projects_body, symbolize_names: true) project_json[:projects].map { |project| project[:id] } end
parse_redirect(response)
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 85 def parse_redirect(response) response.headers[REDIRECT_HEADER].downcase.sub('keystone uri=', '').delete("'") end
projects_params(unscoped_token)
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 46 def projects_params(unscoped_token) { site: site, headers: { 'X-Auth-Token': unscoped_token, Accept: 'application/json' }, path: PROJECTS_PATH } end
scoped_token_body(unscoped_token, project)
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 62 def scoped_token_body(unscoped_token, project) { auth: { identity: { methods: ['token'], token: { id: unscoped_token } }, scope: { project: { id: project } } } }.to_json end
scoped_token_params()
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 54 def scoped_token_params { site: site, headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, path: SCOPED_PATH } end
unscoped_token_params()
click to toggle source
# File lib/keyrod/fedcloud_client.rb, line 38 def unscoped_token_params { site: site, headers: { Authorization: "Bearer #{access_token}", Accept: 'application/json' }, path: auth_path } end