right_aws 3.0.0 → 3.0.3
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.
- data/History.txt +12 -0
- data/lib/acf/right_acf_interface.rb +1 -0
- data/lib/awsbase/right_awsbase.rb +12 -1
- data/lib/awsbase/version.rb +1 -1
- data/lib/ec2/right_ec2_images.rb +3 -1
- data/lib/ec2/right_ec2_vpc2.rb +1 -0
- data/lib/route_53/right_route_53_interface.rb +1 -0
- data/lib/s3/right_s3.rb +18 -4
- data/lib/s3/right_s3_interface.rb +23 -17
- data/right_aws.gemspec +0 -1
- metadata +5 -5
data/History.txt
CHANGED
@@ -327,3 +327,15 @@ the source key.
|
|
327
327
|
- SDB: ConsistentRead support
|
328
328
|
- bunch of micro bugs
|
329
329
|
|
330
|
+
=== 3.0.1
|
331
|
+
Release Notes:
|
332
|
+
- Fixed:
|
333
|
+
- SignatureDoesNotMatch on file download via get_link()
|
334
|
+
- S3#bucket should not fail for non admin creds
|
335
|
+
- couple doc typos
|
336
|
+
|
337
|
+
=== 3.0.2
|
338
|
+
Release Notes:
|
339
|
+
- Fixed:
|
340
|
+
- S3 Content-Type not set in Ruby 1.9.2
|
341
|
+
- error in rds_interface describe_db_snapshots in Ruby 1.9.2
|
@@ -126,6 +126,7 @@ module RightAws
|
|
126
126
|
path += "?" + params.to_a.collect{ |key,val| "#{AwsUtils::amz_escape(key)}=#{AwsUtils::amz_escape(val.to_s)}" }.join("&")
|
127
127
|
end
|
128
128
|
# Headers
|
129
|
+
headers = AwsUtils::fix_headers(headers)
|
129
130
|
headers['content-type'] ||= 'text/xml' if body
|
130
131
|
headers['date'] = Time.now.httpdate
|
131
132
|
# Auth
|
@@ -43,9 +43,10 @@ module RightAws
|
|
43
43
|
Base64.encode64(OpenSSL::HMAC.digest(@@digest1, aws_secret_access_key, auth_string)).strip
|
44
44
|
end
|
45
45
|
|
46
|
-
# Escape a string accordingly Amazon
|
46
|
+
# Escape a string accordingly Amazon rules
|
47
47
|
# http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/index.html?REST_RESTAuth.html
|
48
48
|
def self.amz_escape(param)
|
49
|
+
param = param.flatten.join('') if param.is_a?(Array) # ruby 1.9.x Array#to_s fix
|
49
50
|
param.to_s.gsub(/([^a-zA-Z0-9._~-]+)/n) do
|
50
51
|
'%' + $1.unpack('H2' * $1.size).join('%').upcase
|
51
52
|
end
|
@@ -66,6 +67,16 @@ module RightAws
|
|
66
67
|
service_hash
|
67
68
|
end
|
68
69
|
|
70
|
+
def self.fix_headers(headers)
|
71
|
+
result = {}
|
72
|
+
headers.each do |header, value|
|
73
|
+
next if !header.is_a?(String) || value.nil?
|
74
|
+
header = header.downcase
|
75
|
+
result[header] = value if result[header].right_blank?
|
76
|
+
end
|
77
|
+
result
|
78
|
+
end
|
79
|
+
|
69
80
|
# Signature Version 0
|
70
81
|
# A deprecated guy (should work till septemper 2009)
|
71
82
|
def self.sign_request_v0(aws_secret_access_key, service_hash)
|
data/lib/awsbase/version.rb
CHANGED
data/lib/ec2/right_ec2_images.rb
CHANGED
@@ -162,7 +162,9 @@ module RightAws
|
|
162
162
|
# :root_device_name => "/dev/sda1",
|
163
163
|
# :block_device_mappings => [ { :ebs_snapshot_id=>"snap-7360871a",
|
164
164
|
# :ebs_delete_on_termination=>true,
|
165
|
-
# :device_name=>"/dev/sda1"}
|
165
|
+
# :device_name=>"/dev/sda1"},
|
166
|
+
# { :virtual_name => 'ephemeral0',}
|
167
|
+
# :device_name=>"/dev/sdb"} ]
|
166
168
|
# ec2.register_image(image_reg_params) #=> "ami-b2a1f7a4"
|
167
169
|
#
|
168
170
|
def register_image(options)
|
data/lib/ec2/right_ec2_vpc2.rb
CHANGED
@@ -206,6 +206,7 @@ module RightAws
|
|
206
206
|
path += "?" + params.to_a.collect{ |key,val| "#{AwsUtils::amz_escape(key)}=#{AwsUtils::amz_escape(val.to_s)}" }.join("&")
|
207
207
|
end
|
208
208
|
# Headers
|
209
|
+
headers = AwsUtils::fix_headers(headers)
|
209
210
|
headers['content-type'] ||= 'text/xml' if body
|
210
211
|
headers['date'] = Time.now.httpdate
|
211
212
|
# Auth
|
data/lib/s3/right_s3.rb
CHANGED
@@ -97,10 +97,24 @@ module RightAws
|
|
97
97
|
# (section: Canned Access Policies)
|
98
98
|
#
|
99
99
|
def bucket(name, create=false, perms=nil, headers={})
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
100
|
+
result = nil
|
101
|
+
if create
|
102
|
+
headers['x-amz-acl'] = perms if perms
|
103
|
+
@interface.create_bucket(name, headers)
|
104
|
+
end
|
105
|
+
begin
|
106
|
+
buckets.each do |bucket|
|
107
|
+
if bucket.name == name
|
108
|
+
result = bucket
|
109
|
+
break
|
110
|
+
end
|
111
|
+
end
|
112
|
+
rescue RightAws::AwsError => e
|
113
|
+
# With non root creds one can use bucket(s) but can't list them
|
114
|
+
raise e unless e.message['AccessDenied']
|
115
|
+
result = Bucket::new(self, name)
|
116
|
+
end
|
117
|
+
result
|
104
118
|
end
|
105
119
|
|
106
120
|
|
@@ -78,10 +78,11 @@ module RightAws
|
|
78
78
|
#
|
79
79
|
# Params is a hash:
|
80
80
|
#
|
81
|
-
# {:server
|
82
|
-
# :port
|
83
|
-
# :protocol
|
84
|
-
# :logger
|
81
|
+
# {:server => 's3.amazonaws.com' # Amazon service host: 's3.amazonaws.com'(default)
|
82
|
+
# :port => 443 # Amazon service port: 80 or 443(default)
|
83
|
+
# :protocol => 'https' # Amazon service protocol: 'http' or 'https'(default)
|
84
|
+
# :logger => Logger Object # Logger instance: logs to STDOUT if omitted
|
85
|
+
# :no_subdomains => true} # Force placing bucket name into path instead of domain name
|
85
86
|
#
|
86
87
|
def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
|
87
88
|
init({ :name => 'S3',
|
@@ -174,8 +175,8 @@ module RightAws
|
|
174
175
|
# calculate request data
|
175
176
|
server, path, path_to_sign = fetch_request_params(headers)
|
176
177
|
data = headers[:data]
|
177
|
-
#
|
178
|
-
headers
|
178
|
+
# make sure headers are downcased strings
|
179
|
+
headers = AwsUtils::fix_headers(headers)
|
179
180
|
#
|
180
181
|
headers['content-type'] ||= ''
|
181
182
|
headers['date'] = Time.now.httpdate
|
@@ -851,17 +852,22 @@ module RightAws
|
|
851
852
|
# Query API: Links
|
852
853
|
#-----------------------------------------------------------------
|
853
854
|
|
855
|
+
def s3_link_escape(text)
|
856
|
+
#CGI::escape(text.to_s).gsub(/[+]/, '%20')
|
857
|
+
AwsUtils::amz_escape(text.to_s)
|
858
|
+
end
|
859
|
+
|
854
860
|
# Generates link for QUERY API
|
855
861
|
def generate_link(method, headers={}, expires=nil) #:nodoc:
|
856
862
|
# calculate request data
|
857
863
|
server, path, path_to_sign = fetch_request_params(headers)
|
858
|
-
|
864
|
+
|
859
865
|
# expiration time
|
860
866
|
expires ||= DEFAULT_EXPIRES_AFTER
|
861
867
|
expires = Time.now.utc + expires if expires.is_a?(Fixnum) && (expires < ONE_YEAR_IN_SECONDS)
|
862
868
|
expires = expires.to_i
|
863
|
-
#
|
864
|
-
headers
|
869
|
+
# make sure headers are downcased strings
|
870
|
+
headers = AwsUtils::fix_headers(headers)
|
865
871
|
#generate auth strings
|
866
872
|
auth_string = canonical_string(method, path_to_sign, headers, expires)
|
867
873
|
signature = CGI::escape(AwsUtils::sign( @aws_secret_access_key, auth_string))
|
@@ -908,7 +914,7 @@ module RightAws
|
|
908
914
|
# s3.list_bucket_link('my_awesome_bucket') #=> url string
|
909
915
|
#
|
910
916
|
def list_bucket_link(bucket, options=nil, expires=nil, headers={})
|
911
|
-
bucket += '?' + options.map{|k, v| "#{k.to_s}=#{
|
917
|
+
bucket += '?' + options.map{|k, v| "#{k.to_s}=#{s3_link_escape(v)}"}.join('&') unless options.right_blank?
|
912
918
|
generate_link('GET', headers.merge(:url=>bucket), expires)
|
913
919
|
rescue
|
914
920
|
on_exception
|
@@ -919,7 +925,7 @@ module RightAws
|
|
919
925
|
# s3.put_link('my_awesome_bucket',key, object) #=> url string
|
920
926
|
#
|
921
927
|
def put_link(bucket, key, data=nil, expires=nil, headers={})
|
922
|
-
generate_link('PUT', headers.merge(:url=>"#{bucket}/#{
|
928
|
+
generate_link('PUT', headers.merge(:url=>"#{bucket}/#{s3_link_escape(key)}", :data=>data), expires)
|
923
929
|
rescue
|
924
930
|
on_exception
|
925
931
|
end
|
@@ -945,11 +951,11 @@ module RightAws
|
|
945
951
|
#
|
946
952
|
def get_link(bucket, key, expires=nil, headers={}, response_params={})
|
947
953
|
if response_params.size > 0
|
948
|
-
response_params = '?' + response_params.map { |k, v| "#{k}=#{
|
954
|
+
response_params = '?' + response_params.map { |k, v| "#{k}=#{s3_link_escape(v)}" }.join('&')
|
949
955
|
else
|
950
956
|
response_params = ''
|
951
957
|
end
|
952
|
-
generate_link('GET', headers.merge(:url=>"#{bucket}/#{
|
958
|
+
generate_link('GET', headers.merge(:url=>"#{bucket}/#{s3_link_escape(key)}#{response_params}"), expires)
|
953
959
|
rescue
|
954
960
|
on_exception
|
955
961
|
end
|
@@ -959,7 +965,7 @@ module RightAws
|
|
959
965
|
# s3.head_link('my_awesome_bucket',key) #=> url string
|
960
966
|
#
|
961
967
|
def head_link(bucket, key, expires=nil, headers={})
|
962
|
-
generate_link('HEAD', headers.merge(:url=>"#{bucket}/#{
|
968
|
+
generate_link('HEAD', headers.merge(:url=>"#{bucket}/#{s3_link_escape(key)}"), expires)
|
963
969
|
rescue
|
964
970
|
on_exception
|
965
971
|
end
|
@@ -969,7 +975,7 @@ module RightAws
|
|
969
975
|
# s3.delete_link('my_awesome_bucket',key) #=> url string
|
970
976
|
#
|
971
977
|
def delete_link(bucket, key, expires=nil, headers={})
|
972
|
-
generate_link('DELETE', headers.merge(:url=>"#{bucket}/#{
|
978
|
+
generate_link('DELETE', headers.merge(:url=>"#{bucket}/#{s3_link_escape(key)}"), expires)
|
973
979
|
rescue
|
974
980
|
on_exception
|
975
981
|
end
|
@@ -980,7 +986,7 @@ module RightAws
|
|
980
986
|
# s3.get_acl_link('my_awesome_bucket',key) #=> url string
|
981
987
|
#
|
982
988
|
def get_acl_link(bucket, key='', headers={})
|
983
|
-
return generate_link('GET', headers.merge(:url=>"#{bucket}/#{
|
989
|
+
return generate_link('GET', headers.merge(:url=>"#{bucket}/#{s3_link_escape(key)}?acl"))
|
984
990
|
rescue
|
985
991
|
on_exception
|
986
992
|
end
|
@@ -990,7 +996,7 @@ module RightAws
|
|
990
996
|
# s3.put_acl_link('my_awesome_bucket',key) #=> url string
|
991
997
|
#
|
992
998
|
def put_acl_link(bucket, key='', headers={})
|
993
|
-
return generate_link('PUT', headers.merge(:url=>"#{bucket}/#{
|
999
|
+
return generate_link('PUT', headers.merge(:url=>"#{bucket}/#{s3_link_escape(key)}?acl"))
|
994
1000
|
rescue
|
995
1001
|
on_exception
|
996
1002
|
end
|
data/right_aws.gemspec
CHANGED
@@ -31,7 +31,6 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.authors = ['RightScale, Inc.']
|
32
32
|
spec.email = 'support@rightscale.com'
|
33
33
|
spec.summary = 'Interface classes for the Amazon EC2, SQS, and S3 Web Services'
|
34
|
-
spec.has_rdoc = true
|
35
34
|
spec.rdoc_options = ['--main', 'README.txt', '--title', '']
|
36
35
|
spec.extra_rdoc_files = ['README.txt']
|
37
36
|
spec.required_ruby_version = '>= 1.8.7'
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 3.0.
|
9
|
+
- 3
|
10
|
+
version: 3.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- RightScale, Inc.
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-03-08 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: right_http_connection
|
@@ -220,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
220
|
requirements:
|
221
221
|
- libxml-ruby >= 0.5.2.0 is encouraged
|
222
222
|
rubyforge_project: rightaws
|
223
|
-
rubygems_version: 1.
|
223
|
+
rubygems_version: 1.8.17
|
224
224
|
signing_key:
|
225
225
|
specification_version: 3
|
226
226
|
summary: Interface classes for the Amazon EC2, SQS, and S3 Web Services
|