fog-radosgw 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -22,7 +22,8 @@ Gem::Specification.new do |s|
22
22
  s.extra_rdoc_files = %w[README.md LICENSE.md]
23
23
 
24
24
  s.add_dependency 'fog-json'
25
- s.add_dependency 'fog', '>=1.21.0'
25
+ s.add_dependency 'fog-xml'
26
+ s.add_dependency 'fog-core', '>=1.21.0'
26
27
  s.add_development_dependency 'rake'
27
28
  s.add_development_dependency 'yard'
28
29
  s.add_development_dependency 'shindo'
@@ -1,4 +1,4 @@
1
- require 'fog'
1
+ require 'fog/core'
2
2
 
3
3
  module Fog
4
4
  module Radosgw
@@ -72,7 +72,7 @@ module Fog
72
72
 
73
73
  def update_radosgw_user(user_id, user)
74
74
  path = "admin/user"
75
- user_id = Fog::AWS.escape(user_id)
75
+ user_id = escape(user_id)
76
76
  params = {
77
77
  :method => 'POST',
78
78
  :path => path,
@@ -125,9 +125,72 @@ module Fog
125
125
  "#{@scheme}://#{@host}:#{@port}"
126
126
  end
127
127
 
128
+ def escape(string)
129
+ string.gsub(/([^a-zA-Z0-9_.\-~]+)/) {
130
+ "%" + $1.unpack("H2" * $1.bytesize).join("%").upcase
131
+ }
132
+ end
133
+
134
+ def signature(params, expires)
135
+ headers = params[:headers] || {}
136
+
137
+ string_to_sign =
138
+ <<-DATA
139
+ #{params[:method].to_s.upcase}
140
+ #{headers['Content-MD5']}
141
+ #{headers['Content-Type']}
142
+ #{expires}
143
+ DATA
144
+
145
+ amz_headers, canonical_amz_headers = {}, ''
146
+ for key, value in headers
147
+ if key[0..5] == 'x-amz-'
148
+ amz_headers[key] = value
149
+ end
150
+ end
151
+ amz_headers = amz_headers.sort {|x, y| x[0] <=> y[0]}
152
+ for key, value in amz_headers
153
+ canonical_amz_headers << "#{key}:#{value}\n"
154
+ end
155
+ string_to_sign << canonical_amz_headers
156
+
157
+
158
+ query_string = ''
159
+ if params[:query]
160
+ query_args = []
161
+ for key in params[:query].keys.sort
162
+ if VALID_QUERY_KEYS.include?(key)
163
+ value = params[:query][key]
164
+ if value
165
+ query_args << "#{key}=#{value}"
166
+ else
167
+ query_args << key
168
+ end
169
+ end
170
+ end
171
+ if query_args.any?
172
+ query_string = '?' + query_args.join('&')
173
+ end
174
+ end
175
+
176
+ canonical_path = (params[:path] || object_to_path(params[:object_name])).to_s
177
+ canonical_path = '/' + canonical_path if canonical_path[0..0] != '/'
178
+ if params[:bucket_name]
179
+ canonical_resource = "/#{params[:bucket_name]}#{canonical_path}"
180
+ else
181
+ canonical_resource = canonical_path
182
+ end
183
+ canonical_resource << query_string
184
+ string_to_sign << canonical_resource
185
+
186
+ hmac = Fog::HMAC.new('sha1', @radosgw_secret_access_key)
187
+ signed_string = hmac.sign(string_to_sign)
188
+ Base64.encode64(signed_string).chomp!
189
+ end
190
+
128
191
  def signed_headers(params)
129
192
  expires = Fog::Time.now.to_date_header
130
- auth = @s3_connection.signature(params,expires)
193
+ auth = signature(params,expires)
131
194
  awskey = @radosgw_access_key_id
132
195
  headers = {
133
196
  'Date' => expires,
@@ -1,4 +1,6 @@
1
1
  require 'fog/radosgw/core'
2
+ require 'fog/json'
3
+ require 'fog/xml'
2
4
 
3
5
  module Fog
4
6
  module Radosgw
@@ -55,23 +57,12 @@ module Fog
55
57
  @persistent = options[:persistent] || false
56
58
  @path_style = options[:path_style] || false
57
59
 
58
- @raw_connection = Fog::XML::Connection.new(radosgw_uri, @persistent, @connection_options)
59
-
60
- @s3_connection = Fog::Storage.new(
61
- :provider => 'AWS',
62
- :aws_access_key_id => @radosgw_access_key_id,
63
- :aws_secret_access_key => @radosgw_secret_access_key,
64
- :host => @host,
65
- :port => @port,
66
- :scheme => @scheme,
67
- :path_style => @path_style,
68
- :connection_options => @connection_options
69
- )
60
+ @connection = Fog::Xml::Connection.new(radosgw_uri, @persistent, @connection_options)
70
61
  end
71
62
 
72
63
  def request(params, parse_response = true, &block)
73
64
  begin
74
- response = @raw_connection.request(params.merge({
65
+ response = @connection.request(params.merge({
75
66
  :host => @host,
76
67
  :path => "#{@path}/#{params[:path]}",
77
68
  }), &block)
@@ -10,9 +10,9 @@ module Fog
10
10
  end
11
11
 
12
12
  path = "admin/user"
13
- user_id = Fog::AWS.escape(user_id)
14
- display_name = Fog::AWS.escape(display_name)
15
- email = Fog::AWS.escape(email)
13
+ user_id = escape(user_id)
14
+ display_name = escape(display_name)
15
+ email = escape(email)
16
16
  query = "?uid=#{user_id}&display-name=#{display_name}&email=#{email}&format=json"
17
17
  params = {
18
18
  :method => 'PUT',
@@ -6,7 +6,7 @@ module Fog
6
6
 
7
7
  def delete_user(user_id)
8
8
  path = "admin/user"
9
- user_id = Fog::AWS.escape(user_id)
9
+ user_id = escape(user_id)
10
10
  query = "?uid=#{user_id}&format=json"
11
11
  params = {
12
12
  :method => 'DELETE',
@@ -7,7 +7,7 @@ module Fog
7
7
 
8
8
  def get_user(user_id)
9
9
  path = "admin/user"
10
- user_id = Fog::AWS.escape(user_id)
10
+ user_id = escape(user_id)
11
11
  query = "?uid=#{user_id}&format=json"
12
12
  params = {
13
13
  :method => 'GET',
@@ -5,7 +5,7 @@ module Fog
5
5
 
6
6
  def sanitize_and_convert_time(time)
7
7
  fmt = '%Y-%m-%d %H:%M:%S'
8
- Fog::AWS.escape(time.strftime(fmt))
8
+ escape(time.strftime(fmt))
9
9
  end
10
10
 
11
11
  end
@@ -45,16 +45,6 @@ module Fog
45
45
  @radosgw_secret_access_key = options[:radosgw_secret_access_key]
46
46
  @connection_options = options[:connection_options] || {}
47
47
  @persistent = options[:persistent] || false
48
-
49
- @s3_connection = Fog::Storage.new(
50
- :provider => 'AWS',
51
- :aws_access_key_id => @radosgw_access_key_id,
52
- :aws_secret_access_key => @radosgw_secret_access_key,
53
- :host => @host,
54
- :port => @port,
55
- :scheme => @scheme,
56
- :connection_options => @connection_options
57
- )
58
48
  end
59
49
  end
60
50
  end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module Radosgw
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -1,7 +1,7 @@
1
1
  ENV['FOG_RC'] = ENV['FOG_RC'] || File.expand_path('../.fog', __FILE__)
2
2
  ENV['FOG_CREDENTIAL'] = ENV['FOG_CREDENTIAL'] || 'default'
3
3
 
4
- require 'fog'
4
+ require 'fog/core'
5
5
  require 'fog/test_helpers/formats_helper'
6
6
 
7
7
  require File.expand_path(File.join(File.dirname(__FILE__), 'helpers', 'mock_helper'))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-radosgw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-18 00:00:00.000000000 Z
12
+ date: 2014-09-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog-json
@@ -28,7 +28,23 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: fog
31
+ name: fog-xml
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: fog-core
32
48
  requirement: !ruby/object:Gem::Requirement
33
49
  none: false
34
50
  requirements: