grempe-amazon-ec2 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ === 0.3.4 2009-01-31
2
+ * Added support in the helper binaries for EC2_URL server url for Euro servers
3
+
4
+ === 0.3.3 2009-01-24
5
+ * Removed docs related to the ability to get Response#xml which is deprecated
6
+ * Fixed conflict when aws/s3 gem was included in user code
7
+
1
8
  === 0.3.2 2008-12-11
2
9
  * Updated API version to 2008-12-01
3
10
  * Note : The new European EC2 zone should just work if you specify ':server => "eu-west-1.ec2.amazonaws.com"' when initializing EC2::Base.new(). Please report any issues you have with using this new service.
data/README.rdoc CHANGED
@@ -74,6 +74,12 @@ Edit the file ~/.bash_login and add the following to the existing contents:
74
74
  export AMAZON_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
75
75
  export AMAZON_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY_ID"
76
76
 
77
+ If you are using EC2 in the EU region, make sure you also set:
78
+
79
+ export EC2_URL="https://eu-west-1.ec2.amazonaws.com"
80
+
81
+ (which you have already if you configured standard EC2 command line tools to work with this region).
82
+
77
83
  Once you save the file you should close and re-open your terminal so the new variables are made available. You’ll need to do this close/re-open step for each terminal window you have open (or issue the ‘source ~/.bash_login’ command in each). Make sure that this file is only readable by your user so you don’t inadvertently expose your credentials to other users on your system.
78
84
 
79
85
  You can verify that this setup is complete by running the ‘set’ in a command window and seeing that your credentials are in the list of shell variables.
data/Rakefile CHANGED
@@ -11,8 +11,9 @@ Rake::GemPackageTask.new(spec) do |pkg|
11
11
  pkg.gem_spec = spec
12
12
  end
13
13
 
14
+ desc "Package and then install the gem locally"
14
15
  task :install => [:package] do
15
- sh %{sudo gem install pkg/#{GEM}-#{VERSION}}
16
+ sh %{sudo gem install pkg/#{GEM}-#{VER}}
16
17
  end
17
18
 
18
19
  Rake::TestTask.new do |t|
data/bin/setup.rb CHANGED
@@ -10,10 +10,17 @@
10
10
  #++
11
11
 
12
12
  if ENV['AMAZON_ACCESS_KEY_ID'] && ENV['AMAZON_SECRET_ACCESS_KEY']
13
- @ec2 = EC2::Base.new(
13
+ opts = {
14
14
  :access_key_id => ENV['AMAZON_ACCESS_KEY_ID'],
15
15
  :secret_access_key => ENV['AMAZON_SECRET_ACCESS_KEY']
16
- )
16
+ }
17
+ if ENV['EC2_URL']
18
+ opts[:server] = URI.parse(ENV['EC2_URL']).host
19
+ end
20
+ @ec2 = EC2::Base.new(opts)
17
21
  end
18
22
 
23
+ puts "Current Options:"
24
+ pp opts
25
+
19
26
  include EC2
data/lib/EC2.rb CHANGED
@@ -28,12 +28,24 @@ module EC2
28
28
  # from the query string to be signed.
29
29
  # Note: The parameters in the path passed in must already be sorted in
30
30
  # case-insensitive alphabetical order and must not be url encoded.
31
- def EC2.canonical_string(path)
32
- buf = ""
33
- path.split('&').each { |field|
34
- buf << field.gsub(/\&|\?/,"").sub(/=/,"")
35
- }
36
- return buf
31
+ def EC2.canonical_string(params, host = DEFAULT_HOST, method="POST", base="/")
32
+ # Sort, and encode parameters into a canonical string.
33
+ sorted_params = params.sort {|x,y| x[0] <=> y[0]}
34
+ encoded_params = sorted_params.collect do |p|
35
+ encoded = (CGI::escape(p[0].to_s) +
36
+ "=" + CGI::escape(p[1].to_s))
37
+ # Ensure spaces are encoded as '%20', not '+'
38
+ encoded.gsub('+', '%20')
39
+ end
40
+ sigquery = encoded_params.join("&")
41
+
42
+ # Generate the request description string
43
+ req_desc =
44
+ method + "\n" +
45
+ host + "\n" +
46
+ base + "\n" +
47
+ sigquery
48
+
37
49
  end
38
50
 
39
51
  # Encodes the given string with the secret_access_key, by taking the
@@ -44,7 +56,7 @@ module EC2
44
56
  digest = OpenSSL::Digest::Digest.new('sha1')
45
57
  b64_hmac =
46
58
  Base64.encode64(
47
- OpenSSL::HMAC.digest(digest, secret_access_key, str)).strip
59
+ OpenSSL::HMAC.digest(digest, secret_access_key, str)).gsub("\n","")
48
60
 
49
61
  if urlencode
50
62
  return CGI::escape(b64_hmac)
@@ -152,14 +164,13 @@ module EC2
152
164
  params.reject! { |key, value| value.nil? or value.empty?}
153
165
 
154
166
  params.merge!( {"Action" => action,
155
- "SignatureVersion" => "1",
167
+ "SignatureVersion" => "2",
168
+ "SignatureMethod" => 'HmacSHA1',
156
169
  "AWSAccessKeyId" => @access_key_id,
157
170
  "Version" => API_VERSION,
158
171
  "Timestamp"=>Time.now.getutc.iso8601} )
159
172
 
160
- sigquery = params.sort_by { |param| param[0].downcase }.collect { |param| param.join("=") }.join("&")
161
-
162
- sig = get_aws_auth_param(sigquery, @secret_access_key)
173
+ sig = get_aws_auth_param(params, @secret_access_key)
163
174
 
164
175
  query = params.sort.collect do |param|
165
176
  CGI::escape(param[0]) + "=" + CGI::escape(param[1])
@@ -182,8 +193,8 @@ module EC2
182
193
  end
183
194
 
184
195
  # Set the Authorization header using AWS signed header authentication
185
- def get_aws_auth_param(path, secret_access_key)
186
- canonical_string = EC2.canonical_string(path)
196
+ def get_aws_auth_param(params, secret_access_key)
197
+ canonical_string = EC2.canonical_string(params)
187
198
  encoded_canonical = EC2.encode(secret_access_key, canonical_string)
188
199
  end
189
200
 
data/test/test_EC2.rb CHANGED
@@ -39,9 +39,9 @@ context "The EC2 method " do
39
39
  end
40
40
 
41
41
 
42
- specify "EC2.canonical_string(path) should data that is stripped of ?,&,= " do
43
- path = "?name1=value1&name2=value2&name3=value3"
44
- EC2.canonical_string(path).should.equal "name1value1name2value2name3value3"
42
+ specify "EC2.canonical_string(path) should conform to Amazon's requirements " do
43
+ path = {"name1" => "value1", "name2" => "value2", "name3" => "value3"}
44
+ EC2.canonical_string(path).should.equal "POST\nec2.amazonaws.com\n/\nname1=value1&name2=value2&name3=value3"
45
45
  end
46
46
 
47
47
  specify "EC2.encode should return the expected string" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grempe-amazon-ec2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Glenn Rempe