vines 0.2.1 → 0.3.0
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.
- data/README +1 -1
- data/Rakefile +10 -10
- data/conf/certs/ca-bundle.crt +112 -378
- data/conf/config.rb +18 -9
- data/lib/vines.rb +8 -1
- data/lib/vines/command/cert.rb +2 -1
- data/lib/vines/command/init.rb +11 -0
- data/lib/vines/command/ldap.rb +6 -3
- data/lib/vines/command/schema.rb +1 -1
- data/lib/vines/config.rb +57 -146
- data/lib/vines/config/host.rb +85 -0
- data/lib/vines/config/port.rb +111 -0
- data/lib/vines/contact.rb +1 -1
- data/lib/vines/jid.rb +26 -4
- data/lib/vines/kit.rb +6 -0
- data/lib/vines/log.rb +24 -0
- data/lib/vines/router.rb +70 -38
- data/lib/vines/stanza.rb +45 -8
- data/lib/vines/stanza/iq.rb +3 -3
- data/lib/vines/stanza/iq/disco_info.rb +5 -1
- data/lib/vines/stanza/iq/disco_items.rb +3 -0
- data/lib/vines/stanza/iq/private_storage.rb +9 -5
- data/lib/vines/stanza/iq/roster.rb +11 -12
- data/lib/vines/stanza/iq/vcard.rb +4 -4
- data/lib/vines/stanza/iq/version.rb +25 -0
- data/lib/vines/stanza/message.rb +4 -5
- data/lib/vines/stanza/presence.rb +20 -18
- data/lib/vines/stanza/presence/probe.rb +3 -4
- data/lib/vines/stanza/presence/subscribe.rb +4 -3
- data/lib/vines/stanza/presence/subscribed.rb +6 -5
- data/lib/vines/stanza/presence/unsubscribe.rb +4 -4
- data/lib/vines/stanza/presence/unsubscribed.rb +4 -3
- data/lib/vines/storage/couchdb.rb +3 -3
- data/lib/vines/storage/ldap.rb +19 -8
- data/lib/vines/storage/local.rb +23 -12
- data/lib/vines/storage/redis.rb +3 -3
- data/lib/vines/storage/sql.rb +5 -5
- data/lib/vines/stream.rb +40 -6
- data/lib/vines/stream/client.rb +5 -6
- data/lib/vines/stream/client/auth.rb +3 -2
- data/lib/vines/stream/client/bind.rb +2 -2
- data/lib/vines/stream/client/bind_restart.rb +1 -2
- data/lib/vines/stream/client/ready.rb +2 -0
- data/lib/vines/stream/client/session.rb +13 -4
- data/lib/vines/stream/client/tls.rb +1 -0
- data/lib/vines/stream/component.rb +6 -5
- data/lib/vines/stream/component/ready.rb +5 -6
- data/lib/vines/stream/http.rb +10 -4
- data/lib/vines/stream/http/request.rb +23 -2
- data/lib/vines/stream/server.rb +13 -11
- data/lib/vines/stream/server/outbound/auth_result.rb +1 -0
- data/lib/vines/stream/server/outbound/tls_result.rb +1 -0
- data/lib/vines/stream/server/ready.rb +2 -2
- data/lib/vines/user.rb +2 -1
- data/lib/vines/version.rb +1 -1
- data/test/config/host_test.rb +292 -0
- data/test/config_test.rb +244 -103
- data/test/contact_test.rb +7 -1
- data/test/jid_test.rb +48 -0
- data/test/router_test.rb +16 -47
- data/test/stanza/iq/disco_info_test.rb +76 -0
- data/test/stanza/iq/disco_items_test.rb +47 -0
- data/test/stanza/iq/private_storage_test.rb +33 -10
- data/test/stanza/iq/roster_test.rb +15 -5
- data/test/stanza/iq/vcard_test.rb +8 -25
- data/test/stanza/iq/version_test.rb +62 -0
- data/test/stanza/iq_test.rb +13 -10
- data/test/stanza/message_test.rb +16 -24
- data/test/stanza/presence/probe_test.rb +52 -0
- data/test/stanza/presence/subscribe_test.rb +1 -5
- data/test/stanza_test.rb +77 -0
- data/test/stream/client/auth_test.rb +1 -0
- data/test/stream/client/ready_test.rb +2 -0
- data/test/stream/client/session_test.rb +7 -2
- data/test/stream/component/ready_test.rb +19 -36
- data/test/stream/http/request_test.rb +22 -2
- data/test/stream/server/ready_test.rb +14 -21
- data/web/404.html +9 -3
- data/web/chat/index.html +2 -2
- data/web/chat/javascripts/app.js +1 -1
- data/web/chat/stylesheets/chat.css +4 -9
- data/web/lib/coffeescripts/layout.coffee +2 -2
- data/web/{chat → lib}/coffeescripts/logout.coffee +0 -0
- data/web/lib/coffeescripts/notification.coffee +14 -0
- data/web/lib/coffeescripts/session.coffee +28 -24
- data/web/lib/coffeescripts/transfer.coffee +37 -34
- data/web/lib/javascripts/base.js +8 -8
- data/web/lib/javascripts/icons.js +3 -0
- data/web/lib/javascripts/jquery.js +4 -18
- data/web/lib/javascripts/layout.js +2 -2
- data/web/{chat → lib}/javascripts/logout.js +0 -0
- data/web/lib/javascripts/notification.js +26 -0
- data/web/lib/javascripts/session.js +20 -16
- data/web/lib/javascripts/transfer.js +45 -55
- data/web/lib/stylesheets/base.css +45 -9
- metadata +31 -15
data/test/config_test.rb
CHANGED
@@ -20,7 +20,7 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
20
20
|
dir '.'
|
21
21
|
end
|
22
22
|
end
|
23
|
-
host '
|
23
|
+
host 'WONDERLAND.LIT' do
|
24
24
|
storage 'fs' do
|
25
25
|
dir '.'
|
26
26
|
end
|
@@ -41,85 +41,6 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
def test_missing_storage
|
45
|
-
assert_raises(RuntimeError) do
|
46
|
-
Vines::Config.new do
|
47
|
-
host 'wonderland.lit' do
|
48
|
-
# missing storage
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_bad_storage
|
55
|
-
assert_raises(RuntimeError) do
|
56
|
-
Vines::Config.new do
|
57
|
-
host 'wonderland.lit' do
|
58
|
-
storage 'bogus' do
|
59
|
-
# no bogus storage implementation
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_duplicate_storage
|
67
|
-
assert_raises(RuntimeError) do
|
68
|
-
Vines::Config.new do
|
69
|
-
host 'wonderland.lit' do
|
70
|
-
storage('fs') { dir '.' }
|
71
|
-
storage('fs') { dir '.' }
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_good_storage_raises_no_errors
|
78
|
-
Vines::Config.new do
|
79
|
-
host 'wonderland.lit' do
|
80
|
-
storage 'fs' do
|
81
|
-
dir '.'
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_ldap_added_to_storage
|
88
|
-
config = Vines::Config.new do
|
89
|
-
host 'wonderland.lit' do
|
90
|
-
storage(:fs) { dir '.' }
|
91
|
-
# added after storage
|
92
|
-
ldap 'ldap.wonderland.lit', 1636 do
|
93
|
-
tls true
|
94
|
-
dn 'cn=Directory Manager'
|
95
|
-
password 'secr3t'
|
96
|
-
basedn 'dc=wonderland,dc=lit'
|
97
|
-
object_class 'person'
|
98
|
-
user_attr 'uid'
|
99
|
-
name_attr 'cn'
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
host 'verona.lit' do
|
104
|
-
ldap 'ldap.verona.lit', 1636 do
|
105
|
-
tls true
|
106
|
-
dn 'cn=Directory Manager'
|
107
|
-
password 'secr3t'
|
108
|
-
basedn 'dc=wonderland,dc=lit'
|
109
|
-
object_class 'person'
|
110
|
-
user_attr 'uid'
|
111
|
-
name_attr 'cn'
|
112
|
-
end
|
113
|
-
# added before storage
|
114
|
-
storage(:fs) { dir '.' }
|
115
|
-
end
|
116
|
-
end
|
117
|
-
%w[wonderland.lit verona.lit].each do |domain|
|
118
|
-
refute_nil config.vhosts[domain].ldap
|
119
|
-
assert config.vhosts[domain].ldap?
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
44
|
def test_configure
|
124
45
|
config = Vines::Config.configure do
|
125
46
|
host 'wonderland.lit' do
|
@@ -140,7 +61,8 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
140
61
|
end
|
141
62
|
assert_equal ['wonderland.lit'], config.vhosts.keys
|
142
63
|
assert config.vhost?('wonderland.lit')
|
143
|
-
|
64
|
+
refute config.vhost?('tea.wonderland.lit')
|
65
|
+
refute config.vhost?('bogus')
|
144
66
|
end
|
145
67
|
|
146
68
|
def test_port_lookup
|
@@ -205,9 +127,8 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
205
127
|
assert_equal 5222, port.port
|
206
128
|
assert_equal 131_072, port.max_stanza_size
|
207
129
|
assert_equal 5, port.max_resources_per_account
|
208
|
-
refute port.private_storage?
|
209
130
|
assert_equal Vines::Stream::Client, port.stream
|
210
|
-
assert_same config, port.config
|
131
|
+
assert_same config, port.config
|
211
132
|
assert_equal 1, config.ports.size
|
212
133
|
end
|
213
134
|
|
@@ -217,7 +138,6 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
217
138
|
storage(:fs) { dir '.' }
|
218
139
|
end
|
219
140
|
client '0.0.0.1', 42 do
|
220
|
-
private_storage true
|
221
141
|
max_stanza_size 60_000
|
222
142
|
max_resources_per_account 1
|
223
143
|
end
|
@@ -229,9 +149,8 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
229
149
|
assert_equal 42, port.port
|
230
150
|
assert_equal 60_000, port.max_stanza_size
|
231
151
|
assert_equal 1, port.max_resources_per_account
|
232
|
-
assert port.private_storage?
|
233
152
|
assert_equal Vines::Stream::Client, port.stream
|
234
|
-
assert_same config, port.config
|
153
|
+
assert_same config, port.config
|
235
154
|
assert_equal 1, config.ports.size
|
236
155
|
end
|
237
156
|
|
@@ -262,7 +181,7 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
262
181
|
assert_equal 5269, port.port
|
263
182
|
assert_equal 131_072, port.max_stanza_size
|
264
183
|
assert_equal Vines::Stream::Server, port.stream
|
265
|
-
assert_same config, port.config
|
184
|
+
assert_same config, port.config
|
266
185
|
assert_equal 1, config.ports.size
|
267
186
|
end
|
268
187
|
|
@@ -286,7 +205,7 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
286
205
|
assert_equal 42, port.port
|
287
206
|
assert_equal 60_000, port.max_stanza_size
|
288
207
|
assert_equal Vines::Stream::Server, port.stream
|
289
|
-
assert_same config, port.config
|
208
|
+
assert_same config, port.config
|
290
209
|
assert_equal 1, config.ports.size
|
291
210
|
end
|
292
211
|
|
@@ -306,9 +225,8 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
306
225
|
assert_equal 5, port.max_resources_per_account
|
307
226
|
assert_equal File.join(Dir.pwd, 'web'), port.root
|
308
227
|
assert_equal '/xmpp', port.bind
|
309
|
-
refute port.private_storage?
|
310
228
|
assert_equal Vines::Stream::Http, port.stream
|
311
|
-
assert_same config, port.config
|
229
|
+
assert_same config, port.config
|
312
230
|
assert_equal 1, config.ports.size
|
313
231
|
end
|
314
232
|
|
@@ -319,7 +237,6 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
319
237
|
end
|
320
238
|
http '0.0.0.1', 42 do
|
321
239
|
bind '/custom'
|
322
|
-
private_storage true
|
323
240
|
max_stanza_size 60_000
|
324
241
|
max_resources_per_account 1
|
325
242
|
root '/var/www/html'
|
@@ -334,9 +251,8 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
334
251
|
assert_equal 1, port.max_resources_per_account
|
335
252
|
assert_equal '/var/www/html', port.root
|
336
253
|
assert_equal '/custom', port.bind
|
337
|
-
assert port.private_storage?
|
338
254
|
assert_equal Vines::Stream::Http, port.stream
|
339
|
-
assert_same config, port.config
|
255
|
+
assert_same config, port.config
|
340
256
|
assert_equal 1, config.ports.size
|
341
257
|
end
|
342
258
|
|
@@ -349,14 +265,12 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
349
265
|
end
|
350
266
|
port = config.ports.first
|
351
267
|
refute_nil port
|
352
|
-
assert port.components.empty?
|
353
|
-
assert_nil port.password('bogus')
|
354
268
|
assert_equal Vines::Config::ComponentPort, port.class
|
355
269
|
assert_equal '0.0.0.0', port.host
|
356
270
|
assert_equal 5347, port.port
|
357
271
|
assert_equal 131_072, port.max_stanza_size
|
358
272
|
assert_equal Vines::Stream::Component, port.stream
|
359
|
-
assert_same config, port.config
|
273
|
+
assert_same config, port.config
|
360
274
|
assert_equal 1, config.ports.size
|
361
275
|
end
|
362
276
|
|
@@ -367,22 +281,16 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
367
281
|
end
|
368
282
|
component '0.0.0.1', 42 do
|
369
283
|
max_stanza_size 60_000
|
370
|
-
components 'tea.wonderland.lit' => 'secr3t',
|
371
|
-
'cake.wonderland.lit' => 'passw0rd'
|
372
284
|
end
|
373
285
|
end
|
374
286
|
port = config.ports.first
|
375
287
|
refute_nil port
|
376
|
-
assert_equal 2, port.components.size
|
377
|
-
assert_equal 'secr3t', port.password('tea.wonderland.lit')
|
378
|
-
assert_equal 'passw0rd', port.password('cake.wonderland.lit')
|
379
|
-
assert_nil port.password('bogus')
|
380
288
|
assert_equal Vines::Config::ComponentPort, port.class
|
381
289
|
assert_equal '0.0.0.1', port.host
|
382
290
|
assert_equal 42, port.port
|
383
291
|
assert_equal 60_000, port.max_stanza_size
|
384
292
|
assert_equal Vines::Stream::Component, port.stream
|
385
|
-
assert_same config, port.config
|
293
|
+
assert_same config, port.config
|
386
294
|
assert_equal 1, config.ports.size
|
387
295
|
end
|
388
296
|
|
@@ -406,4 +314,237 @@ class ConfigTest < MiniTest::Unit::TestCase
|
|
406
314
|
end
|
407
315
|
assert_equal Logger::ERROR, Class.new.extend(Vines::Log).log.level
|
408
316
|
end
|
317
|
+
|
318
|
+
def test_cross_domain_messages
|
319
|
+
config = Vines::Config.new do
|
320
|
+
host 'wonderland.lit' do
|
321
|
+
storage(:fs) { dir '.' }
|
322
|
+
end
|
323
|
+
host 'verona.lit' do
|
324
|
+
cross_domain_messages true
|
325
|
+
storage(:fs) { dir '.' }
|
326
|
+
end
|
327
|
+
end
|
328
|
+
refute config.vhosts['wonderland.lit'].cross_domain_messages?
|
329
|
+
assert config.vhosts['verona.lit'].cross_domain_messages?
|
330
|
+
end
|
331
|
+
|
332
|
+
def test_local_jid?
|
333
|
+
config = Vines::Config.new do
|
334
|
+
host 'wonderland.lit', 'verona.lit' do
|
335
|
+
storage(:fs) { dir '.' }
|
336
|
+
end
|
337
|
+
end
|
338
|
+
refute config.local_jid?(nil)
|
339
|
+
refute config.local_jid?('alice@wonderland.lit', nil)
|
340
|
+
assert config.local_jid?('alice@wonderland.lit')
|
341
|
+
assert config.local_jid?('alice@wonderland.lit', 'romeo@verona.lit')
|
342
|
+
refute config.local_jid?('alice@wonderland.lit', 'romeo@bogus.lit')
|
343
|
+
refute config.local_jid?('alice@tea.wonderland.lit')
|
344
|
+
refute config.local_jid?('alice@bogus.lit')
|
345
|
+
end
|
346
|
+
|
347
|
+
def test_missing_addresses_not_allowed
|
348
|
+
config = Vines::Config.new do
|
349
|
+
host 'wonderland.lit', 'verona.lit' do
|
350
|
+
storage(:fs) { dir '.' }
|
351
|
+
end
|
352
|
+
end
|
353
|
+
refute config.allowed?(nil, nil)
|
354
|
+
refute config.allowed?('', '')
|
355
|
+
end
|
356
|
+
|
357
|
+
def test_same_domain_allowed
|
358
|
+
config = Vines::Config.new do
|
359
|
+
host 'wonderland.lit', 'verona.lit' do
|
360
|
+
storage(:fs) { dir '.' }
|
361
|
+
end
|
362
|
+
end
|
363
|
+
alice = Vines::JID.new('alice@wonderland.lit')
|
364
|
+
hatter = Vines::JID.new('hatter@wonderland.lit')
|
365
|
+
assert config.allowed?(alice, hatter)
|
366
|
+
end
|
367
|
+
|
368
|
+
def test_both_vhosts_with_cross_domain_allowed
|
369
|
+
config = Vines::Config.new do
|
370
|
+
host 'wonderland.lit', 'verona.lit' do
|
371
|
+
cross_domain_messages true
|
372
|
+
storage(:fs) { dir '.' }
|
373
|
+
end
|
374
|
+
end
|
375
|
+
alice = Vines::JID.new('alice@wonderland.lit')
|
376
|
+
romeo = Vines::JID.new('romeo@verona.lit')
|
377
|
+
assert config.allowed?(alice, romeo)
|
378
|
+
assert config.allowed?(romeo, alice)
|
379
|
+
end
|
380
|
+
|
381
|
+
def test_one_vhost_with_cross_domain_not_allowed
|
382
|
+
config = Vines::Config.new do
|
383
|
+
host 'wonderland.lit' do
|
384
|
+
cross_domain_messages true
|
385
|
+
storage(:fs) { dir '.' }
|
386
|
+
end
|
387
|
+
host 'verona.lit' do
|
388
|
+
cross_domain_messages false
|
389
|
+
storage(:fs) { dir '.' }
|
390
|
+
end
|
391
|
+
end
|
392
|
+
alice = Vines::JID.new('alice@wonderland.lit')
|
393
|
+
romeo = Vines::JID.new('romeo@verona.lit')
|
394
|
+
refute config.allowed?(alice, romeo)
|
395
|
+
refute config.allowed?(romeo, alice)
|
396
|
+
end
|
397
|
+
|
398
|
+
def test_same_domain_component_to_component_allowed
|
399
|
+
config = Vines::Config.new do
|
400
|
+
host 'wonderland.lit' do
|
401
|
+
cross_domain_messages false
|
402
|
+
storage(:fs) { dir '.' }
|
403
|
+
components 'tea' => 'secr3t', cake: 'passw0rd'
|
404
|
+
end
|
405
|
+
end
|
406
|
+
alice = Vines::JID.new('alice@tea.wonderland.lit')
|
407
|
+
hatter = Vines::JID.new('hatter@cake.wonderland.lit')
|
408
|
+
assert config.allowed?(alice, alice)
|
409
|
+
assert config.allowed?(alice, hatter)
|
410
|
+
assert config.allowed?(hatter, alice)
|
411
|
+
end
|
412
|
+
|
413
|
+
def test_cross_domain_component_to_component_allowed
|
414
|
+
config = Vines::Config.new do
|
415
|
+
host 'wonderland.lit', 'verona.lit' do
|
416
|
+
cross_domain_messages true
|
417
|
+
storage(:fs) { dir '.' }
|
418
|
+
components 'tea' => 'secr3t', cake: 'passw0rd'
|
419
|
+
end
|
420
|
+
end
|
421
|
+
alice = Vines::JID.new('alice@tea.wonderland.lit')
|
422
|
+
romeo = Vines::JID.new('romeo@cake.verona.lit')
|
423
|
+
assert config.allowed?(alice, romeo)
|
424
|
+
assert config.allowed?(romeo, alice)
|
425
|
+
end
|
426
|
+
|
427
|
+
def test_cross_domain_component_to_component_not_allowed
|
428
|
+
config = Vines::Config.new do
|
429
|
+
host 'wonderland.lit' do
|
430
|
+
cross_domain_messages true
|
431
|
+
storage(:fs) { dir '.' }
|
432
|
+
components 'tea' => 'secr3t', cake: 'passw0rd'
|
433
|
+
end
|
434
|
+
end
|
435
|
+
config = Vines::Config.new do
|
436
|
+
host 'verona.lit' do
|
437
|
+
cross_domain_messages false
|
438
|
+
storage(:fs) { dir '.' }
|
439
|
+
components 'party' => 'secr3t'
|
440
|
+
end
|
441
|
+
end
|
442
|
+
alice = Vines::JID.new('alice@tea.wonderland.lit')
|
443
|
+
romeo = Vines::JID.new('romeo@party.verona.lit')
|
444
|
+
refute config.allowed?(alice, romeo)
|
445
|
+
refute config.allowed?(romeo, alice)
|
446
|
+
end
|
447
|
+
|
448
|
+
def test_same_domain_user_to_component_allowed
|
449
|
+
config = Vines::Config.new do
|
450
|
+
host 'wonderland.lit' do
|
451
|
+
cross_domain_messages false
|
452
|
+
storage(:fs) { dir '.' }
|
453
|
+
components 'tea' => 'secr3t', cake: 'passw0rd'
|
454
|
+
end
|
455
|
+
end
|
456
|
+
alice = Vines::JID.new('alice@wonderland.lit')
|
457
|
+
comp = Vines::JID.new('hatter@cake.wonderland.lit')
|
458
|
+
assert config.allowed?(alice, comp)
|
459
|
+
assert config.allowed?(comp, alice)
|
460
|
+
end
|
461
|
+
|
462
|
+
def test_cross_domain_user_to_component_allowed
|
463
|
+
config = Vines::Config.new do
|
464
|
+
host 'wonderland.lit', 'verona.lit' do
|
465
|
+
cross_domain_messages true
|
466
|
+
storage(:fs) { dir '.' }
|
467
|
+
components 'tea' => 'secr3t', cake: 'passw0rd'
|
468
|
+
end
|
469
|
+
end
|
470
|
+
alice = Vines::JID.new('alice@tea.wonderland.lit')
|
471
|
+
romeo = Vines::JID.new('romeo@verona.lit')
|
472
|
+
assert config.allowed?(alice, romeo)
|
473
|
+
assert config.allowed?(romeo, alice)
|
474
|
+
end
|
475
|
+
|
476
|
+
def test_cross_domain_user_to_component_not_allowed
|
477
|
+
config = Vines::Config.new do
|
478
|
+
host 'wonderland.lit' do
|
479
|
+
cross_domain_messages true
|
480
|
+
storage(:fs) { dir '.' }
|
481
|
+
components 'tea' => 'secr3t', cake: 'passw0rd'
|
482
|
+
end
|
483
|
+
end
|
484
|
+
config = Vines::Config.new do
|
485
|
+
host 'verona.lit' do
|
486
|
+
cross_domain_messages false
|
487
|
+
storage(:fs) { dir '.' }
|
488
|
+
end
|
489
|
+
end
|
490
|
+
alice = Vines::JID.new('alice@tea.wonderland.lit')
|
491
|
+
romeo = Vines::JID.new('romeo@verona.lit')
|
492
|
+
refute config.allowed?(alice, romeo)
|
493
|
+
refute config.allowed?(romeo, alice)
|
494
|
+
end
|
495
|
+
|
496
|
+
def test_remote_user_to_component_allowed
|
497
|
+
config = Vines::Config.new do
|
498
|
+
host 'wonderland.lit' do
|
499
|
+
cross_domain_messages true
|
500
|
+
storage(:fs) { dir '.' }
|
501
|
+
components 'tea' => 'secr3t', cake: 'passw0rd'
|
502
|
+
end
|
503
|
+
host 'verona.lit' do
|
504
|
+
cross_domain_messages false
|
505
|
+
storage(:fs) { dir '.' }
|
506
|
+
components 'tea' => 'secr3t', cake: 'passw0rd'
|
507
|
+
end
|
508
|
+
end
|
509
|
+
alice = Vines::JID.new('alice@tea.wonderland.lit')
|
510
|
+
romeo = Vines::JID.new('romeo@tea.verona.lit')
|
511
|
+
hamlet = Vines::JID.new('hamlet@denmark.lit')
|
512
|
+
assert config.allowed?(alice, hamlet)
|
513
|
+
assert config.allowed?(hamlet, alice)
|
514
|
+
refute config.allowed?(romeo, hamlet)
|
515
|
+
refute config.allowed?(hamlet, romeo)
|
516
|
+
end
|
517
|
+
|
518
|
+
def test_remote_user_to_local_user_allowed
|
519
|
+
config = Vines::Config.new do
|
520
|
+
host 'wonderland.lit' do
|
521
|
+
cross_domain_messages true
|
522
|
+
storage(:fs) { dir '.' }
|
523
|
+
end
|
524
|
+
host 'verona.lit' do
|
525
|
+
cross_domain_messages false
|
526
|
+
storage(:fs) { dir '.' }
|
527
|
+
end
|
528
|
+
end
|
529
|
+
alice = Vines::JID.new('alice@wonderland.lit')
|
530
|
+
romeo = Vines::JID.new('romeo@verona.lit')
|
531
|
+
hamlet = Vines::JID.new('hamlet@denmark.lit')
|
532
|
+
assert config.allowed?(alice, hamlet)
|
533
|
+
assert config.allowed?(hamlet, alice)
|
534
|
+
refute config.allowed?(romeo, hamlet)
|
535
|
+
refute config.allowed?(hamlet, romeo)
|
536
|
+
end
|
537
|
+
|
538
|
+
def test_remote_user_to_remote_user_not_allowed
|
539
|
+
config = Vines::Config.new do
|
540
|
+
host 'wonderland.lit' do
|
541
|
+
cross_domain_messages true
|
542
|
+
storage(:fs) { dir '.' }
|
543
|
+
end
|
544
|
+
end
|
545
|
+
romeo = Vines::JID.new('romeo@verona.lit')
|
546
|
+
hamlet = Vines::JID.new('hamlet@denmark.lit')
|
547
|
+
refute config.allowed?(romeo, hamlet)
|
548
|
+
refute config.allowed?(hamlet, romeo)
|
549
|
+
end
|
409
550
|
end
|