briandunn-a2ws 0.1.12 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/a2ws.gemspec +2 -1
  2. data/lib/a2ws/signature.rb +46 -0
  3. metadata +2 -1
data/a2ws.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{a2ws}
5
- s.version = "0.1.12"
5
+ s.version = "0.1.13"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Andy Shen", "Josh Owens"]
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  "lib/a2ws/base.rb",
25
25
  "lib/a2ws/image.rb",
26
26
  "lib/a2ws/image_search.rb",
27
+ "lib/a2ws/signature.rb",
27
28
  "lib/a2ws/item.rb",
28
29
  "lib/a2ws/item_search.rb",
29
30
  "lib/a2ws/methodize.rb",
@@ -0,0 +1,46 @@
1
+ require "hmac"
2
+ require "hmac-sha2"
3
+ require 'cgi'
4
+
5
+ # reference:
6
+ # http://docs.amazonwebservices.com/AWSECommerceService/2009-07-01/DG/index.html?BasicAuthProcess.html
7
+ # http://docs.amazonwebservices.com/AWSECommerceService/2009-07-01/DG/index.html?Query_QueryAuth.html
8
+ module A2WS
9
+ module Signature
10
+ def sign_request(params)
11
+ params.reverse_merge!(:Timestamp => timestamp, :Version => "2009-07-01")
12
+ params.merge!(:Signature => build_signature(params, "GET"))
13
+ params
14
+ end
15
+
16
+ private
17
+
18
+ def timestamp
19
+ Time.now.gmtime.strftime("%Y-%m-%dT%H:%M:%SZ")
20
+ end
21
+
22
+ def build_string_to_sign(params, http_verb)
23
+ returning [] do |string_to_sign|
24
+ string_to_sign << http_verb << self.base_uri.gsub(/^https?\:\/\//, "") << self.request_uri
25
+ canonicalized_params = params.sort_by {|k,v| k.to_s }.map do |( k,v )|
26
+ "#{aws_escape(k.to_s)}=#{aws_escape(v.to_s)}"
27
+ end.join("&")
28
+ string_to_sign << canonicalized_params
29
+ end.join("\n")
30
+ end
31
+
32
+ def build_signature(params, http_verb)
33
+ params.merge!(self.default_params)
34
+
35
+ hmac = HMAC::SHA256.new(secret_key)
36
+ hmac.update(build_string_to_sign(params, http_verb))
37
+
38
+ Base64.encode64(hmac.digest).chomp
39
+ end
40
+
41
+ def aws_escape(string)
42
+ CGI.escape(string).gsub("+", "%20").gsub("%7E", "~")
43
+ end
44
+ end
45
+ end
46
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: briandunn-a2ws
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Shen
@@ -54,6 +54,7 @@ files:
54
54
  - lib/a2ws/base.rb
55
55
  - lib/a2ws/image.rb
56
56
  - lib/a2ws/image_search.rb
57
+ - lib/a2ws/signature.rb
57
58
  - lib/a2ws/item.rb
58
59
  - lib/a2ws/item_search.rb
59
60
  - lib/a2ws/methodize.rb