class Simplepay::Signature

Public Class Methods

new(uri, params, secret_key = Simplepay.aws_secret_access_key) click to toggle source
# File lib/simplepay/signature.rb, line 10
def initialize(uri, params, secret_key = Simplepay.aws_secret_access_key)
  @uri = uri
  @params = params
  @secret_key = secret_key
end

Public Instance Methods

sign() click to toggle source
# File lib/simplepay/signature.rb, line 16
def sign
  make_canonical_string
  compute_signature
end

Private Instance Methods

compute_signature() click to toggle source
# File lib/simplepay/signature.rb, line 23
def compute_signature
  digest = OpenSSL::Digest.new('sha256')
  Base64.encode64(OpenSSL::HMAC.digest(digest, @secret_key, @canonical)).chomp
end
make_canonical_string() click to toggle source
# File lib/simplepay/signature.rb, line 28
def make_canonical_string
  @canonical = "POST\n#{@uri.host}\n#{@uri.path}\n"
  params = @params.reject{|k,v| v.blank? }.inject({}) { |a, (k,v)| a[k.to_s] = v; a }
  params = params.sort.inject([]) { |a, v| a << urlencode(v[0]) + '=' + urlencode(v[1]) }.join('&')
  @canonical += params
end
urlencode(plaintext) click to toggle source
# File lib/simplepay/signature.rb, line 35
def urlencode(plaintext)
  CGI.escape(plaintext.to_s).gsub('+', '%20').gsub('%7E', '~')
end