class SageoneApiRequestSigner

“Sign” an Sageone API request call following the steps detailed here: developers.sageone.com/docs#signing_your_requests

Constants

VERSION

Attributes

access_token[RW]
body_params[RW]
nonce[RW]
request_method[RW]
signing_secret[RW]
url[RW]

Public Class Methods

new(params = {}) click to toggle source
# File lib/sageone_api_request_signer.rb, line 12
def initialize(params = {})
  params.each do |attr, val|
    self.public_send("#{attr}=", val)
  end
end

Public Instance Methods

base_url() click to toggle source
# File lib/sageone_api_request_signer.rb, line 30
def base_url
  @base_url ||= [
    uri.scheme,
    '://',
    uri.host,
    (":#{uri.port}" if uri.port != uri.default_port),
    uri.path
  ].join
end
parameter_string() click to toggle source
# File lib/sageone_api_request_signer.rb, line 44
def parameter_string
  @parameter_string ||= (
    Hash[url_params.merge(body_params).sort].to_query.gsub('+','%20')
  )
end
request_headers() click to toggle source

Just a help to write the signature info on the request headers

# File lib/sageone_api_request_signer.rb, line 71
def request_headers
  {
    'Authorization' => "Bearer #{access_token}",
    'X-Nonce' => nonce,
    'X-Signature' => signature
  }
end
signature() click to toggle source
# File lib/sageone_api_request_signer.rb, line 66
def signature
  @signature ||= Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), signing_key, signature_base_string))
end
signature_base_string() click to toggle source
# File lib/sageone_api_request_signer.rb, line 50
def signature_base_string
  @signature_base_string ||= [
    request_method,
    percent_encode(base_url),
    percent_encode(parameter_string),
    percent_encode(nonce)
  ].join('&')
end
signing_key() click to toggle source
# File lib/sageone_api_request_signer.rb, line 59
def signing_key
  @signing_key ||= [
    percent_encode(signing_secret),
    percent_encode(access_token)
  ].join('&')
end
uri() click to toggle source
# File lib/sageone_api_request_signer.rb, line 26
def uri
  @uri ||= URI(url)
end
url_params() click to toggle source
# File lib/sageone_api_request_signer.rb, line 40
def url_params
  @url_params ||= Hash[URI::decode_www_form(uri.query || '')]
end

Private Instance Methods

percent_encode(str) click to toggle source
# File lib/sageone_api_request_signer.rb, line 81
def percent_encode(str)
  URI.escape(str.to_s, /[^0-9A-Za-z\-._~]/)
end