class SageoneSdk::Signature
Attributes
http_method[R]
nonce[R]
Public Class Methods
generate_nonce()
click to toggle source
# File lib/sageone_sdk/signature.rb, line 20 def self.generate_nonce SecureRandom.hex end
new(http_method, url, request_body, nonce, secret, token)
click to toggle source
Constructor
# File lib/sageone_sdk/signature.rb, line 11 def initialize(http_method, url, request_body, nonce, secret, token) @http_method = http_method.to_s.upcase @url = URI(url) @request_body = request_body.to_s @nonce = nonce @secret = secret @token = token end
Public Instance Methods
base_url()
click to toggle source
Set the base URL
# File lib/sageone_sdk/signature.rb, line 25 def base_url base_array = [] base_array << @url.scheme base_array << "://" base_array << @url.host base_array << ":#{@url.port}" if @url.port != @url.default_port base_array << @url.path base_array.join end
body_params()
click to toggle source
Request body params
# File lib/sageone_sdk/signature.rb, line 42 def body_params get_params_hash(@request_body) end
query_params()
click to toggle source
Request query params
# File lib/sageone_sdk/signature.rb, line 37 def query_params get_params_hash(@url.query) end
request_params()
click to toggle source
Generate the request params from the request query and body params
# File lib/sageone_sdk/signature.rb, line 47 def request_params request_hash = query_params.merge(body_params).sort request_array = [] request_hash.each do |key, value| request_array << "#{key}=#{value}" end request_array.join('&') end
signature_base_string()
click to toggle source
Generate the base signature string
# File lib/sageone_sdk/signature.rb, line 59 def signature_base_string s = @http_method.dup s << '&' s << percent_encode(base_url) s << '&' s << percent_encode(request_params.to_s) s << '&' s << percent_encode(nonce.to_s) s end
signing_key()
click to toggle source
Generate the signing key
# File lib/sageone_sdk/signature.rb, line 72 def signing_key s = percent_encode(@secret) s << '&' s << percent_encode(@token) s end
to_s()
click to toggle source
Generates the signature
# File lib/sageone_sdk/signature.rb, line 81 def to_s s = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), signing_key, signature_base_string)) s end
Private Instance Methods
get_params_hash(params)
click to toggle source
Generates a hash from a params string
# File lib/sageone_sdk/signature.rb, line 90 def get_params_hash(params) params_hash = {} if !params.nil? and !params.empty? params = percent_decode(params) params.split('&').each do |param| param_pair = param.split('=') params_hash[percent_encode(param_pair[0])] = percent_encode(param_pair[1]) end end params_hash end
percent_decode(str)
click to toggle source
# File lib/sageone_sdk/signature.rb, line 111 def percent_decode(str) CGI.unescape(str).gsub("%20", "+") end
percent_encode(str)
click to toggle source
Percent encodes special characters in a string
# File lib/sageone_sdk/signature.rb, line 105 def percent_encode(str) # Replaced deprecated URI.escape with CGI.escape # CGI.escape replaces spaces with "+", so we also need to substitute them with "%20" CGI.escape(str).gsub("+", "%20") end