swift_client 0.1.1 → 0.1.2
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.
- checksums.yaml +7 -0
- data/README.md +50 -3
- data/lib/swift_client.rb +33 -1
- data/lib/swift_client/version.rb +1 -1
- data/test/swift_client_test.rb +18 -0
- metadata +21 -35
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 44973422875ba91bde545267d984f7ad5ce67f5f
|
4
|
+
data.tar.gz: 044594bc8d651dde398221808252ba417a1292bf
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 51f7033388ebd75a8f83d62900880cd5de518ad08e94fd9c64e8420a8ca0d24eb3e41fc29fa96d4dff4001c2b88ed79831f733fb2b1da80245cc01ceb446c5a1
|
7
|
+
data.tar.gz: 5a5199435b62f2b318aacf1728150894d0a242adc8030a167d22b25656c5a925a5472242768b633164359133a346de9d26852b6f221bc551ab4e402d0f259e6c
|
data/README.md
CHANGED
@@ -28,17 +28,64 @@ Or install it yourself as:
|
|
28
28
|
First, connect to a Swift cluster:
|
29
29
|
|
30
30
|
```ruby
|
31
|
-
swift_client = SwiftClient.new(
|
31
|
+
swift_client = SwiftClient.new(
|
32
|
+
:auth_url => "https://example.com/auth/v1.0",
|
33
|
+
:username => "account:username",
|
34
|
+
:api_key => "api key",
|
35
|
+
:temp_url_key => "temp url key",
|
36
|
+
:storage_url => "https://example.com/v1/AUTH_account"
|
37
|
+
)
|
32
38
|
```
|
33
39
|
|
34
40
|
To connect via v2 you have to add version and method specific details:
|
35
41
|
|
36
42
|
```ruby
|
37
|
-
swift_client = SwiftClient.new(
|
43
|
+
swift_client = SwiftClient.new(
|
44
|
+
:auth_url => "https://auth.example.com/v2.0",
|
45
|
+
:storage_url => "https://storage.example.com/v1/AUTH_account",
|
46
|
+
:tenant_name => "tenant",
|
47
|
+
:username => "username",
|
48
|
+
:password => "password"
|
49
|
+
)
|
38
50
|
|
39
51
|
# OR
|
40
52
|
|
41
|
-
swift_client = SwiftClient.new(
|
53
|
+
swift_client = SwiftClient.new(
|
54
|
+
:auth_url => "https://auth.example.com/v2.0",
|
55
|
+
:storage_url => "https://storage.example.com/v1/AUTH_account",
|
56
|
+
:tenant_name => "tenant",
|
57
|
+
:access_key => "access key",
|
58
|
+
:secret_key => "secret key"
|
59
|
+
)
|
60
|
+
```
|
61
|
+
|
62
|
+
To connect via v3:
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
swift_client = SwiftClient.new(
|
66
|
+
:auth_url => "https://auth.example.com/v3",
|
67
|
+
:storage_url => "https://storage.example.com/v1/AUTH_account",
|
68
|
+
:username => "username",
|
69
|
+
:password => "password",
|
70
|
+
:domain => "example.com" # :domain_id => "..." is valid as well
|
71
|
+
)
|
72
|
+
|
73
|
+
# OR
|
74
|
+
|
75
|
+
swift_client = SwiftClient.new(
|
76
|
+
:auth_url => "https://auth.example.com/v3",
|
77
|
+
:storage_url => "https://storage.example.com/v1/AUTH_account",
|
78
|
+
:user_id => "user id",
|
79
|
+
:password => "password"
|
80
|
+
)
|
81
|
+
|
82
|
+
# OR
|
83
|
+
|
84
|
+
swift_client = SwiftClient.new(
|
85
|
+
:auth_url => "https://auth.example.com/v3",
|
86
|
+
:storage_url => "https://storage.example.com/v1/AUTH_account",
|
87
|
+
:token => "token"
|
88
|
+
)
|
42
89
|
```
|
43
90
|
|
44
91
|
where `temp_url_key` and `storage_url` are optional.
|
data/lib/swift_client.rb
CHANGED
@@ -185,7 +185,10 @@ class SwiftClient
|
|
185
185
|
end
|
186
186
|
|
187
187
|
def authenticate
|
188
|
-
options[:auth_url] =~ /
|
188
|
+
return authenticate_v3 if options[:auth_url] =~ /v3/
|
189
|
+
return authenticate_v2 if options[:auth_url] =~ /v2/
|
190
|
+
|
191
|
+
authenticate_v1
|
189
192
|
end
|
190
193
|
|
191
194
|
def authenticate_v1
|
@@ -230,6 +233,35 @@ class SwiftClient
|
|
230
233
|
self.storage_url = options[:storage_url]
|
231
234
|
end
|
232
235
|
|
236
|
+
def authenticate_v3
|
237
|
+
[:auth_url, :storage_url].each do |key|
|
238
|
+
raise(AuthenticationError, "#{key} missing") unless options[key]
|
239
|
+
end
|
240
|
+
|
241
|
+
auth = { "auth" => { "identity" => {} } }
|
242
|
+
|
243
|
+
if options[:username] && options[:password] && (options[:domain] || options[:domain_id])
|
244
|
+
auth["auth"]["identity"]["methods"] = ["password"]
|
245
|
+
auth["auth"]["identity"]["password"] = { "user" => { "name" => options[:username], "password" => options[:password] } }
|
246
|
+
auth["auth"]["identity"]["password"]["user"]["domain"] = options[:domain] ? { "name" => options[:domain] } : { "id" => options[:domain_id] }
|
247
|
+
elsif options[:user_id] && options[:password]
|
248
|
+
auth["auth"]["identity"]["methods"] = ["password"]
|
249
|
+
auth["auth"]["identity"]["password"] = { "user" => { "id" => options[:user_id], "password" => options[:password] } }
|
250
|
+
elsif options[:token]
|
251
|
+
auth["auth"]["identity"]["methods"] = ["token"]
|
252
|
+
auth["auth"]["identity"]["token"] = { "id" => options[:token] }
|
253
|
+
else
|
254
|
+
raise AuthenticationError, "Unknown authentication method"
|
255
|
+
end
|
256
|
+
|
257
|
+
response = HTTParty.post("#{options[:auth_url].gsub(/\/+$/, "")}/auth/tokens", :body => JSON.dump(auth), :headers => { "Content-Type" => "application/json" })
|
258
|
+
|
259
|
+
raise(AuthenticationError, "#{response.code}: #{response.message}") unless response.success?
|
260
|
+
|
261
|
+
self.auth_token = response.headers["X-Subject-Token"]
|
262
|
+
self.storage_url = options[:storage_url]
|
263
|
+
end
|
264
|
+
|
233
265
|
def paginate(method, *args, query)
|
234
266
|
return enum_for(:paginate, method, *args, query) unless block_given?
|
235
267
|
|
data/lib/swift_client/version.rb
CHANGED
data/test/swift_client_test.rb
CHANGED
@@ -11,6 +11,24 @@ class SwiftClientTest < MiniTest::Test
|
|
11
11
|
assert_equal "https://example.com/v1/AUTH_account", @swift_client.storage_url
|
12
12
|
end
|
13
13
|
|
14
|
+
def test_v3_authentication_with_password
|
15
|
+
stub_request(:post, "https://auth.example.com/v3/auth/tokens").with(:body => JSON.dump("auth" => { "identity" => { "methods" => ["password"], "password" => { "user" => { "name" => "username", "password" => "secret", "domain" => { "name" => "example.com" }}}}})).to_return(:status => 200, :body => JSON.dump("token" => "..."), :headers => { "X-Subject-Token" => "Token", "Content-Type" => "application/json" })
|
16
|
+
|
17
|
+
@swift_client = SwiftClient.new(:storage_url => "https://example.com/v1/AUTH_account", :auth_url => "https://auth.example.com/v3", :username => "username", :domain => "example.com", :password => "secret")
|
18
|
+
|
19
|
+
assert_equal "Token", @swift_client.auth_token
|
20
|
+
assert_equal "https://example.com/v1/AUTH_account", @swift_client.storage_url
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_v3_authentication_with_token
|
24
|
+
stub_request(:post, "https://auth.example.com/v3/auth/tokens").with(:body => JSON.dump("auth" => { "identity" => { "methods" => ["token"], "token" => { "id" => "Token" }}})).to_return(:status => 200, :body => JSON.dump("token" => "..."), :headers => { "X-Subject-Token" => "Token", "Content-Type" => "application/json" })
|
25
|
+
|
26
|
+
@swift_client = SwiftClient.new(:storage_url => "https://example.com/v1/AUTH_account", :auth_url => "https://auth.example.com/v3", :token => "Token")
|
27
|
+
|
28
|
+
assert_equal "Token", @swift_client.auth_token
|
29
|
+
assert_equal "https://example.com/v1/AUTH_account", @swift_client.storage_url
|
30
|
+
end
|
31
|
+
|
14
32
|
def test_v2_authentication_with_password
|
15
33
|
stub_request(:post, "https://auth.example.com/v2.0/tokens").with(:body => JSON.dump("auth" => { "tenantName" => "Tenant", "passwordCredentials" => { "username" => "Username", :password => "Password" }})).to_return(:status => 200, :body => JSON.dump("access" => { "token" => { "id" => "Token" }}), :headers => { "Content-Type" => "application/json" })
|
16
34
|
|
metadata
CHANGED
@@ -1,110 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swift_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Benjamin Vetter
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-02-23 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: httparty
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: mime-types
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- - <
|
31
|
+
- - "<"
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '3.0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- - <
|
38
|
+
- - "<"
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '3.0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - ">="
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - ">="
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: minitest
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ">="
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - ">="
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: webmock
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - ">="
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - ">="
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
description: Small but powerful client to interact with OpenStack Swift
|
@@ -114,8 +101,8 @@ executables: []
|
|
114
101
|
extensions: []
|
115
102
|
extra_rdoc_files: []
|
116
103
|
files:
|
117
|
-
- .gitignore
|
118
|
-
- .travis.yml
|
104
|
+
- ".gitignore"
|
105
|
+
- ".travis.yml"
|
119
106
|
- Gemfile
|
120
107
|
- LICENSE.txt
|
121
108
|
- README.md
|
@@ -128,27 +115,26 @@ files:
|
|
128
115
|
homepage: https://github.com/mrkamel/swift_client
|
129
116
|
licenses:
|
130
117
|
- MIT
|
118
|
+
metadata: {}
|
131
119
|
post_install_message:
|
132
120
|
rdoc_options: []
|
133
121
|
require_paths:
|
134
122
|
- lib
|
135
123
|
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
124
|
requirements:
|
138
|
-
- -
|
125
|
+
- - ">="
|
139
126
|
- !ruby/object:Gem::Version
|
140
127
|
version: '0'
|
141
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
|
-
none: false
|
143
129
|
requirements:
|
144
|
-
- -
|
130
|
+
- - ">="
|
145
131
|
- !ruby/object:Gem::Version
|
146
132
|
version: '0'
|
147
133
|
requirements: []
|
148
134
|
rubyforge_project:
|
149
|
-
rubygems_version:
|
135
|
+
rubygems_version: 2.2.2
|
150
136
|
signing_key:
|
151
|
-
specification_version:
|
137
|
+
specification_version: 4
|
152
138
|
summary: Small but powerful client to interact with OpenStack Swift
|
153
139
|
test_files:
|
154
140
|
- test/swift_client_test.rb
|