class Amazon::Coral::V0SignatureHelper

Performs AWS V0 Signatures on QueryStringMap objects.

Public Class Methods

new(aws_access_key_id, aws_secret_key) click to toggle source
# File lib/amazon/coral/v0signaturehelper.rb, line 13
def initialize(aws_access_key_id, aws_secret_key)
  @aws_access_key_id = aws_access_key_id.to_s
  @aws_secret_key = aws_secret_key.to_s
end

Public Instance Methods

add_fields(query_string_map, time) click to toggle source
# File lib/amazon/coral/v0signaturehelper.rb, line 70
def add_fields(query_string_map, time)
  query_string_map['AWSAccessKeyId'] = @aws_access_key_id
  query_string_map['SignatureVersion'] = '0'
  query_string_map['SignatureMethod'] = 'HmacSHA1'
  query_string_map['Timestamp'] = time.to_s
end
canonicalize(args) click to toggle source
# File lib/amazon/coral/v0signaturehelper.rb, line 28
def canonicalize(args)
  query_string_map = args[:query_string_map]

  service_name = query_string_map['ServiceName']
  action = query_string_map['Action']
  operation = query_string_map['Operation']
  timestamp = query_string_map['Timestamp']
  expires = query_string_map['Expires']
  credential = query_string_map['Credential']

  canonical = ''

  canonical << service_name unless service_name.nil?

  if !action.nil? then
    canonical << action
  elsif !operation.nil? then
    canonical << operation
  else
    raise 'Query string must contain Action or Operation'
  end
  
  if timestamp.nil? and expires.nil? then
    raise 'Query string must contain Timestamp or Expires'
  elsif !timestamp.nil? and !expires.nil? then
    raise 'Query string may contain only one of Timestamp or Expires'
  elsif !timestamp.nil? then
    canonical << timestamp
  else
    canonical << expires
  end

  canonical << credential unless credential.nil?

  return canonical
end
compute_signature(canonical) click to toggle source
# File lib/amazon/coral/v0signaturehelper.rb, line 65
def compute_signature(canonical)
  digest = OpenSSL::Digest::Digest.new('sha1')
  return Base64.encode64(OpenSSL::HMAC.digest(digest, @aws_secret_key, canonical)).strip
end
sign(args) click to toggle source
# File lib/amazon/coral/v0signaturehelper.rb, line 18
def sign(args)
  signT(Time.now.iso8601, args)
end
signT(time, args) click to toggle source
# File lib/amazon/coral/v0signaturehelper.rb, line 22
def signT(time, args)
  query_string_map = args[:query_string_map]
  add_fields(query_string_map, time)
  query_string_map['Signature'] = compute_signature(canonicalize(args))
end
sort(hash) click to toggle source
# File lib/amazon/coral/v0signaturehelper.rb, line 77
def sort(hash)
  hash.sort { |a,b| a[0].downcase <=> b[0].downcase }
end