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