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.1.0"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ SageoneApiRequestSigner

Returns a new instance of SageoneApiRequestSigner.



12
13
14
15
16
# File 'lib/sageone_api_request_signer.rb', line 12

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.



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

def access_token
  @access_token
end

#body_paramsObject

Returns the value of attribute body_params.



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

def body_params
  @body_params
end

#nonceObject

Returns the value of attribute nonce.



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

def nonce
  @nonce
end

#request_methodObject

Returns the value of attribute request_method.



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

def request_method
  @request_method
end

#signing_secretObject

Returns the value of attribute signing_secret.



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

def signing_secret
  @signing_secret
end

#urlObject

Returns the value of attribute url.



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

def url
  @url
end

Instance Method Details

#base_urlObject



30
31
32
33
34
35
36
37
38
# 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_stringObject



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

def parameter_string
  @parameter_string ||= (
    url_params.merge(body_params).sort.to_h.to_query.gsub('+','%20')
  )
end

#request_headersObject

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



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

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

#signatureObject



66
67
68
# 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_stringObject



50
51
52
53
54
55
56
57
# 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_keyObject



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

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

#uriObject



26
27
28
# File 'lib/sageone_api_request_signer.rb', line 26

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

#url_paramsObject



40
41
42
# File 'lib/sageone_api_request_signer.rb', line 40

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