maestrano 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,101 +4,262 @@ module Maestrano
4
4
  class SSOTest < Test::Unit::TestCase
5
5
  include SamlTestHelper
6
6
 
7
- setup do
8
- Maestrano.config = nil
9
- Maestrano.configure { |config| config.environment = 'production' }
10
- end
11
-
12
- should "return the right init_url" do
13
- assert Maestrano::SSO.init_url == "http://localhost:3000/maestrano/auth/saml/init"
14
- end
15
-
16
- should "return the right consume_url" do
17
- assert Maestrano::SSO.consume_url == "http://localhost:3000/maestrano/auth/saml/consume"
18
- end
19
-
20
- should "return the right logout_url" do
21
- assert Maestrano::SSO.logout_url == "https://maestrano.com/app_logout"
22
- end
23
-
24
- should "return the right unauthorized_url" do
25
- assert Maestrano::SSO.unauthorized_url == "https://maestrano.com/app_access_unauthorized"
26
- end
27
-
28
- should "return the right idp_url" do
29
- assert Maestrano::SSO.idp_url == "https://maestrano.com/api/v1/auth/saml"
30
- end
31
-
32
- should "return the right session_check_url" do
33
- assert Maestrano::SSO.session_check_url('usr-1','f9ds8fdg7f89') == "https://maestrano.com/api/v1/auth/saml/usr-1?session=f9ds8fdg7f89"
34
- end
35
-
36
- should "return the right enabled parameter" do
37
- assert Maestrano::SSO.enabled? == !!Maestrano.param('sso.enabled')
38
- end
39
-
40
- should "return the right saml_settings" do
41
- settings = Maestrano::SSO.saml_settings
42
- assert settings.assertion_consumer_service_url == Maestrano::SSO.consume_url
43
- assert settings.issuer == Maestrano.param('api.id')
44
- assert settings.idp_sso_target_url == Maestrano::SSO.idp_url
45
- assert settings.idp_cert_fingerprint == Maestrano.param('sso_x509_fingerprint')
46
- assert settings.name_identifier_format == Maestrano.param('sso_name_id_format')
47
- end
48
-
49
- should "build the right saml request" do
50
- request = mock('request')
51
- Maestrano::Saml::Request.stubs(:new).with(group_id: "cld-3").returns(request)
52
- assert Maestrano::SSO.build_request(group_id: "cld-3") == request
53
- end
54
-
55
- should "build the right saml response" do
56
- response = mock('response')
57
- Maestrano::Saml::Response.stubs(:new).with(response_document).returns(response)
58
- response = Maestrano::SSO.build_response(response_document)
59
- assert Maestrano::SSO.build_response(response_document) == response
60
- end
61
-
62
- context "session management" do
7
+ context 'without preset' do
63
8
  setup do
64
- @session = {}
65
- @auth = {
66
- extra: {
67
- session: {
68
- uid: 'usr-1',
69
- token: '15fg6d',
70
- recheck: Time.now,
71
- group_uid: 'cld-3'
9
+ Maestrano.configs = nil
10
+ Maestrano.configure { |config| config.environment = 'production' }
11
+ end
12
+
13
+ should "return the right init_url" do
14
+ assert Maestrano::SSO.init_url == "http://localhost:3000/maestrano/auth/saml/init"
15
+ end
16
+
17
+ should "return the right consume_url" do
18
+ assert Maestrano::SSO.consume_url == "http://localhost:3000/maestrano/auth/saml/consume"
19
+ end
20
+
21
+ should "return the right logout_url" do
22
+ assert Maestrano::SSO.logout_url == "https://maestrano.com/app_logout"
23
+ end
24
+
25
+ should "return the right unauthorized_url" do
26
+ assert Maestrano::SSO.unauthorized_url == "https://maestrano.com/app_access_unauthorized"
27
+ end
28
+
29
+ should "return the right idp_url" do
30
+ assert Maestrano::SSO.idp_url == "https://maestrano.com/api/v1/auth/saml"
31
+ end
32
+
33
+ should "return the right session_check_url" do
34
+ assert Maestrano::SSO.session_check_url('usr-1','f9ds8fdg7f89') == "https://maestrano.com/api/v1/auth/saml/usr-1?session=f9ds8fdg7f89"
35
+ end
36
+
37
+ should "return the right enabled parameter" do
38
+ assert Maestrano::SSO.enabled? == !!Maestrano.param('sso.enabled')
39
+ end
40
+
41
+ should "return the right saml_settings" do
42
+ settings = Maestrano::SSO.saml_settings
43
+ assert settings.assertion_consumer_service_url == Maestrano::SSO.consume_url
44
+ assert settings.issuer == Maestrano.param('api.id')
45
+ assert settings.idp_sso_target_url == Maestrano::SSO.idp_url
46
+ assert settings.idp_cert_fingerprint == Maestrano.param('sso_x509_fingerprint')
47
+ assert settings.name_identifier_format == Maestrano.param('sso_name_id_format')
48
+ end
49
+
50
+ should "build the right saml request" do
51
+ request = mock('request')
52
+ Maestrano::Saml::Request.stubs(:new).with(group_id: "cld-3").returns(request)
53
+ assert Maestrano::SSO.build_request(group_id: "cld-3") == request
54
+ end
55
+
56
+ should "build the right saml response" do
57
+ response = mock('response')
58
+ Maestrano::Saml::Response.stubs(:new).with(response_document).returns(response)
59
+ response = Maestrano::SSO.build_response(response_document)
60
+ assert Maestrano::SSO.build_response(response_document) == response
61
+ end
62
+
63
+ context "session management" do
64
+ setup do
65
+ @session = {}
66
+ @auth = {
67
+ extra: {
68
+ session: {
69
+ uid: 'usr-1',
70
+ token: '15fg6d',
71
+ recheck: Time.now,
72
+ group_uid: 'cld-3'
73
+ }
72
74
  }
73
75
  }
76
+ end
77
+
78
+ should "set the session correctly" do
79
+ Maestrano::SSO.set_session(@session,@auth)
80
+ decrypt_session = JSON.parse(Base64.decode64(@session[:maestrano]))
81
+ assert_equal decrypt_session['uid'], @auth[:extra][:session][:uid]
82
+ assert_equal decrypt_session['session'], @auth[:extra][:session][:token]
83
+ assert_equal decrypt_session['session_recheck'], @auth[:extra][:session][:recheck].utc.iso8601
84
+ assert_equal decrypt_session['group_uid'], @auth[:extra][:session][:group_uid]
85
+ end
86
+
87
+ should "unset the session correctly" do
88
+ Maestrano::SSO.set_session(@session,@auth)
89
+ Maestrano::SSO.clear_session(@session)
90
+ assert @session[:maestrano].nil?
91
+ end
92
+
93
+ should "unset the session if key is a string" do
94
+ @session['maestrano'] = "bla"
95
+ Maestrano::SSO.clear_session(@session)
96
+ assert @session["maestrano"].nil?
97
+ end
98
+
99
+ should "alias clear_session as unset_session" do
100
+ Maestrano::SSO.set_session(@session,@auth)
101
+ Maestrano::SSO.unset_session(@session)
102
+ assert @session[:maestrano].nil?
103
+ end
104
+ end
105
+ end
106
+
107
+ context 'with preset' do
108
+ setup do
109
+ @preset = 'mypreset'
110
+
111
+ @config = {
112
+ 'environment' => 'production',
113
+ 'app.host' => 'http://mysuperapp.com',
114
+
115
+ 'api.id' => 'app-f54ds4f8',
116
+ 'api.key' => 'someapikey',
117
+
118
+ 'sso.enabled' => false,
119
+ 'sso.slo_enabled' => false,
120
+ 'sso.init_path' => '/mno/sso/init',
121
+ 'sso.consume_path' => '/mno/sso/consume',
122
+ 'sso.creation_mode' => 'real',
123
+ 'sso.idm' => 'http://idp.mysuperapp.com'
124
+ }
125
+
126
+ @preset_config = {
127
+ 'environment' => 'production',
128
+ 'app.host' => 'http://myotherapp.com',
129
+
130
+ 'api.id' => 'app-553941',
131
+ 'api.key' => 'otherapikey',
132
+
133
+ 'sso.enabled' => false,
134
+ 'sso.slo_enabled' => false,
135
+ 'sso.init_path' => '/mno/sso/init',
136
+ 'sso.consume_path' => '/mno/sso/consume',
137
+ 'sso.creation_mode' => 'real',
138
+ 'sso.idm' => 'http://idp.myotherapp.com'
74
139
  }
140
+
141
+ Maestrano.configure do |config|
142
+ config.environment = @config['environment']
143
+ config.app.host = @config['app.host']
144
+
145
+ config.api.id = @config['api.id']
146
+ config.api.key = @config['api.key']
147
+
148
+ config.sso.enabled = @config['sso.enabled']
149
+ config.sso.slo_enabled = @config['sso.slo_enabled']
150
+ config.sso.idm = @config['sso.idm']
151
+ config.sso.init_path = @config['sso.init_path']
152
+ config.sso.consume_path = @config['sso.consume_path']
153
+ config.sso.creation_mode = @config['sso.creation_mode']
154
+ end
155
+
156
+ Maestrano[@preset].configure do |config|
157
+ config.environment = @preset_config['environment']
158
+ config.app.host = @preset_config['app.host']
159
+
160
+ config.api.id = @preset_config['api.id']
161
+ config.api.key = @preset_config['api.key']
162
+
163
+ config.sso.enabled = @preset_config['sso.enabled']
164
+ config.sso.slo_enabled = @preset_config['sso.slo_enabled']
165
+ config.sso.idm = @preset_config['sso.idm']
166
+ config.sso.init_path = @preset_config['sso.init_path']
167
+ config.sso.consume_path = @preset_config['sso.consume_path']
168
+ config.sso.creation_mode = @preset_config['sso.creation_mode']
169
+ end
75
170
  end
76
171
 
77
- should "set the session correctly" do
78
- Maestrano::SSO.set_session(@session,@auth)
79
- decrypt_session = JSON.parse(Base64.decode64(@session[:maestrano]))
80
- assert_equal decrypt_session['uid'], @auth[:extra][:session][:uid]
81
- assert_equal decrypt_session['session'], @auth[:extra][:session][:token]
82
- assert_equal decrypt_session['session_recheck'], @auth[:extra][:session][:recheck].utc.iso8601
83
- assert_equal decrypt_session['group_uid'], @auth[:extra][:session][:group_uid]
172
+ should "return the right init_url" do
173
+ assert_equal Maestrano::SSO[@preset].init_url, "http://idp.myotherapp.com/mno/sso/init"
84
174
  end
85
-
86
- should "unset the session correctly" do
87
- Maestrano::SSO.set_session(@session,@auth)
88
- Maestrano::SSO.clear_session(@session)
89
- assert @session[:maestrano].nil?
175
+
176
+ should "return the right consume_url" do
177
+ assert_equal Maestrano::SSO[@preset].consume_url, "http://idp.myotherapp.com/mno/sso/consume"
90
178
  end
91
-
92
- should "unset the session if key is a string" do
93
- @session['maestrano'] = "bla"
94
- Maestrano::SSO.clear_session(@session)
95
- assert @session["maestrano"].nil?
179
+
180
+ should "return the right logout_url" do
181
+ assert_equal Maestrano::SSO[@preset].logout_url, "https://maestrano.com/app_logout"
182
+ end
183
+
184
+ should "return the right unauthorized_url" do
185
+ assert_equal Maestrano::SSO[@preset].unauthorized_url, "https://maestrano.com/app_access_unauthorized"
186
+ end
187
+
188
+ should "return the right idp_url" do
189
+ assert_equal Maestrano::SSO[@preset].idp_url, "https://maestrano.com/api/v1/auth/saml"
190
+ end
191
+
192
+ should "return the right session_check_url" do
193
+ assert_equal Maestrano::SSO[@preset].session_check_url('usr-1','f9ds8fdg7f89'), "https://maestrano.com/api/v1/auth/saml/usr-1?session=f9ds8fdg7f89"
194
+ end
195
+
196
+ should "return the right enabled parameter" do
197
+ assert_equal Maestrano::SSO[@preset].enabled?, !!Maestrano[@preset].param('sso.enabled')
96
198
  end
199
+
200
+ should "return the right saml_settings" do
201
+ settings = Maestrano::SSO[@preset].saml_settings
202
+ assert settings.assertion_consumer_service_url == Maestrano::SSO[@preset].consume_url
203
+ assert settings.issuer == Maestrano[@preset].param('api.id')
204
+ assert settings.idp_sso_target_url == Maestrano::SSO[@preset].idp_url
205
+ assert settings.idp_cert_fingerprint == Maestrano[@preset].param('sso_x509_fingerprint')
206
+ assert settings.name_identifier_format == Maestrano[@preset].param('sso_name_id_format')
207
+ end
208
+
209
+ should "build the right saml request" do
210
+ request = mock('request')
211
+ Maestrano::Saml::Request.stubs(:new).with(group_id: "cld-3").returns(request)
212
+ assert Maestrano::SSO[@preset].build_request(group_id: "cld-3") == request
213
+ end
214
+
215
+ should "build the right saml response" do
216
+ response = mock('response')
217
+ Maestrano::Saml::Response.stubs(:new).with(response_document).returns(response)
218
+ response = Maestrano::SSO[@preset].build_response(response_document)
219
+ assert Maestrano::SSO[@preset].build_response(response_document) == response
220
+ end
221
+
222
+ context "session management" do
223
+ setup do
224
+ @session = {}
225
+ @auth = {
226
+ extra: {
227
+ session: {
228
+ uid: 'usr-1',
229
+ token: '15fg6d',
230
+ recheck: Time.now,
231
+ group_uid: 'cld-3'
232
+ }
233
+ }
234
+ }
235
+ end
97
236
 
98
- should "alias clear_session as unset_session" do
99
- Maestrano::SSO.set_session(@session,@auth)
100
- Maestrano::SSO.unset_session(@session)
101
- assert @session[:maestrano].nil?
237
+ should "set the session correctly" do
238
+ Maestrano::SSO[@preset].set_session(@session,@auth)
239
+ decrypt_session = JSON.parse(Base64.decode64(@session[:maestrano]))
240
+ assert_equal decrypt_session['uid'], @auth[:extra][:session][:uid]
241
+ assert_equal decrypt_session['session'], @auth[:extra][:session][:token]
242
+ assert_equal decrypt_session['session_recheck'], @auth[:extra][:session][:recheck].utc.iso8601
243
+ assert_equal decrypt_session['group_uid'], @auth[:extra][:session][:group_uid]
244
+ end
245
+
246
+ should "unset the session correctly" do
247
+ Maestrano::SSO[@preset].set_session(@session,@auth)
248
+ Maestrano::SSO[@preset].clear_session(@session)
249
+ assert @session[:maestrano].nil?
250
+ end
251
+
252
+ should "unset the session if key is a string" do
253
+ @session['maestrano'] = "bla"
254
+ Maestrano::SSO[@preset].clear_session(@session)
255
+ assert @session["maestrano"].nil?
256
+ end
257
+
258
+ should "alias clear_session as unset_session" do
259
+ Maestrano::SSO[@preset].set_session(@session,@auth)
260
+ Maestrano::SSO[@preset].unset_session(@session)
261
+ assert @session[:maestrano].nil?
262
+ end
102
263
  end
103
264
  end
104
265
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maestrano
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Lachaume
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-24 00:00:00.000000000 Z
11
+ date: 2015-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -200,6 +200,7 @@ files:
200
200
  - lib/maestrano/api/util.rb
201
201
  - lib/maestrano/connec/client.rb
202
202
  - lib/maestrano/open_struct.rb
203
+ - lib/maestrano/preset.rb
203
204
  - lib/maestrano/saml/attribute_value.rb
204
205
  - lib/maestrano/saml/metadata.rb
205
206
  - lib/maestrano/saml/request.rb
@@ -286,7 +287,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
287
  version: '0'
287
288
  requirements: []
288
289
  rubyforge_project:
289
- rubygems_version: 2.2.2
290
+ rubygems_version: 2.4.5
290
291
  signing_key:
291
292
  specification_version: 4
292
293
  summary: Ruby bindings for the Maestrano API