Class: SageoneApiRequestSigner

Inherits:
Object
  • Object
show all
Defined in:
lib/sageone_api_request_signer.rb,
lib/sageone_api_request_signer/version.rb

Overview

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

Constant Summary collapse

VERSION =
"1.0.1"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ SageoneApiRequestSigner

Returns a new instance of SageoneApiRequestSigner.



10
11
12
13
14
# File 'lib/sageone_api_request_signer.rb', line 10

def initialize(params = {})
  params.each do |attr, val|
    self.public_send("#{attr}=", val)
  end
end

Instance Attribute Details

#access_tokenObject

Returns the value of attribute access_token.



8
9
10
# File 'lib/sageone_api_request_signer.rb', line 8

def access_token
  @access_token
end

#body_paramsObject

Returns the value of attribute body_params.



8
9
10
# File 'lib/sageone_api_request_signer.rb', line 8

def body_params
  @body_params
end

#nonceObject

Returns the value of attribute nonce.



8
9
10
# File 'lib/sageone_api_request_signer.rb', line 8

def nonce
  @nonce
end

#request_methodObject

Returns the value of attribute request_method.



8
9
10
# File 'lib/sageone_api_request_signer.rb', line 8

def request_method
  @request_method
end

#signing_secretObject

Returns the value of attribute signing_secret.



8
9
10
# File 'lib/sageone_api_request_signer.rb', line 8

def signing_secret
  @signing_secret
end

#urlObject

Returns the value of attribute url.



8
9
10
# File 'lib/sageone_api_request_signer.rb', line 8

def url
  @url
end

Instance Method Details

#base_urlObject



28
29
30
31
32
33
34
35
36
# File 'lib/sageone_api_request_signer.rb', line 28

def base_url
  @base_url ||= [
    uri.scheme,
    '://',
    uri.host,
    (":#{uri.port}" if uri.port != uri.default_port),
    uri.path
  ].join
end

#parameter_stringObject



42
43
44
45
46
47
# File 'lib/sageone_api_request_signer.rb', line 42

def parameter_string
  @parameter_string ||= (
    key_value_pair = percent_encode_pair(url_params.merge(body_params).sort)
    key_value_pair.map{|pair| pair.join('=') }.join('&')
  )
end

#request_headersObject

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



70
71
72
73
74
75
76
# File 'lib/sageone_api_request_signer.rb', line 70

def request_headers
  {
    'Authorization' => "Bearer #{access_token}",
    'X-Nonce' => nonce,
    'X-Signature' => signature
  }
end

#signatureObject



65
66
67
# File 'lib/sageone_api_request_signer.rb', line 65

def signature
  @signature ||= Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), signing_key, signature_base_string))
end

#signature_base_stringObject



49
50
51
52
53
54
55
56
# File 'lib/sageone_api_request_signer.rb', line 49

def signature_base_string
  @signature_base_string ||= [
    request_method,
    percent_encode(base_url),
    percent_encode(parameter_string),
    percent_encode(nonce)
  ].join('&')
end

#signing_keyObject



58
59
60
61
62
63
# File 'lib/sageone_api_request_signer.rb', line 58

def signing_key
  @signing_key ||= [
    percent_encode(signing_secret),
    percent_encode(access_token)
  ].join('&')
end

#uriObject



24
25
26
# File 'lib/sageone_api_request_signer.rb', line 24

def uri
  @uri ||= URI(url)
end

#url_paramsObject



38
39
40
# File 'lib/sageone_api_request_signer.rb', line 38

def url_params
  @url_params ||= Hash[URI::decode_www_form(uri.query || '')]
end