fog 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +3 -6
- data/fog.gemspec +3 -3
- data/lib/fog.rb +1 -1
- data/lib/fog/aws/parsers/ses/delete_verified_email_address.rb +24 -0
- data/lib/fog/aws/parsers/ses/get_send_quota.rb +26 -0
- data/lib/fog/aws/parsers/ses/get_send_statistics.rb +29 -0
- data/lib/fog/aws/parsers/ses/list_verified_email_addresses.rb +25 -0
- data/lib/fog/aws/parsers/ses/send_email.rb +26 -0
- data/lib/fog/aws/parsers/ses/send_raw_email.rb +26 -0
- data/lib/fog/aws/parsers/ses/verify_email_address.rb +24 -0
- data/lib/fog/aws/requests/elb/create_load_balancer.rb +1 -1
- data/lib/fog/aws/requests/ses/delete_verified_email_address.rb +37 -0
- data/lib/fog/aws/requests/ses/get_send_quota.rb +40 -0
- data/lib/fog/aws/requests/ses/get_send_statistics.rb +43 -0
- data/lib/fog/aws/requests/ses/list_verified_email_addresses.rb +37 -0
- data/lib/fog/aws/requests/ses/send_email.rb +82 -0
- data/lib/fog/aws/requests/ses/send_raw_email.rb +50 -0
- data/lib/fog/aws/requests/ses/verify_email_address.rb +37 -0
- data/lib/fog/aws/ses.rb +106 -0
- data/lib/fog/bin/aws.rb +5 -1
- data/lib/fog/cdn.rb +1 -1
- data/lib/fog/compute/aws.rb +1 -0
- data/lib/fog/compute/models/aws/server.rb +5 -2
- data/lib/fog/compute/models/bluebox/server.rb +5 -2
- data/lib/fog/compute/models/go_grid/images.rb +1 -1
- data/lib/fog/compute/models/go_grid/server.rb +55 -8
- data/lib/fog/compute/models/go_grid/servers.rb +2 -2
- data/lib/fog/compute/models/rackspace/server.rb +5 -2
- data/lib/fog/compute/models/slicehost/server.rb +5 -2
- data/lib/fog/compute/parsers/aws/describe_reserved_instances_offerings.rb +34 -0
- data/lib/fog/compute/rackspace.rb +28 -7
- data/lib/fog/compute/requests/aws/describe_images.rb +48 -1
- data/lib/fog/compute/requests/aws/describe_reserved_instances_offerings.rb +45 -0
- data/lib/fog/compute/requests/go_grid/grid_server_add.rb +2 -2
- data/lib/fog/core/ssh.rb +7 -3
- data/lib/fog/dns.rb +1 -1
- data/lib/fog/dns/requests/aws/create_hosted_zone.rb +8 -8
- data/lib/fog/providers/aws.rb +1 -0
- data/lib/fog/storage/aws.rb +49 -30
- data/lib/fog/storage/google.rb +48 -29
- data/lib/fog/storage/local.rb +2 -0
- data/lib/fog/storage/models/aws/file.rb +1 -1
- data/lib/fog/storage/models/google/file.rb +1 -1
- data/lib/fog/storage/models/local/file.rb +9 -1
- data/lib/fog/storage/requests/aws/put_bucket.rb +6 -6
- data/lib/fog/storage/requests/aws/put_object.rb +7 -7
- data/lib/fog/storage/requests/google/put_bucket.rb +5 -6
- data/lib/fog/storage/requests/google/put_object.rb +7 -7
- data/lib/fog/storage/requests/rackspace/get_container.rb +1 -0
- data/lib/fog/storage/requests/rackspace/get_containers.rb +1 -0
- data/tests/aws/requests/ses/helper.rb +15 -0
- data/tests/aws/requests/ses/verified_email_address_tests.rb +27 -0
- data/tests/compute/requests/terremark_ecloud/catalog_tests.rb +1 -1
- data/tests/compute/requests/terremark_ecloud/network_tests.rb +1 -1
- data/tests/compute/requests/terremark_ecloud/organization_tests.rb +1 -1
- data/tests/compute/requests/terremark_ecloud/vdc_tests.rb +1 -1
- data/tests/helper.rb +4 -36
- data/tests/helpers/mock_helper.rb +33 -0
- metadata +32 -9
@@ -100,13 +100,10 @@ module Fog
|
|
100
100
|
end
|
101
101
|
|
102
102
|
require 'json'
|
103
|
-
|
104
|
-
@
|
105
|
-
|
106
|
-
|
107
|
-
@path = uri.path
|
108
|
-
@port = uri.port
|
109
|
-
@scheme = uri.scheme
|
103
|
+
@rackspace_api_key = options[:rackspace_api_key]
|
104
|
+
@rackspace_username = options[:rackspace_username]
|
105
|
+
@rackspace_auth_url = options[:rackspace_auth_url]
|
106
|
+
authenticate
|
110
107
|
@connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent])
|
111
108
|
end
|
112
109
|
|
@@ -124,6 +121,13 @@ module Fog
|
|
124
121
|
:host => @host,
|
125
122
|
:path => "#{@path}/#{params[:path]}"
|
126
123
|
}))
|
124
|
+
rescue Excon::Errors::Unauthorized => error
|
125
|
+
if JSON.parse(response.body)['unauthorized']['message'] == 'Invalid authentication token. Please renew.'
|
126
|
+
authenticate
|
127
|
+
retry
|
128
|
+
else
|
129
|
+
raise error
|
130
|
+
end
|
127
131
|
rescue Excon::Errors::HTTPStatusError => error
|
128
132
|
raise case error
|
129
133
|
when Excon::Errors::NotFound
|
@@ -138,6 +142,23 @@ module Fog
|
|
138
142
|
response
|
139
143
|
end
|
140
144
|
|
145
|
+
private
|
146
|
+
|
147
|
+
def authenticate
|
148
|
+
options = {
|
149
|
+
:rackspace_api_key => @rackspace_api_key,
|
150
|
+
:rackspace_username => @rackspace_username,
|
151
|
+
:rackspace_auth_url => @rackspace_auth_url
|
152
|
+
}
|
153
|
+
credentials = Fog::Rackspace.authenticate(options)
|
154
|
+
@auth_token = credentials['X-Auth-Token']
|
155
|
+
uri = URI.parse(credentials['X-Server-Management-Url'])
|
156
|
+
@host = uri.host
|
157
|
+
@path = uri.path
|
158
|
+
@port = uri.port
|
159
|
+
@scheme = uri.scheme
|
160
|
+
end
|
161
|
+
|
141
162
|
end
|
142
163
|
end
|
143
164
|
end
|
@@ -56,7 +56,54 @@ module Fog
|
|
56
56
|
class Mock
|
57
57
|
|
58
58
|
def describe_images(filters = {})
|
59
|
-
|
59
|
+
unless filters.is_a?(Hash)
|
60
|
+
Formatador.display_line("[yellow][WARN] describe_images with #{filters.class} param is deprecated, use describe_snapshots('snapshot-id' => []) instead[/] [light_black](#{caller.first})[/]")
|
61
|
+
filters = {'snapshot-id' => [*filters]}
|
62
|
+
end
|
63
|
+
|
64
|
+
if filters.keys.any? {|key| key =~ /^block-device/}
|
65
|
+
Formatador.display_line("[yellow][WARN] describe_images block-device-mapping filters are not yet mocked[/] [light_black](#{caller.first})[/]")
|
66
|
+
Fog::Mock.not_implemented
|
67
|
+
end
|
68
|
+
|
69
|
+
if filters.keys.any? {|key| key =~ /^tag/}
|
70
|
+
Formatador.display_line("[yellow][WARN] describe_images tag filters are not yet mocked[/] [light_black](#{caller.first})[/]")
|
71
|
+
Fog::Mock.not_implemented
|
72
|
+
end
|
73
|
+
|
74
|
+
response = Excon::Response.new
|
75
|
+
|
76
|
+
aliases = {
|
77
|
+
'architecture' => 'architecture',
|
78
|
+
'description' => 'description',
|
79
|
+
'hypervisor' => 'hypervisor',
|
80
|
+
'image-id' => 'imageId',
|
81
|
+
'image-type' => 'imageType',
|
82
|
+
'is-public' => 'isPublic',
|
83
|
+
'kernel-id' => 'kernelId',
|
84
|
+
'manifest-location' => 'manifestLocation',
|
85
|
+
'name' => 'name',
|
86
|
+
'owner-id' => 'imageOwnerId',
|
87
|
+
'ramdisk-id' => 'ramdiskId',
|
88
|
+
'root-device-name' => 'rootDeviceName',
|
89
|
+
'root-device-type' => 'rootDeviceType',
|
90
|
+
'state' => 'imageState',
|
91
|
+
'virtualization-type' => 'virtualizationType'
|
92
|
+
}
|
93
|
+
|
94
|
+
image_set = @data[:images].values
|
95
|
+
|
96
|
+
for filter_key, filter_value in filters
|
97
|
+
aliased_key = aliases[filter_key]
|
98
|
+
image_set = image_set.reject{|image| ![*filter_value].include?(image[aliased_key])}
|
99
|
+
end
|
100
|
+
|
101
|
+
response.status = 200
|
102
|
+
response.body = {
|
103
|
+
'requestId' => Fog::AWS::Mock.request_id,
|
104
|
+
'imagesSet' => image_set
|
105
|
+
}
|
106
|
+
response
|
60
107
|
end
|
61
108
|
|
62
109
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Compute
|
4
|
+
class Real
|
5
|
+
|
6
|
+
require 'fog/compute/parsers/aws/describe_reserved_instances_offerings'
|
7
|
+
|
8
|
+
# Describe all or specified reserved instances offerings
|
9
|
+
#
|
10
|
+
# ==== Parameters
|
11
|
+
# * filters<~Hash> - List of filters to limit results with
|
12
|
+
#
|
13
|
+
# ==== Returns
|
14
|
+
# * response<~Excon::Response>:
|
15
|
+
# * body<~Hash>:
|
16
|
+
# * 'requestId'<~String> - Id of request
|
17
|
+
# * 'reservedInstancesOfferingsSet'<~Array>:
|
18
|
+
# * 'availabilityZone'<~String> - availability zone of offering
|
19
|
+
# * 'duration'<~Integer> - duration, in seconds, of offering
|
20
|
+
# * 'fixedPrice'<~Float> - purchase price of offering
|
21
|
+
# * 'instanceType'<~String> - instance type of offering
|
22
|
+
# * 'productDescription'<~String> - description of offering
|
23
|
+
# * 'reservedInstancesOfferingId'<~String> - id of offering
|
24
|
+
# * 'usagePrice'<~Float> - usage price of offering, per hour
|
25
|
+
def describe_reserved_instances_offerings(filters = {})
|
26
|
+
params = AWS.indexed_filters(filters)
|
27
|
+
request({
|
28
|
+
'Action' => 'DescribeReservedInstancesOfferings',
|
29
|
+
:idempotent => true,
|
30
|
+
:parser => Fog::Parsers::AWS::Compute::DescribeReservedInstancesOfferings.new
|
31
|
+
}.merge!(params))
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
class Mock
|
37
|
+
|
38
|
+
def describe_reserved_instances_offerings(filters = {})
|
39
|
+
Fog::Mock.not_implemented
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -6,11 +6,11 @@ module Fog
|
|
6
6
|
# Create a new server
|
7
7
|
#
|
8
8
|
# ==== Parameters
|
9
|
+
# * 'name'<~String> - name of the server, 20 or fewer characters
|
9
10
|
# * 'image'<~String> - image to use, in grid_image_list
|
10
11
|
# * 'ip'<~String> - initial public ip for this server
|
11
|
-
# * 'name'<~String> - name of the server, 20 or fewer characters
|
12
|
-
# * 'server_ram'<~String> - flavor to use, in common_lookup_list('server.ram')
|
13
12
|
# * 'options'<~Hash>:
|
13
|
+
# * 'server.ram'<~String> - flavor to use, in common_lookup_list('server.ram')
|
14
14
|
# * 'description'<~String> - description of this server
|
15
15
|
# * 'isSandbox'<~String> - treat this server as image sandbox? in ['true', 'false']
|
16
16
|
#
|
data/lib/fog/core/ssh.rb
CHANGED
@@ -2,9 +2,6 @@ module Fog
|
|
2
2
|
module SSH
|
3
3
|
|
4
4
|
def self.new(address, username, options = {})
|
5
|
-
unless options[:key_data] || options[:keys] || options[:password]
|
6
|
-
raise ArgumentError.new(':key_data, :keys or :password are required to initialize SSH')
|
7
|
-
end
|
8
5
|
if Fog.mocking?
|
9
6
|
Fog::SSH::Mock.new(address, username, options)
|
10
7
|
else
|
@@ -40,6 +37,13 @@ module Fog
|
|
40
37
|
|
41
38
|
def initialize(address, username, options)
|
42
39
|
require 'net/ssh'
|
40
|
+
|
41
|
+
key_manager = Net::SSH::Authentication::KeyManager.new(nil, options)
|
42
|
+
|
43
|
+
unless options[:key_data] || options[:keys] || options[:password] || key_manager.agent
|
44
|
+
raise ArgumentError.new(':key_data, :keys, :password or a loaded ssh-agent is required to initialize SSH')
|
45
|
+
end
|
46
|
+
|
43
47
|
@address = address
|
44
48
|
@username = username
|
45
49
|
@options = { :paranoid => false }.merge(options)
|
data/lib/fog/dns.rb
CHANGED
@@ -10,18 +10,18 @@ module Fog
|
|
10
10
|
# ==== Parameters
|
11
11
|
# * name<~String> - The name of the domain. Must be a fully-specified domain that ends with a period
|
12
12
|
# * options<~Hash>
|
13
|
-
# * caller_ref<~String> - unique string that identifies the request & allows failed
|
13
|
+
# * caller_ref<~String> - unique string that identifies the request & allows failed
|
14
14
|
# calls to be retried without the risk of executing the operation twice
|
15
|
-
# * comment<~Integer> -
|
15
|
+
# * comment<~Integer> -
|
16
16
|
#
|
17
17
|
# ==== Returns
|
18
18
|
# * response<~Excon::Response>:
|
19
19
|
# * body<~Hash>:
|
20
20
|
# * 'HostedZone'<~Hash>:
|
21
|
-
# * 'Id'<~String> -
|
22
|
-
# * 'Name'<~String> -
|
21
|
+
# * 'Id'<~String> -
|
22
|
+
# * 'Name'<~String> -
|
23
23
|
# * 'CallerReference'<~String>
|
24
|
-
# * 'Comment'<~String> -
|
24
|
+
# * 'Comment'<~String> -
|
25
25
|
# * 'ChangeInfo'<~Hash> -
|
26
26
|
# * 'Id'<~String>
|
27
27
|
# * 'Status'<~String>
|
@@ -33,16 +33,16 @@ module Fog
|
|
33
33
|
|
34
34
|
optional_tags = ''
|
35
35
|
if options[:caller_ref]
|
36
|
-
optional_tags+= "<CallerReference>#{options[:
|
36
|
+
optional_tags+= "<CallerReference>#{options[:caller_ref]}</CallerReference>"
|
37
37
|
else
|
38
38
|
#make sure we have a unique call reference
|
39
39
|
caller_ref = "ref-#{rand(1000000).to_s}"
|
40
|
-
optional_tags+= "<CallerReference>#{caller_ref}</CallerReference>"
|
40
|
+
optional_tags+= "<CallerReference>#{caller_ref}</CallerReference>"
|
41
41
|
end
|
42
42
|
if options[:comment]
|
43
43
|
optional_tags+= "<HostedZoneConfig><Comment>#{options[:comment]}</Comment></HostedZoneConfig>"
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
request({
|
47
47
|
:body => %Q{<?xml version="1.0" encoding="UTF-8"?><CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/"><Name>#{name}</Name>#{optional_tags}</CreateHostedZoneRequest>},
|
48
48
|
:parser => Fog::Parsers::AWS::DNS::CreateHostedZone.new,
|
data/lib/fog/providers/aws.rb
CHANGED
data/lib/fog/storage/aws.rb
CHANGED
@@ -21,7 +21,7 @@ module Fog
|
|
21
21
|
requires :aws_access_key_id, :aws_secret_access_key
|
22
22
|
recognizes :endpoint, :region, :host, :path, :port, :scheme, :persistent
|
23
23
|
recognizes :provider # remove post deprecation
|
24
|
-
|
24
|
+
|
25
25
|
model_path 'fog/storage/models/aws'
|
26
26
|
collection :directories
|
27
27
|
model :directory
|
@@ -79,14 +79,14 @@ module Fog
|
|
79
79
|
|
80
80
|
if data.is_a?(String)
|
81
81
|
metadata[:body] = data
|
82
|
-
metadata[:headers]['Content-Length'] = metadata[:body].size
|
82
|
+
metadata[:headers]['Content-Length'] = metadata[:body].size
|
83
83
|
else
|
84
84
|
filename = ::File.basename(data.path)
|
85
85
|
unless (mime_types = MIME::Types.of(filename)).empty?
|
86
86
|
metadata[:headers]['Content-Type'] = mime_types.first.content_type
|
87
87
|
end
|
88
88
|
metadata[:body] = data
|
89
|
-
metadata[:headers]['Content-Length'] = ::File.size(data.path)
|
89
|
+
metadata[:headers]['Content-Length'] = ::File.size(data.path)
|
90
90
|
end
|
91
91
|
# metadata[:headers]['Content-MD5'] = Base64.encode64(Digest::MD5.digest(metadata[:body])).strip
|
92
92
|
metadata
|
@@ -94,13 +94,13 @@ module Fog
|
|
94
94
|
|
95
95
|
def url(params, expires)
|
96
96
|
params[:headers]['Date'] = expires.to_i
|
97
|
+
params[:path] = CGI.escape(params[:path]).gsub('%2F', '/')
|
97
98
|
query = [params[:query]].compact
|
98
99
|
query << "AWSAccessKeyId=#{@aws_access_key_id}"
|
99
100
|
query << "Signature=#{CGI.escape(signature(params))}"
|
100
101
|
query << "Expires=#{params[:headers]['Date']}"
|
101
102
|
bucket = params[:host].split('.').first
|
102
|
-
|
103
|
-
"https://#{@host}/#{path}?#{query.join('&')}"
|
103
|
+
"https://#{@host}/#{params[:path]}?#{query.join('&')}"
|
104
104
|
end
|
105
105
|
|
106
106
|
end
|
@@ -111,7 +111,7 @@ module Fog
|
|
111
111
|
def self.acls(type)
|
112
112
|
case type
|
113
113
|
when 'private'
|
114
|
-
|
114
|
+
{
|
115
115
|
"AccessControlList" => [
|
116
116
|
{
|
117
117
|
"Permission" => "FULL_CONTROL",
|
@@ -121,32 +121,51 @@ module Fog
|
|
121
121
|
"Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
122
122
|
}
|
123
123
|
when 'public-read'
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
124
|
+
{
|
125
|
+
"AccessControlList" => [
|
126
|
+
{
|
127
|
+
"Permission" => "FULL_CONTROL",
|
128
|
+
"Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
129
|
+
},
|
130
|
+
{
|
131
|
+
"Permission" => "READ",
|
132
|
+
"Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AllUsers"}
|
133
|
+
}
|
134
|
+
],
|
135
|
+
"Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
136
|
+
}
|
132
137
|
when 'public-read-write'
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
138
|
+
{
|
139
|
+
"AccessControlList" => [
|
140
|
+
{
|
141
|
+
"Permission" => "FULL_CONTROL",
|
142
|
+
"Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
143
|
+
},
|
144
|
+
{
|
145
|
+
"Permission" => "READ",
|
146
|
+
"Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AllUsers"}
|
147
|
+
},
|
148
|
+
{
|
149
|
+
"Permission" => "WRITE",
|
150
|
+
"Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AllUsers"}
|
151
|
+
}
|
152
|
+
],
|
153
|
+
"Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
154
|
+
}
|
141
155
|
when 'authenticated-read'
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
156
|
+
{
|
157
|
+
"AccessControlList" => [
|
158
|
+
{
|
159
|
+
"Permission" => "FULL_CONTROL",
|
160
|
+
"Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
161
|
+
},
|
162
|
+
{
|
163
|
+
"Permission" => "READ",
|
164
|
+
"Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"}
|
165
|
+
}
|
166
|
+
],
|
167
|
+
"Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
168
|
+
}
|
150
169
|
end
|
151
170
|
end
|
152
171
|
|
data/lib/fog/storage/google.rb
CHANGED
@@ -39,14 +39,14 @@ module Fog
|
|
39
39
|
|
40
40
|
if data.is_a?(String)
|
41
41
|
metadata[:body] = data
|
42
|
-
metadata[:headers]['Content-Length'] = metadata[:body].size
|
42
|
+
metadata[:headers]['Content-Length'] = metadata[:body].size
|
43
43
|
else
|
44
44
|
filename = ::File.basename(data.path)
|
45
45
|
unless (mime_types = MIME::Types.of(filename)).empty?
|
46
46
|
metadata[:headers]['Content-Type'] = mime_types.first.content_type
|
47
47
|
end
|
48
48
|
metadata[:body] = data
|
49
|
-
metadata[:headers]['Content-Length'] = ::File.size(data.path)
|
49
|
+
metadata[:headers]['Content-Length'] = ::File.size(data.path)
|
50
50
|
end
|
51
51
|
# metadata[:headers]['Content-MD5'] = Base64.encode64(Digest::MD5.digest(metadata[:body])).strip
|
52
52
|
metadata
|
@@ -54,12 +54,12 @@ module Fog
|
|
54
54
|
|
55
55
|
def url(params, expires)
|
56
56
|
params[:headers]['Date'] = expires.to_i
|
57
|
+
params[:path] = CGI.escape(params[:path]).gsub('%2F', '/')
|
57
58
|
query = [params[:query]].compact
|
58
59
|
query << "GoogleAccessKeyId=#{@google_storage_access_key_id}"
|
59
60
|
query << "Signature=#{CGI.escape(signature(params))}"
|
60
61
|
query << "Expires=#{params[:headers]['Date']}"
|
61
|
-
|
62
|
-
"http://#{params[:host]}/#{path}?#{query.join('&')}"
|
62
|
+
"http://#{params[:host]}/#{params[:path]}?#{query.join('&')}"
|
63
63
|
end
|
64
64
|
|
65
65
|
end
|
@@ -70,7 +70,7 @@ module Fog
|
|
70
70
|
def self.acls(type)
|
71
71
|
case type
|
72
72
|
when 'private'
|
73
|
-
|
73
|
+
{
|
74
74
|
"AccessControlList"=> [
|
75
75
|
{
|
76
76
|
"Permission" => "FULL_CONTROL",
|
@@ -80,32 +80,51 @@ module Fog
|
|
80
80
|
"Owner" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
81
81
|
}
|
82
82
|
when 'public-read'
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
83
|
+
{
|
84
|
+
"AccessControlList"=> [
|
85
|
+
{
|
86
|
+
"Permission" => "FULL_CONTROL",
|
87
|
+
"Scope" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0", "type" => "UserById"}
|
88
|
+
},
|
89
|
+
{
|
90
|
+
"Permission" => "READ",
|
91
|
+
"Scope" => {"type" => "AllUsers"}
|
92
|
+
}
|
93
|
+
],
|
94
|
+
"Owner" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
95
|
+
}
|
91
96
|
when 'public-read-write'
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
97
|
+
{
|
98
|
+
"AccessControlList"=> [
|
99
|
+
{
|
100
|
+
"Permission" => "FULL_CONTROL",
|
101
|
+
"Scope" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0", "type" => "UserById"}
|
102
|
+
},
|
103
|
+
{
|
104
|
+
"Permission" => "READ",
|
105
|
+
"Scope" => {"type" => "AllUsers"}
|
106
|
+
},
|
107
|
+
{
|
108
|
+
"Permission" => "WRITE",
|
109
|
+
"Scope" => {"type" => "AllUsers"}
|
110
|
+
}
|
111
|
+
],
|
112
|
+
"Owner" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
113
|
+
}
|
100
114
|
when 'authenticated-read'
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
115
|
+
{
|
116
|
+
"AccessControlList"=> [
|
117
|
+
{
|
118
|
+
"Permission" => "FULL_CONTROL",
|
119
|
+
"Scope" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0", "type" => "UserById"}
|
120
|
+
},
|
121
|
+
{
|
122
|
+
"Permission" => "READ",
|
123
|
+
"Scope" => {"type" => "AllAuthenticatedUsers"}
|
124
|
+
}
|
125
|
+
],
|
126
|
+
"Owner" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
|
127
|
+
}
|
109
128
|
end
|
110
129
|
end
|
111
130
|
|