Class: Amazon::Coral::V0SignatureHelper

Inherits:
Object
  • Object
show all
Defined in:
lib/amazon/coral/v0signaturehelper.rb

Overview

Performs AWS V0 Signatures on QueryStringMap objects.

Instance Method Summary collapse

Constructor Details

#initialize(aws_access_key_id, aws_secret_key) ⇒ V0SignatureHelper

Returns a new instance of V0SignatureHelper.



13
14
15
16
# 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

Instance Method Details

#add_fields(query_string_map, time) ⇒ Object



70
71
72
73
74
75
# 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) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 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) ⇒ Object



65
66
67
68
# 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) ⇒ Object



18
19
20
# File 'lib/amazon/coral/v0signaturehelper.rb', line 18

def sign(args)
  signT(Time.now.iso8601, args)
end

#signT(time, args) ⇒ Object



22
23
24
25
26
# 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) ⇒ Object



77
78
79
# File 'lib/amazon/coral/v0signaturehelper.rb', line 77

def sort(hash)
  hash.sort { |a,b| a[0].downcase <=> b[0].downcase }
end