misty 0.4.0 → 0.4.1
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 +4 -4
- data/lib/misty/auth/auth_v3.rb +11 -8
- data/lib/misty/auth/name.rb +7 -1
- data/lib/misty/version.rb +1 -1
- data/test/unit/auth/name_test.rb +5 -5
- data/test/unit/auth_helper.rb +1 -1
- data/test/unit/auth_test.rb +71 -33
- data/test/unit/cloud/services_test.rb +4 -5
- data/test/unit/cloud_test.rb +3 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef6194d780346c6ece1d31df96eb3ee0b9238cfd
|
4
|
+
data.tar.gz: 647ec752cc79508e49f5b7be38197634f787921b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d44270f88d2790dd75c7c47641c88f1c4bf0217dcfb3baf95ca36b99c2b88d82306791e5a45171c0760a2c5360946c8b406fbc5a5cdc7b7db190aad951444c70
|
7
|
+
data.tar.gz: ee7884149c42462497317b8305c5b10edacfe584e44edc6273ce04314daca7339c90b33a8753d4d0f76b1ce1e7361616bcab823a6bd279a6d094be898c636d25
|
data/lib/misty/auth/auth_v3.rb
CHANGED
@@ -3,19 +3,22 @@ require 'misty/auth'
|
|
3
3
|
module Misty
|
4
4
|
class AuthV3 < Misty::Auth
|
5
5
|
def initialize(options, *args)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
if options[:project_id] || options[:project]
|
7
|
+
# scope: project
|
8
|
+
project_domain_id = options[:project_domain_id] ? options[:project_domain_id] : Misty::DOMAIN_ID
|
9
|
+
@project = Misty::Auth::ProjectScope.new(options[:project_id], options[:project])
|
10
|
+
@project.domain = Misty::Auth::Name.new(project_domain_id, options[:user_domain])
|
11
|
+
else
|
12
|
+
# scope: domain
|
13
|
+
domain_id = options[:domain_id] ? options[:domain_id] : Misty::DOMAIN_ID
|
14
|
+
@domain = Misty::Auth::DomainScope.new(domain_id, options[:domain]) if domain_id || options[:domain]
|
15
|
+
end
|
11
16
|
|
17
|
+
user_domain_id = options[:user_domain_id] ? options[:user_domain_id] : Misty::DOMAIN_ID
|
12
18
|
@user = Misty::Auth::User.new(options[:user_id], options[:user])
|
13
19
|
@user.password = options[:password]
|
14
20
|
@user.domain = Misty::Auth::Name.new(user_domain_id, options[:user_domain])
|
15
21
|
|
16
|
-
@project = Misty::Auth::Project.new(options[:project_id], options[:project])
|
17
|
-
@project.domain = Misty::Auth::Name.new(project_domain_id, options[:user_domain])
|
18
|
-
|
19
22
|
super(options, *args)
|
20
23
|
end
|
21
24
|
|
data/lib/misty/auth/name.rb
CHANGED
data/lib/misty/version.rb
CHANGED
data/test/unit/auth/name_test.rb
CHANGED
@@ -83,28 +83,28 @@ describe Misty::Auth::User do
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
-
describe Misty::Auth::
|
86
|
+
describe Misty::Auth::ProjectScope do
|
87
87
|
describe "#identity" do
|
88
88
|
it "when id is provided it doesn't require domain" do
|
89
|
-
project = Misty::Auth::
|
89
|
+
project = Misty::Auth::ProjectScope.new("project_id", "Project")
|
90
90
|
project.identity.must_equal ({:project=>{:id=>"project_id"}})
|
91
91
|
end
|
92
92
|
|
93
93
|
it "when id is nul and name is provided it uses domain id" do
|
94
|
-
project = Misty::Auth::
|
94
|
+
project = Misty::Auth::ProjectScope.new(nil, "Project")
|
95
95
|
project.domain = Misty::Auth::Name.new("default", nil)
|
96
96
|
project.identity.must_equal ({:project=>{:name=>"Project", :domain=>{:id=>"default"}}})
|
97
97
|
end
|
98
98
|
|
99
99
|
it "when id is nul and name is provided it uses domain name" do
|
100
|
-
project = Misty::Auth::
|
100
|
+
project = Misty::Auth::ProjectScope.new(nil, "Project")
|
101
101
|
project.domain = Misty::Auth::Name.new(nil, "Default")
|
102
102
|
project.identity.must_equal ({:project=>{:name=>"Project", :domain=>{:name=>"Default"}}})
|
103
103
|
end
|
104
104
|
|
105
105
|
it "raises an error with no project id and no domain are provided" do
|
106
106
|
proc do
|
107
|
-
project = Misty::Auth::
|
107
|
+
project = Misty::Auth::ProjectScope.new(nil, "Project")
|
108
108
|
project.identity
|
109
109
|
end.must_raise Misty::Auth::CredentialsError
|
110
110
|
end
|
data/test/unit/auth_helper.rb
CHANGED
@@ -3,7 +3,7 @@ def auth_response_v3(type, name)
|
|
3
3
|
{ 'methods' => ['password'],
|
4
4
|
'roles' => [{ 'id' => 'id_roles', 'name' => 'admin' }],
|
5
5
|
'expires_at' => '2016-11-29T07:45:29.908554Z',
|
6
|
-
'project' => { 'domain' => { 'id' => 'default', 'name' => 'Default' }, 'id' => '
|
6
|
+
'project' => { 'domain' => { 'id' => 'default', 'name' => 'Default' }, 'id' => 'project_id', 'name' => 'admin' },
|
7
7
|
'catalog' =>
|
8
8
|
[{ 'endpoints' =>
|
9
9
|
[{ 'region_id' => 'regionOne',
|
data/test/unit/auth_test.rb
CHANGED
@@ -2,41 +2,66 @@ require 'test_helper'
|
|
2
2
|
require 'auth_helper'
|
3
3
|
|
4
4
|
describe Misty::Auth do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
5
|
+
let(:log) { Logger.new('/dev/null') }
|
6
|
+
|
7
|
+
describe Misty::AuthV3 do
|
8
|
+
describe "#new" do
|
9
|
+
it "authenticates using project scoped authorization" do
|
10
|
+
auth = {
|
11
|
+
:url => "http://localhost:5000",
|
12
|
+
:user_id => "user_id",
|
13
|
+
:password => "secret",
|
14
|
+
:project_id => "project_id"
|
15
|
+
}
|
16
|
+
|
17
|
+
stub_request(:post, "http://localhost:5000/v3/auth/tokens").
|
18
|
+
with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"project\":{\"id\":\"project_id\"}}}}",
|
19
|
+
:headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json'}).
|
20
|
+
to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
|
21
|
+
|
22
|
+
Misty::AuthV3.new(auth, false, log)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "authenticates using domain scoped authorization" do
|
26
|
+
auth = {
|
27
|
+
:url => "http://localhost:5000",
|
28
|
+
:user_id => "user_id",
|
29
|
+
:password => "secret"
|
30
|
+
}
|
31
|
+
|
32
|
+
stub_request(:post, "http://localhost:5000/v3/auth/tokens").
|
33
|
+
with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"domain\":{\"id\":\"default\"}}}}",
|
34
|
+
:headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json'}).
|
35
|
+
to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
|
15
36
|
|
16
|
-
|
17
|
-
|
18
|
-
:url => "http://localhost:5000",
|
19
|
-
:user => "admin",
|
20
|
-
:password => "secret",
|
21
|
-
:tenant => "admin"
|
22
|
-
}
|
37
|
+
Misty::AuthV3.new(auth, false, log)
|
38
|
+
end
|
23
39
|
end
|
24
40
|
|
25
|
-
describe
|
26
|
-
|
41
|
+
describe "with credentials" do
|
42
|
+
let(:authv3_creds) do
|
43
|
+
{
|
44
|
+
:url => "http://localhost:5000",
|
45
|
+
:user => "admin",
|
46
|
+
:password => "secret",
|
47
|
+
:project => "admin"
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
it "fails when missing credentials" do
|
27
52
|
stub_request(:post, "http://localhost:5000/v3/auth/tokens").
|
28
|
-
|
53
|
+
to_return(:status => 200, :body => "{\"token\":{\"catalog\":[]}}", :headers => {"x-subject-token"=>"token_data"})
|
29
54
|
|
30
55
|
proc do
|
31
|
-
Misty::AuthV3.new({}, false,
|
56
|
+
Misty::AuthV3.new({}, false, log)
|
32
57
|
end.must_raise Misty::Auth::CredentialsError
|
33
58
|
end
|
34
59
|
|
35
60
|
it "#get_token" do
|
36
61
|
stub_request(:post, "http://localhost:5000/v3/auth/tokens").
|
37
|
-
|
62
|
+
to_return(:status => 200, :body => "{\"token\":{\"catalog\":[\"catalog_data\"]}}", :headers => {"x-subject-token"=>"token_data"})
|
38
63
|
|
39
|
-
auth = Misty::AuthV3.new(authv3_creds, false,
|
64
|
+
auth = Misty::AuthV3.new(authv3_creds, false, log)
|
40
65
|
auth.stub :expired?, false do
|
41
66
|
auth.get_token.must_equal "token_data"
|
42
67
|
end
|
@@ -44,36 +69,49 @@ describe Misty::Auth do
|
|
44
69
|
|
45
70
|
it "#catalog" do
|
46
71
|
stub_request(:post, "http://localhost:5000/v3/auth/tokens").
|
47
|
-
|
72
|
+
to_return(:status => 200, :body => "{\"token\":{\"catalog\":[\"catalog_data\"]}}", :headers => {"x-subject-token"=>"token_data"})
|
48
73
|
|
49
|
-
auth = Misty::AuthV3.new(authv3_creds, false,
|
74
|
+
auth = Misty::AuthV3.new(authv3_creds, false, log)
|
50
75
|
auth.catalog.must_equal ["catalog_data"]
|
51
76
|
end
|
52
77
|
|
53
78
|
it "#get_endpoint" do
|
54
79
|
stub_request(:post, "http://localhost:5000/v3/auth/tokens").
|
55
|
-
|
80
|
+
to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
|
56
81
|
|
57
|
-
auth = Misty::AuthV3.new(authv3_creds, false,
|
82
|
+
auth = Misty::AuthV3.new(authv3_creds, false, log)
|
58
83
|
auth.get_endpoint(%w{identity}, "regionOne", "public").must_equal "http://localhost"
|
59
84
|
end
|
60
85
|
end
|
86
|
+
end
|
61
87
|
|
62
|
-
|
63
|
-
|
88
|
+
describe Misty::AuthV2 do
|
89
|
+
describe "#new" do
|
90
|
+
it "fails when missing credentials" do
|
64
91
|
stub_request(:post, "http://localhost:5000/v2.0/tokens").
|
65
92
|
to_return(:status => 200, :body => "{\"access\":{\"token\":{\"id\":\"token_data\"}}}", :headers => {})
|
66
93
|
|
67
94
|
proc do
|
68
|
-
Misty::AuthV2.new({}, false,
|
95
|
+
Misty::AuthV2.new({}, false, log)
|
69
96
|
end.must_raise Misty::Auth::CredentialsError
|
70
97
|
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "with credentials" do
|
101
|
+
let(:authv2_creds) do
|
102
|
+
{
|
103
|
+
:url => "http://localhost:5000",
|
104
|
+
:user => "admin",
|
105
|
+
:password => "secret",
|
106
|
+
:tenant => "admin"
|
107
|
+
}
|
108
|
+
end
|
71
109
|
|
72
110
|
it "#get_token" do
|
73
111
|
stub_request(:post, "http://localhost:5000/v2.0/tokens").
|
74
112
|
to_return(:status => 200, :body => "{\"access\":{\"token\":{\"id\":\"token_data\"},\"serviceCatalog\":[\"catalog_data\"]}}", :headers => {})
|
75
113
|
|
76
|
-
auth = Misty::AuthV2.new(authv2_creds, false,
|
114
|
+
auth = Misty::AuthV2.new(authv2_creds, false, log)
|
77
115
|
auth.stub :expired?, false do
|
78
116
|
auth.get_token.must_equal "token_data"
|
79
117
|
end
|
@@ -83,7 +121,7 @@ describe Misty::Auth do
|
|
83
121
|
stub_request(:post, "http://localhost:5000/v2.0/tokens").
|
84
122
|
to_return(:status => 200, :body => "{\"access\":{\"token\":{\"id\":\"token_data\"},\"serviceCatalog\":[\"catalog_data\"]}}", :headers => {})
|
85
123
|
|
86
|
-
auth = Misty::AuthV2.new(authv2_creds, false,
|
124
|
+
auth = Misty::AuthV2.new(authv2_creds, false, log)
|
87
125
|
auth.catalog.must_equal ["catalog_data"]
|
88
126
|
end
|
89
127
|
|
@@ -91,7 +129,7 @@ describe Misty::Auth do
|
|
91
129
|
stub_request(:post, "http://localhost:5000/v2.0/tokens").
|
92
130
|
to_return(:status => 200, :body => JSON.dump(auth_response_v2("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
|
93
131
|
|
94
|
-
auth = Misty::AuthV2.new(authv2_creds, false,
|
132
|
+
auth = Misty::AuthV2.new(authv2_creds, false, log)
|
95
133
|
auth.get_endpoint(%w{identity}, "regionOne", "public").must_equal "http://localhost"
|
96
134
|
end
|
97
135
|
end
|
@@ -4,11 +4,10 @@ require 'auth_helper'
|
|
4
4
|
describe "Misty::Cloud" do
|
5
5
|
let(:cloud) do
|
6
6
|
auth = {
|
7
|
-
:url
|
8
|
-
:user
|
9
|
-
:password
|
10
|
-
:project
|
11
|
-
:domain => "default"
|
7
|
+
:url => "http://localhost:5000",
|
8
|
+
:user => "admin",
|
9
|
+
:password => "secret",
|
10
|
+
:project => "admin"
|
12
11
|
}
|
13
12
|
|
14
13
|
Misty::Cloud.new(:auth => auth)
|
data/test/unit/cloud_test.rb
CHANGED
@@ -22,7 +22,6 @@ describe Misty::Cloud do
|
|
22
22
|
:user => "admin",
|
23
23
|
:password => "secret",
|
24
24
|
:project => "admin",
|
25
|
-
:domain => "default"
|
26
25
|
}
|
27
26
|
end
|
28
27
|
|
@@ -89,8 +88,7 @@ describe Misty::Cloud do
|
|
89
88
|
authv3_data = {
|
90
89
|
:user => "admin",
|
91
90
|
:password => "secret",
|
92
|
-
:project => "admin"
|
93
|
-
:domain => "default"
|
91
|
+
:project => "admin"
|
94
92
|
}
|
95
93
|
|
96
94
|
proc do
|
@@ -103,8 +101,7 @@ describe Misty::Cloud do
|
|
103
101
|
:url => "",
|
104
102
|
:user => "admin",
|
105
103
|
:password => "secret",
|
106
|
-
:project => "admin"
|
107
|
-
:domain => "default"
|
104
|
+
:project => "admin"
|
108
105
|
}
|
109
106
|
|
110
107
|
proc do
|
@@ -140,8 +137,7 @@ describe Misty::Cloud do
|
|
140
137
|
:url => "http://localhost:5000",
|
141
138
|
:user => "admin",
|
142
139
|
:password => "secret",
|
143
|
-
:project => "admin"
|
144
|
-
:domain => "default"
|
140
|
+
:project => "admin"
|
145
141
|
}
|
146
142
|
end
|
147
143
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: misty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gilles Dubreuil
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|