Class: UriSigner::RequestSignature

Inherits:
Object
  • Object
show all
Defined in:
lib/uri_signer/request_signature.rb

Overview

This is responsible for preparing the raw request in the format necessary for signing. API URI signatures come in a few different flavors. This one will take HTTP_METHOD & ESCAPED_BASE_URI & SORTED_AND_ESCAPED_QUERY_PARAMS

Examples:


request_signature = UriSigner::RequestSignature.new('get', 'https://api.example.com/core/people.json', { 'page' => 5, 'per_page' => 25 })

request_signature.http_method
# => 'GET'

request_signature.base_uri
# => 'https://api.example.com/core/people.json'

request_signature.query_params
# => { 'page' => 5, 'per_page' => 25' }

request_signature.query_params?
# => true

request_signature.encoded_base_uri
# => "https%3A%2F%2Fapi.example.com%2Fcore%2Fpeople.json"

request_signature.encoded_query_params
# => "page%3D5%26per_page%3D25"

request_signature.signature
# => "GET&https%3A%2F%2Fapi.example.com%2Fcore%2Fpeople.json&page%3D5%26per_page%3D25"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(http_method, base_uri, query_params = {}) ⇒ void

Create a new RequestSignature instance

It’s required that you provide at least the http_method and base_uri. Params are optional

Parameters:

  • http_method (String)

    The HTTP method from the request (GET, POST, PUT, or DELETE)

  • base_uri (String)

    The base URI of the request. This is everything except the query string params

  • query_params (Hash) (defaults to: {})

    A hash of the provided query string params

Raises:



44
45
46
47
48
49
50
51
52
# File 'lib/uri_signer/request_signature.rb', line 44

def initialize(http_method, base_uri, query_params = {})
  @http_method  = http_method
  @base_uri     = base_uri
  @query_params = query_params
  @separator    = '&'

  raise UriSigner::Errors::MissingHttpMethodError.new("Please provide an HTTP method") unless http_method?
  raise UriSigner::Errors::MissingBaseUriError.new("Please provide a Base URI") unless base_uri?
end

Instance Attribute Details

#separatorObject (readonly)

The default separator used to join the http_method, encoded_base_uri, and encoded_query_params



33
34
35
# File 'lib/uri_signer/request_signature.rb', line 33

def separator
  @separator
end

Instance Method Details

#base_uriString

Returns the base URI

Returns:



74
75
76
# File 'lib/uri_signer/request_signature.rb', line 74

def base_uri
  @base_uri
end

#encoded_base_uriString

Returns the encoded base_uri

This can be used for comparison to ensure the escaping is what you want

Returns:

  • (String)

    Escaped string of the base_uri



83
84
85
# File 'lib/uri_signer/request_signature.rb', line 83

def encoded_base_uri
  self.base_uri.extend(UriSigner::Helpers::String).escaped
end

#encoded_query_paramsString

Returns the encoded query params as a string

This joins the keys and values in one string, then joins them. Then it will escape the final contents.

Returns:

  • (String)

    Escaped string of the query params



106
107
108
# File 'lib/uri_signer/request_signature.rb', line 106

def encoded_query_params
  query_params_string.extend(UriSigner::Helpers::String).escaped
end

#http_methodString

Returns the uppercased HTTP Method

Returns:



67
68
69
# File 'lib/uri_signer/request_signature.rb', line 67

def http_method
  @http_method.upcase
end

#query_paramsHash

Returns the Query String parameters

Returns:

  • (Hash)

    The keys are stringified



90
91
92
# File 'lib/uri_signer/request_signature.rb', line 90

def query_params
  @query_params.extend(UriSigner::Helpers::Hash).stringify_keys
end

#query_params?Bool

Returns true if query params were provided

Returns:

  • (Bool)


97
98
99
# File 'lib/uri_signer/request_signature.rb', line 97

def query_params?
  !@query_params.blank?
end

#signatureString Also known as: to_s

Returns the full signature string

Returns:



57
58
59
60
61
# File 'lib/uri_signer/request_signature.rb', line 57

def signature
  core_signature = [self.http_method, self.encoded_base_uri]
  core_signature << self.encoded_query_params if self.query_params?
  core_signature.join(self.separator)
end