class MWS::Query
Attributes
action[R]
aws_access_key_id[R]
aws_secret_access_key[R]
host[R]
mws_auth_token[R]
seller_id[R]
signature_method[R]
signature_version[R]
timestamp[R]
uri[R]
verb[R]
version[R]
Public Class Methods
new(params = {})
click to toggle source
rubocop:disable all
# File lib/mws/query.rb, line 11 def initialize(params = {}) @verb = params[:verb] || 'GET' @uri = params[:uri] || '/' @host = params[:host] @aws_access_key_id = params[:aws_access_key_id] @aws_secret_access_key = params[:aws_secret_access_key] @mws_auth_token = params[:mws_auth_token] @action = params[:action].to_s.camelize.gsub(/(Sku|Asin)/i) { |_s| Regexp.last_match(1).upcase } @seller_id = params[:seller_id] @signature_method = params[:signature_method] || 'HmacSHA256' @signature_version = params[:signature_version] || 2 @timestamp = params[:timestamp] || Time.now @version = params[:version] @params = params[:params] end
Public Instance Methods
build_query(signature = nil)
click to toggle source
# File lib/mws/query.rb, line 42 def build_query(signature = nil) query = { 'AWSAccessKeyId' => @aws_access_key_id, 'Action' => @action, 'SellerId' => @seller_id, 'SignatureMethod' => @signature_method, 'SignatureVersion' => @signature_version, 'Timestamp' => @timestamp, 'Version' => @version } query['MWSAuthToken'] = @mws_auth_token if @mws_auth_token query['Signature'] = signature if signature params = Helpers.camelize_keys(@params || {}) params = Helpers.make_structured_lists(params) query.merge!(params) # Sort hash in natural-byte order uri = Addressable::URI.new uri.query_values = Hash[Helpers.escape_date_time_params(query).sort] uri.query end
canonical()
click to toggle source
# File lib/mws/query.rb, line 33 def canonical canonical = [@verb.to_s.upcase, @host.downcase, @uri, build_query].join("\n") end
request_uri()
click to toggle source
# File lib/mws/query.rb, line 29 def request_uri 'https://' << @host << @uri << '?' << build_query(signature) end
signature()
click to toggle source
# File lib/mws/query.rb, line 37 def signature digest = OpenSSL::Digest.new('sha256') Base64.encode64(OpenSSL::HMAC.digest(digest, aws_secret_access_key, canonical)).strip end