class SageoneApiSigner
Sign a Sage One 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_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
Return the base URL without query string and fragment
# File lib/sageone_api_signer.rb, line 31 def base_url @base_url ||= [ uri.scheme, '://', uri.host, uri_port_string, uri.path ].join end
parameter_string()
click to toggle source
# File lib/sageone_api_signer.rb, line 45 def parameter_string @parameter_string ||= ( Hash[url_params.merge(body_params).sort].to_query.gsub('+','%20') ) end
request_headers(user_agent)
click to toggle source
The request headers
# File lib/sageone_api_signer.rb, line 73 def request_headers(user_agent) { 'Authorization' => "Bearer #{access_token}", 'X-Nonce' => nonce, 'X-Signature' => signature, 'Accept' => '*/*', 'Content-Type' => 'application/x-www-form-urlencoded', 'User-Agent' => user_agent } end
signature()
click to toggle source
generate a Base64 encoded signature
# File lib/sageone_api_signer.rb, line 68 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_signer.rb, line 51 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_signer.rb, line 60 def signing_key @signing_key ||= [ percent_encode(signing_secret), percent_encode(access_token) ].join('&') end
uri()
click to toggle source
# File lib/sageone_api_signer.rb, line 26 def uri @uri ||= URI(url) end
url_params()
click to toggle source
# File lib/sageone_api_signer.rb, line 41 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_signer.rb, line 86 def percent_encode(str) URI.escape(str.to_s, /[^0-9A-Za-z\-._~]/) end
uri_port_string()
click to toggle source
# File lib/sageone_api_signer.rb, line 90 def uri_port_string uri.port == uri.default_port ? "" : ":#{uri.port}" end