class MWS::Query

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