Class: Payabli::Internal::RoutingAuthProvider

Inherits:
Object
  • Object
show all
Defined in:
lib/payabli/internal/routing_auth_provider.rb

Instance Method Summary collapse

Constructor Details

#initialize(api_key: nil, oauth_provider: nil) ⇒ void

Parameters:

  • api_key (untyped) (defaults to: nil)
  • oauth_provider (untyped) (defaults to: nil)


10
11
12
13
# File 'lib/payabli/internal/routing_auth_provider.rb', line 10

def initialize(api_key: nil, oauth_provider: nil)
  @api_key = api_key
  @oauth_provider = oauth_provider
end

Instance Method Details

#auth_headersHash[String, String]

Endpoint-security applies auth per-endpoint, so no auth headers are added to every request.

Returns:

  • (Hash[String, String])


18
19
20
# File 'lib/payabli/internal/routing_auth_provider.rb', line 18

def auth_headers
  {}
end

#auth_headers_for_endpoint(security:) ⇒ Hash[String, String]

Returns the auth headers for a single endpoint given its static security requirements. Builds only the headers for the first requirement whose schemes all have credentials available (OR across the list, AND within a requirement). Raises when none is satisfiable.

Parameters:

  • security (untyped)

Returns:

  • (Hash[String, String])

Raises:

  • (ArgumentError)


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/payabli/internal/routing_auth_provider.rb', line 29

def auth_headers_for_endpoint(security:)
  return {} if security.nil? || security.empty?

  available_auth_headers = {}
  available_auth_headers["APIKeyAuth"] = { "requestToken" => @api_key.to_s } unless @api_key.nil?
  available_auth_headers["BearerAuth"] = @oauth_provider.auth_headers unless @oauth_provider.nil?

  security.each do |requirement|
    next unless requirement.keys.all? { |scheme_key| available_auth_headers.key?(scheme_key) }

    combined_headers = {}
    requirement.each_key { |scheme_key| combined_headers.merge!(available_auth_headers[scheme_key]) }
    return combined_headers
  end

  missing_schemes = security.map do |requirement|
    requirement.keys.reject { |scheme_key| available_auth_headers.key?(scheme_key) }.join(" AND ")
  end
  raise ArgumentError, "No authentication credentials provided that satisfy the endpoint's security requirements. Please provide credentials for: #{missing_schemes.join(" OR ")}"
end