class ApiSignature::Builder
Constants
- SPLITTER
Attributes
settings[R]
Public Class Methods
new(settings = {}, unsigned_headers = [])
click to toggle source
# File lib/api_signature/builder.rb, line 11 def initialize(settings = {}, unsigned_headers = []) @settings = settings @unsigned_headers = unsigned_headers end
Public Instance Methods
body()
click to toggle source
# File lib/api_signature/builder.rb, line 44 def body @body ||= (settings[:body] || '') end
build_sign_headers(apply_checksum_header = false)
click to toggle source
# File lib/api_signature/builder.rb, line 48 def build_sign_headers(apply_checksum_header = false) @sign_headers = { 'host' => host, 'x-datetime' => datetime } @sign_headers['x-content-sha256'] = content_sha256 if apply_checksum_header @sign_headers end
canonical_request(path)
click to toggle source
# File lib/api_signature/builder.rb, line 69 def canonical_request(path) [ http_method, path, Utils.normalized_querystring(uri.query), canonical_headers + SPLITTER, signed_headers_names, content_sha256 ].join(SPLITTER) end
content_sha256()
click to toggle source
# File lib/api_signature/builder.rb, line 40 def content_sha256 @content_sha256 ||= Utils.sha256_hexdigest(body) end
date()
click to toggle source
# File lib/api_signature/builder.rb, line 36 def date @date ||= datetime.to_s.scan(/\d/).take(8).join end
datetime()
click to toggle source
# File lib/api_signature/builder.rb, line 32 def datetime @datetime ||= extract_datetime end
full_headers()
click to toggle source
# File lib/api_signature/builder.rb, line 57 def full_headers @full_headers ||= merge_sign_with_origin_headers end
headers()
click to toggle source
# File lib/api_signature/builder.rb, line 28 def headers @headers ||= Utils.normalize_keys(settings[:headers]) end
host()
click to toggle source
# File lib/api_signature/builder.rb, line 24 def host @host ||= extract_host_from_uri end
http_method()
click to toggle source
# File lib/api_signature/builder.rb, line 16 def http_method @http_method ||= extract_http_method end
signed_headers()
click to toggle source
# File lib/api_signature/builder.rb, line 61 def signed_headers @signed_headers ||= full_headers.reject { |key, _value| @unsigned_headers.include?(key) } end
signed_headers_names()
click to toggle source
# File lib/api_signature/builder.rb, line 65 def signed_headers_names @signed_headers_names ||= signed_headers.keys.sort.join(';') end
uri()
click to toggle source
# File lib/api_signature/builder.rb, line 20 def uri @uri ||= extract_uri end
Private Instance Methods
canonical_headers()
click to toggle source
# File lib/api_signature/builder.rb, line 113 def canonical_headers signed_headers.sort_by(&:first) .map { |k, v| "#{k}:#{Utils.canonical_header_value(v.to_s)}" } .join(SPLITTER) end
extract_datetime()
click to toggle source
# File lib/api_signature/builder.rb, line 102 def extract_datetime headers['x-datetime'] || Time.now.utc.strftime(ApiSignature.configuration.datetime_format) end
extract_host_from_uri()
click to toggle source
# File lib/api_signature/builder.rb, line 94 def extract_host_from_uri if Utils.standard_port?(uri) uri.host else "#{uri.host}:#{uri.port}" end end
extract_http_method()
click to toggle source
# File lib/api_signature/builder.rb, line 82 def extract_http_method raise ArgumentError, 'missing required option :http_method' unless settings[:http_method] settings[:http_method].to_s.upcase end
extract_uri()
click to toggle source
# File lib/api_signature/builder.rb, line 88 def extract_uri raise ArgumentError, 'missing required option :url' unless settings[:url] URI.parse(settings[:url].to_s) end
merge_sign_with_origin_headers()
click to toggle source
# File lib/api_signature/builder.rb, line 106 def merge_sign_with_origin_headers raise ArgumentError, 'missing required variable sign_headers' unless @sign_headers # merge so we do not modify given headers hash headers.merge(@sign_headers) end