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