jubjub 0.0.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.
- data/.infinity_test +35 -0
- data/.rspec +2 -0
- data/LICENSE +19 -0
- data/README.mdown +78 -0
- data/lib/jubjub/connection/xmpp_gateway/helper.rb +17 -0
- data/lib/jubjub/connection/xmpp_gateway/muc.rb +353 -0
- data/lib/jubjub/connection/xmpp_gateway.rb +47 -0
- data/lib/jubjub/errors.rb +7 -0
- data/lib/jubjub/jid.rb +33 -0
- data/lib/jubjub/muc.rb +143 -0
- data/lib/jubjub/user.rb +60 -0
- data/lib/jubjub.rb +1 -0
- data/spec/connection/xmpp_gateway_spec.rb +136 -0
- data/spec/fixtures/vcr_cassettes/muc_configuration.yml +134 -0
- data/spec/fixtures/vcr_cassettes/muc_create.yml +68 -0
- data/spec/fixtures/vcr_cassettes/muc_create_with_configuration.yml +68 -0
- data/spec/fixtures/vcr_cassettes/muc_destroy.yml +68 -0
- data/spec/fixtures/vcr_cassettes/muc_list.yml +115 -0
- data/spec/mixins/user_spec.rb +137 -0
- data/spec/models/jid_spec.rb +123 -0
- data/spec/models/muc_collection_spec.rb +71 -0
- data/spec/models/muc_configuration_spec.rb +459 -0
- data/spec/models/muc_spec.rb +57 -0
- data/spec/spec_helper.rb +17 -0
- metadata +176 -0
data/lib/jubjub/muc.rb
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
module Jubjub
|
2
|
+
class Muc
|
3
|
+
|
4
|
+
attr_reader :jid, :name
|
5
|
+
|
6
|
+
def initialize(jid, name = nil, connection = nil)
|
7
|
+
@jid = Jubjub::Jid.new(jid)
|
8
|
+
@name = name
|
9
|
+
@connection = connection
|
10
|
+
end
|
11
|
+
|
12
|
+
def destroy
|
13
|
+
@connection.muc.destroy(@jid)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Hide the connection details and show jid as string for compactness
|
17
|
+
def inspect
|
18
|
+
obj_id = "%x" % (object_id << 1)
|
19
|
+
"#<#{self.class}:0x#{obj_id} @jid=\"#{@jid}\" @name=#{@name.inspect}>"
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
# Uses proxy pattern for syntax sugar
|
25
|
+
# and delaying expensive operations until
|
26
|
+
# required
|
27
|
+
class MucCollection
|
28
|
+
|
29
|
+
attr_reader :jid
|
30
|
+
|
31
|
+
def initialize(jid, connection)
|
32
|
+
@jid = Jubjub::Jid.new(jid)
|
33
|
+
@connection = connection
|
34
|
+
end
|
35
|
+
|
36
|
+
def create(node, nick = nil, &block)
|
37
|
+
full_jid = Jubjub::Jid.new node, @jid.domain, nick || @connection.jid.node
|
38
|
+
|
39
|
+
if block_given?
|
40
|
+
# Reserved room
|
41
|
+
config = @connection.muc.configuration full_jid
|
42
|
+
yield config
|
43
|
+
@connection.muc.create full_jid, config
|
44
|
+
else
|
45
|
+
# Instant room
|
46
|
+
result = @connection.muc.create full_jid
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
# Hint that methods are actually applied to list using method_missing
|
52
|
+
def inspect
|
53
|
+
list.inspect
|
54
|
+
end
|
55
|
+
|
56
|
+
protected
|
57
|
+
|
58
|
+
def method_missing(name, *args, &block)
|
59
|
+
list.send(name, *args, &block)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def list
|
65
|
+
@list ||= @connection.muc.list @jid
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
class MucConfiguration
|
71
|
+
|
72
|
+
attr_reader :fields
|
73
|
+
|
74
|
+
def initialize(config)
|
75
|
+
check_config config
|
76
|
+
|
77
|
+
@fields = config
|
78
|
+
end
|
79
|
+
|
80
|
+
def [](arg)
|
81
|
+
if fields.has_key? arg
|
82
|
+
case fields[arg][:type]
|
83
|
+
when 'boolean'
|
84
|
+
fields[arg][:value] == '1' || fields[arg][:value] == 'true' || fields[arg][:value] == true ? true : false
|
85
|
+
when 'jid-multi'
|
86
|
+
fields[arg][:value].map{|j| Jubjub::Jid.new j }
|
87
|
+
when 'jid-single'
|
88
|
+
Jubjub::Jid.new fields[arg][:value]
|
89
|
+
else
|
90
|
+
fields[arg][:value]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def []=(arg,value)
|
96
|
+
if fields.has_key? arg
|
97
|
+
check_options arg, value if fields[arg].has_key?(:options)
|
98
|
+
value = Array[value].flatten if fields[arg][:type].match /-multi$/
|
99
|
+
fields[arg][:value] = value
|
100
|
+
else
|
101
|
+
raise Jubjub::ArgumentError.new("#{arg} is not a valid field")
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def settings
|
106
|
+
Hash[fields.keys.map{|field|
|
107
|
+
[field, Array[self[field]].flatten]
|
108
|
+
}]
|
109
|
+
end
|
110
|
+
|
111
|
+
def ==(thing)
|
112
|
+
thing.is_a?( self.class ) && thing.fields == self.fields
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def check_options(name, value)
|
118
|
+
valid_options = fields[name][:options].map{|o| o[:value].to_s }
|
119
|
+
invalid_options = Array[value].flatten - valid_options
|
120
|
+
raise Jubjub::ArgumentError.new(
|
121
|
+
"#{invalid_options.join(', ')} is not an accepted value please choose from #{valid_options.join(', ')}"
|
122
|
+
) if invalid_options.any?
|
123
|
+
end
|
124
|
+
|
125
|
+
def check_config(config)
|
126
|
+
required = [:type]
|
127
|
+
understood = required + [:label, :options, :value]
|
128
|
+
|
129
|
+
raise Jubjub::ArgumentError.new("please initialize with a hash of the format { 'foo' => {:type => 'boolean', :value => false, :label => 'Fooey'} }") unless config.is_a? Hash
|
130
|
+
|
131
|
+
config.each do |name,argument|
|
132
|
+
required.each{|r| raise Jubjub::ArgumentError.new(":#{r} is missing for #{name}") unless argument.keys.include? r }
|
133
|
+
|
134
|
+
mystery_arguments = (argument.keys - understood)
|
135
|
+
raise Jubjub::ArgumentError.new(
|
136
|
+
":#{mystery_arguments.join(', :')} is not a recognised option for #{name}"
|
137
|
+
) if mystery_arguments.any?
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
data/lib/jubjub/user.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'jubjub/errors'
|
2
|
+
require 'jubjub/jid'
|
3
|
+
require 'jubjub/connection/xmpp_gateway'
|
4
|
+
|
5
|
+
module Jubjub
|
6
|
+
|
7
|
+
module User
|
8
|
+
|
9
|
+
def self.included base
|
10
|
+
base.extend ClassMethods
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
def jubjub_client options = {}
|
15
|
+
# Setup defaults
|
16
|
+
default_connection_settings = {
|
17
|
+
:host => '127.0.0.1',
|
18
|
+
:port => '8000'
|
19
|
+
}.merge options[:connection_settings] || {}
|
20
|
+
|
21
|
+
[:jid, :password].each do |key|
|
22
|
+
raise Jubjub::ArgumentError.new("missing :#{key} option") unless options.has_key? key
|
23
|
+
end
|
24
|
+
|
25
|
+
define_method "jubjub_jid" do
|
26
|
+
Jubjub::Jid.new(send(options[:jid]))
|
27
|
+
end
|
28
|
+
|
29
|
+
define_method "jubjub_password" do
|
30
|
+
send(options[:password])
|
31
|
+
end
|
32
|
+
|
33
|
+
define_method "jubjub_connection_settings" do
|
34
|
+
default_connection_settings
|
35
|
+
end
|
36
|
+
|
37
|
+
include InstanceMethods
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
module InstanceMethods
|
42
|
+
def jubjub_connection
|
43
|
+
@jubjub_connection ||= Jubjub::Connection::XmppGateway.new(jubjub_jid, jubjub_password, jubjub_connection_settings)
|
44
|
+
end
|
45
|
+
|
46
|
+
def authenticated?
|
47
|
+
jubjub_connection.authenticated?
|
48
|
+
end
|
49
|
+
|
50
|
+
# List muc rooms
|
51
|
+
# if no jid is specified will default to 'connection.JID_DOMAIN'
|
52
|
+
def mucs(jid = nil)
|
53
|
+
jid ||= "conference.#{jubjub_jid.domain}"
|
54
|
+
Jubjub::MucCollection.new(jid, jubjub_connection)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
data/lib/jubjub.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'jubjub/user'
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jubjub::Connection::XmppGateway do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@connection = Jubjub::Connection::XmppGateway.new('theozaurus@theo-template.local','secret', {:host => '127.0.0.1', :port => '8000'})
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "muc" do
|
10
|
+
|
11
|
+
describe "create" do
|
12
|
+
|
13
|
+
use_vcr_cassette 'muc create', :record => :new_episodes
|
14
|
+
|
15
|
+
it "return a Jubjub::Muc" do
|
16
|
+
@room = @connection.muc.create( Jubjub::Jid.new 'room@conference.theo-template.local/nick' )
|
17
|
+
@room.should be_a_kind_of Jubjub::Muc
|
18
|
+
@room.jid.should == Jubjub::Jid.new( 'room@conference.theo-template.local' )
|
19
|
+
end
|
20
|
+
|
21
|
+
after do
|
22
|
+
@room.destroy
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "create with configuration" do
|
28
|
+
|
29
|
+
use_vcr_cassette 'muc create with configuration', :record => :new_episodes
|
30
|
+
|
31
|
+
it "return a Jubjub::Muc" do
|
32
|
+
@config = Jubjub::MucConfiguration.new("allow_query_users" => { :type => "boolean", :value => "1", :label => "Allow users to query other users" })
|
33
|
+
|
34
|
+
@room = @connection.muc.create( Jubjub::Jid.new( 'room@conference.theo-template.local/nick' ), @config )
|
35
|
+
@room.should be_a_kind_of Jubjub::Muc
|
36
|
+
@room.jid.should == Jubjub::Jid.new( 'room@conference.theo-template.local' )
|
37
|
+
end
|
38
|
+
|
39
|
+
after do
|
40
|
+
@room.destroy
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "configuration" do
|
46
|
+
|
47
|
+
use_vcr_cassette 'muc configuration', :record => :new_episodes
|
48
|
+
|
49
|
+
it "return a Jubjub::MucConfiguration" do
|
50
|
+
config = @connection.muc.configuration( Jubjub::Jid.new 'room@conference.theo-template.local/nick' )
|
51
|
+
|
52
|
+
expected_config = {
|
53
|
+
"allow_query_users" => { :type => "boolean", :value => "1", :label => "Allow users to query other users" },
|
54
|
+
"allow_private_messages" => { :type => "boolean", :value => "1", :label => "Allow users to send private messages" },
|
55
|
+
"muc#roomconfig_publicroom" => { :type => "boolean", :value => "1", :label => "Make room public searchable" },
|
56
|
+
"muc#roomconfig_allowinvites" => { :type => "boolean", :value => "0", :label => "Allow users to send invites" },
|
57
|
+
"muc#roomconfig_allowvisitornickchange" => { :type => "boolean", :value => "1", :label => "Allow visitors to change nickname" },
|
58
|
+
"muc#roomconfig_membersonly" => { :type => "boolean", :value => "0", :label => "Make room members-only" },
|
59
|
+
"muc#roomconfig_persistentroom" => { :type => "boolean", :value => "0", :label => "Make room persistent" },
|
60
|
+
"members_by_default" => { :type => "boolean", :value => "1", :label => "Default users as participants" },
|
61
|
+
"muc#roomconfig_passwordprotectedroom" => { :type => "boolean", :value => "0", :label => "Make room password protected" },
|
62
|
+
"public_list" => { :type => "boolean", :value => "1", :label => "Make participants list public" },
|
63
|
+
"muc#roomconfig_changesubject" => { :type => "boolean", :value => "1", :label => "Allow users to change the subject" },
|
64
|
+
"muc#roomconfig_moderatedroom" => { :type => "boolean", :value => "1", :label => "Make room moderated" },
|
65
|
+
"muc#roomconfig_allowvisitorstatus" => { :type => "boolean", :value => "1", :label => "Allow visitors to send status text in presence updates" },
|
66
|
+
"muc#roomconfig_roomdesc" => { :type => "text-single", :value => "", :label => "Room description" },
|
67
|
+
"muc#roomconfig_roomname" => { :type => "text-single", :value => "", :label => "Room title" },
|
68
|
+
"muc#roomconfig_roomsecret" => { :type => "text-private", :value => "", :label => "Password" },
|
69
|
+
"FORM_TYPE" => { :type => "hidden", :value => "http://jabber.org/protocol/muc#roomconfig", :label => nil },
|
70
|
+
"muc#roomconfig_whois" => {
|
71
|
+
:type => "list-single",
|
72
|
+
:value => "moderators",
|
73
|
+
:label => "Present real Jabber IDs to",
|
74
|
+
:options => [
|
75
|
+
{ :value => "moderators", :label => "moderators only" },
|
76
|
+
{ :value => "anyone", :label => "anyone" }]},
|
77
|
+
"muc#roomconfig_maxusers" => {
|
78
|
+
:type => "list-single",
|
79
|
+
:value => "200",
|
80
|
+
:label => "Maximum Number of Occupants",
|
81
|
+
:options => [
|
82
|
+
{ :value => "5", :label => "5" },
|
83
|
+
{ :value => "10", :label => "10" },
|
84
|
+
{ :value => "20", :label => "20" },
|
85
|
+
{ :value => "30", :label => "30" },
|
86
|
+
{ :value => "50", :label => "50" },
|
87
|
+
{ :value => "100", :label => "100" },
|
88
|
+
{ :value => "200", :label => "200" }]}
|
89
|
+
}
|
90
|
+
|
91
|
+
config.should == Jubjub::MucConfiguration.new(expected_config)
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "list" do
|
97
|
+
|
98
|
+
use_vcr_cassette 'muc list', :record => :new_episodes
|
99
|
+
|
100
|
+
before do
|
101
|
+
@connection.muc.create Jubjub::Jid.new( 'test_1@conference.theo-template.local/nick' )
|
102
|
+
@connection.muc.create Jubjub::Jid.new( 'test_2@conference.theo-template.local/nick' )
|
103
|
+
end
|
104
|
+
|
105
|
+
it "return an array of Jubjub::Muc" do
|
106
|
+
list = @connection.muc.list( Jubjub::Jid.new 'conference.theo-template.local' )
|
107
|
+
list.should be_a_kind_of Array
|
108
|
+
|
109
|
+
list.size.should eql(2)
|
110
|
+
list[0].should be_a_kind_of Jubjub::Muc
|
111
|
+
list[0].jid.should == Jubjub::Jid.new( 'test_1@conference.theo-template.local' )
|
112
|
+
list[1].should be_a_kind_of Jubjub::Muc
|
113
|
+
list[1].jid.should == Jubjub::Jid.new( 'test_2@conference.theo-template.local' )
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "destroy" do
|
119
|
+
|
120
|
+
use_vcr_cassette 'muc destroy', :record => :new_episodes
|
121
|
+
|
122
|
+
before do
|
123
|
+
@jid = Jubjub::Jid.new 'extra@conference.theo-template.local'
|
124
|
+
@full_jid = Jubjub::Jid.new 'extra@conference.theo-template.local/nick'
|
125
|
+
@connection.muc.create @full_jid
|
126
|
+
end
|
127
|
+
|
128
|
+
it "return true" do
|
129
|
+
@connection.muc.destroy( @jid ).should be_true
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :post
|
5
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
6
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3cpresence%20to%3d%22room%40conference.theo-template.local%2fnick%22%3e%0a%20%20%3cx%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%22%2f%3e%0a%3c%2fpresence%3e%0a
|
7
|
+
headers:
|
8
|
+
content-type:
|
9
|
+
- application/x-www-form-urlencoded
|
10
|
+
response: !ruby/struct:VCR::Response
|
11
|
+
status: !ruby/struct:VCR::ResponseStatus
|
12
|
+
code: 200
|
13
|
+
message: ...
|
14
|
+
headers:
|
15
|
+
content-type:
|
16
|
+
- application/xml
|
17
|
+
content-length:
|
18
|
+
- "40"
|
19
|
+
body: |
|
20
|
+
#<EventMachine::Timer:0x00000100b406f8>
|
21
|
+
|
22
|
+
http_version: "1.1"
|
23
|
+
- !ruby/struct:VCR::HTTPInteraction
|
24
|
+
request: !ruby/struct:VCR::Request
|
25
|
+
method: :post
|
26
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
27
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22get%22%20to%3d%22room%40conference.theo-template.local%22%3e%0a%20%20%3cquery%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%23owner%22%2f%3e%0a%3c%2fiq%3e%0a
|
28
|
+
headers:
|
29
|
+
content-type:
|
30
|
+
- application/x-www-form-urlencoded
|
31
|
+
response: !ruby/struct:VCR::Response
|
32
|
+
status: !ruby/struct:VCR::ResponseStatus
|
33
|
+
code: 200
|
34
|
+
message: ...
|
35
|
+
headers:
|
36
|
+
content-type:
|
37
|
+
- application/xml
|
38
|
+
content-length:
|
39
|
+
- "3713"
|
40
|
+
body: |
|
41
|
+
<iq type="result" id="blather0015" from="room@conference.theo-template.local" to="theozaurus@theo-template.local/302767734712965589199547">
|
42
|
+
<query xmlns="http://jabber.org/protocol/muc#owner">
|
43
|
+
<instructions>You need an x:data capable client to configure room</instructions>
|
44
|
+
<x xmlns="jabber:x:data" type="form">
|
45
|
+
<title>Configuration of room room@conference.theo-template.local</title>
|
46
|
+
<field type="hidden" var="FORM_TYPE">
|
47
|
+
<value>http://jabber.org/protocol/muc#roomconfig</value>
|
48
|
+
</field>
|
49
|
+
<field type="text-single" label="Room title" var="muc#roomconfig_roomname">
|
50
|
+
<value/>
|
51
|
+
</field>
|
52
|
+
<field type="text-single" label="Room description" var="muc#roomconfig_roomdesc">
|
53
|
+
<value/>
|
54
|
+
</field>
|
55
|
+
<field type="boolean" label="Make room persistent" var="muc#roomconfig_persistentroom">
|
56
|
+
<value>0</value>
|
57
|
+
</field>
|
58
|
+
<field type="boolean" label="Make room public searchable" var="muc#roomconfig_publicroom">
|
59
|
+
<value>1</value>
|
60
|
+
</field>
|
61
|
+
<field type="boolean" label="Make participants list public" var="public_list">
|
62
|
+
<value>1</value>
|
63
|
+
</field>
|
64
|
+
<field type="boolean" label="Make room password protected" var="muc#roomconfig_passwordprotectedroom">
|
65
|
+
<value>0</value>
|
66
|
+
</field>
|
67
|
+
<field type="text-private" label="Password" var="muc#roomconfig_roomsecret">
|
68
|
+
<value/>
|
69
|
+
</field>
|
70
|
+
<field type="list-single" label="Maximum Number of Occupants" var="muc#roomconfig_maxusers">
|
71
|
+
<value>200</value>
|
72
|
+
<option label="5">
|
73
|
+
<value>5</value>
|
74
|
+
</option>
|
75
|
+
<option label="10">
|
76
|
+
<value>10</value>
|
77
|
+
</option>
|
78
|
+
<option label="20">
|
79
|
+
<value>20</value>
|
80
|
+
</option>
|
81
|
+
<option label="30">
|
82
|
+
<value>30</value>
|
83
|
+
</option>
|
84
|
+
<option label="50">
|
85
|
+
<value>50</value>
|
86
|
+
</option>
|
87
|
+
<option label="100">
|
88
|
+
<value>100</value>
|
89
|
+
</option>
|
90
|
+
<option label="200">
|
91
|
+
<value>200</value>
|
92
|
+
</option>
|
93
|
+
</field>
|
94
|
+
<field type="list-single" label="Present real Jabber IDs to" var="muc#roomconfig_whois">
|
95
|
+
<value>moderators</value>
|
96
|
+
<option label="moderators only">
|
97
|
+
<value>moderators</value>
|
98
|
+
</option>
|
99
|
+
<option label="anyone">
|
100
|
+
<value>anyone</value>
|
101
|
+
</option>
|
102
|
+
</field>
|
103
|
+
<field type="boolean" label="Make room members-only" var="muc#roomconfig_membersonly">
|
104
|
+
<value>0</value>
|
105
|
+
</field>
|
106
|
+
<field type="boolean" label="Make room moderated" var="muc#roomconfig_moderatedroom">
|
107
|
+
<value>1</value>
|
108
|
+
</field>
|
109
|
+
<field type="boolean" label="Default users as participants" var="members_by_default">
|
110
|
+
<value>1</value>
|
111
|
+
</field>
|
112
|
+
<field type="boolean" label="Allow users to change the subject" var="muc#roomconfig_changesubject">
|
113
|
+
<value>1</value>
|
114
|
+
</field>
|
115
|
+
<field type="boolean" label="Allow users to send private messages" var="allow_private_messages">
|
116
|
+
<value>1</value>
|
117
|
+
</field>
|
118
|
+
<field type="boolean" label="Allow users to query other users" var="allow_query_users">
|
119
|
+
<value>1</value>
|
120
|
+
</field>
|
121
|
+
<field type="boolean" label="Allow users to send invites" var="muc#roomconfig_allowinvites">
|
122
|
+
<value>0</value>
|
123
|
+
</field>
|
124
|
+
<field type="boolean" label="Allow visitors to send status text in presence updates" var="muc#roomconfig_allowvisitorstatus">
|
125
|
+
<value>1</value>
|
126
|
+
</field>
|
127
|
+
<field type="boolean" label="Allow visitors to change nickname" var="muc#roomconfig_allowvisitornickchange">
|
128
|
+
<value>1</value>
|
129
|
+
</field>
|
130
|
+
</x>
|
131
|
+
</query>
|
132
|
+
</iq>
|
133
|
+
|
134
|
+
http_version: "1.1"
|
@@ -0,0 +1,68 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :post
|
5
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
6
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3cpresence%20to%3d%22room%40conference.theo-template.local%2fnick%22%3e%0a%20%20%3cx%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%22%2f%3e%0a%3c%2fpresence%3e%0a
|
7
|
+
headers:
|
8
|
+
content-type:
|
9
|
+
- application/x-www-form-urlencoded
|
10
|
+
response: !ruby/struct:VCR::Response
|
11
|
+
status: !ruby/struct:VCR::ResponseStatus
|
12
|
+
code: 200
|
13
|
+
message: ...
|
14
|
+
headers:
|
15
|
+
content-type:
|
16
|
+
- application/xml
|
17
|
+
content-length:
|
18
|
+
- "40"
|
19
|
+
body: |
|
20
|
+
#<EventMachine::Timer:0x0000010118fce8>
|
21
|
+
|
22
|
+
http_version: "1.1"
|
23
|
+
- !ruby/struct:VCR::HTTPInteraction
|
24
|
+
request: !ruby/struct:VCR::Request
|
25
|
+
method: :post
|
26
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
27
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22room%40conference.theo-template.local%22%3e%0a%20%20%3cquery%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%23owner%22%3e%0a%20%20%20%20%3cx%20xmlns%3d%22jabber%3ax%3adata%22%20type%3d%22submit%22%2f%3e%0a%20%20%3c%2fquery%3e%0a%3c%2fiq%3e%0a
|
28
|
+
headers:
|
29
|
+
content-type:
|
30
|
+
- application/x-www-form-urlencoded
|
31
|
+
response: !ruby/struct:VCR::Response
|
32
|
+
status: !ruby/struct:VCR::ResponseStatus
|
33
|
+
code: 200
|
34
|
+
message: ...
|
35
|
+
headers:
|
36
|
+
content-type:
|
37
|
+
- application/xml
|
38
|
+
content-length:
|
39
|
+
- "204"
|
40
|
+
body: |
|
41
|
+
<iq type="result" id="blather0027" from="room@conference.theo-template.local" to="theozaurus@theo-template.local/34112166161296558195646897">
|
42
|
+
<query xmlns="http://jabber.org/protocol/muc#owner"/>
|
43
|
+
</iq>
|
44
|
+
|
45
|
+
http_version: "1.1"
|
46
|
+
- !ruby/struct:VCR::HTTPInteraction
|
47
|
+
request: !ruby/struct:VCR::Request
|
48
|
+
method: :post
|
49
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
50
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22room%40conference.theo-template.local%22%3e%0a%20%20%3cquery%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%23owner%22%3e%0a%20%20%20%20%3cdestroy%2f%3e%0a%20%20%3c%2fquery%3e%0a%3c%2fiq%3e%0a
|
51
|
+
headers:
|
52
|
+
content-type:
|
53
|
+
- application/x-www-form-urlencoded
|
54
|
+
response: !ruby/struct:VCR::Response
|
55
|
+
status: !ruby/struct:VCR::ResponseStatus
|
56
|
+
code: 200
|
57
|
+
message: ...
|
58
|
+
headers:
|
59
|
+
content-type:
|
60
|
+
- application/xml
|
61
|
+
content-length:
|
62
|
+
- "204"
|
63
|
+
body: |
|
64
|
+
<iq type="result" id="blather0029" from="room@conference.theo-template.local" to="theozaurus@theo-template.local/34112166161296558195646897">
|
65
|
+
<query xmlns="http://jabber.org/protocol/muc#owner"/>
|
66
|
+
</iq>
|
67
|
+
|
68
|
+
http_version: "1.1"
|
@@ -0,0 +1,68 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :post
|
5
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
6
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3cpresence%20to%3d%22room%40conference.theo-template.local%2fnick%22%3e%0a%20%20%3cx%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%22%2f%3e%0a%3c%2fpresence%3e%0a
|
7
|
+
headers:
|
8
|
+
content-type:
|
9
|
+
- application/x-www-form-urlencoded
|
10
|
+
response: !ruby/struct:VCR::Response
|
11
|
+
status: !ruby/struct:VCR::ResponseStatus
|
12
|
+
code: 200
|
13
|
+
message: ...
|
14
|
+
headers:
|
15
|
+
content-type:
|
16
|
+
- application/xml
|
17
|
+
content-length:
|
18
|
+
- "40"
|
19
|
+
body: |
|
20
|
+
#<EventMachine::Timer:0x00000100a06288>
|
21
|
+
|
22
|
+
http_version: "1.1"
|
23
|
+
- !ruby/struct:VCR::HTTPInteraction
|
24
|
+
request: !ruby/struct:VCR::Request
|
25
|
+
method: :post
|
26
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
27
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22room%40conference.theo-template.local%22%3e%0a%20%20%3cquery%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%23owner%22%3e%0a%20%20%20%20%3cx%20xmlns%3d%22jabber%3ax%3adata%22%20type%3d%22submit%22%3e%0a%20%20%20%20%20%20%3cfield%20var%3d%22allow_query_users%22%3e%0a%20%20%20%20%20%20%20%20%3cvalue%3etrue%3c%2fvalue%3e%0a%20%20%20%20%20%20%3c%2ffield%3e%0a%20%20%20%20%3c%2fx%3e%0a%20%20%3c%2fquery%3e%0a%3c%2fiq%3e%0a
|
28
|
+
headers:
|
29
|
+
content-type:
|
30
|
+
- application/x-www-form-urlencoded
|
31
|
+
response: !ruby/struct:VCR::Response
|
32
|
+
status: !ruby/struct:VCR::ResponseStatus
|
33
|
+
code: 200
|
34
|
+
message: ...
|
35
|
+
headers:
|
36
|
+
content-type:
|
37
|
+
- application/xml
|
38
|
+
content-length:
|
39
|
+
- "203"
|
40
|
+
body: |
|
41
|
+
<iq type="result" id="blather001d" from="room@conference.theo-template.local" to="theozaurus@theo-template.local/9294273861296560773995396">
|
42
|
+
<query xmlns="http://jabber.org/protocol/muc#owner"/>
|
43
|
+
</iq>
|
44
|
+
|
45
|
+
http_version: "1.1"
|
46
|
+
- !ruby/struct:VCR::HTTPInteraction
|
47
|
+
request: !ruby/struct:VCR::Request
|
48
|
+
method: :post
|
49
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
50
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22room%40conference.theo-template.local%22%3e%0a%20%20%3cquery%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%23owner%22%3e%0a%20%20%20%20%3cdestroy%2f%3e%0a%20%20%3c%2fquery%3e%0a%3c%2fiq%3e%0a
|
51
|
+
headers:
|
52
|
+
content-type:
|
53
|
+
- application/x-www-form-urlencoded
|
54
|
+
response: !ruby/struct:VCR::Response
|
55
|
+
status: !ruby/struct:VCR::ResponseStatus
|
56
|
+
code: 200
|
57
|
+
message: ...
|
58
|
+
headers:
|
59
|
+
content-type:
|
60
|
+
- application/xml
|
61
|
+
content-length:
|
62
|
+
- "203"
|
63
|
+
body: |
|
64
|
+
<iq type="result" id="blather001f" from="room@conference.theo-template.local" to="theozaurus@theo-template.local/9294273861296560773995396">
|
65
|
+
<query xmlns="http://jabber.org/protocol/muc#owner"/>
|
66
|
+
</iq>
|
67
|
+
|
68
|
+
http_version: "1.1"
|
@@ -0,0 +1,68 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :post
|
5
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
6
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3cpresence%20to%3d%22extra%40conference.theo-template.local%2fnick%22%3e%0a%20%20%3cx%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%22%2f%3e%0a%3c%2fpresence%3e%0a
|
7
|
+
headers:
|
8
|
+
content-type:
|
9
|
+
- application/x-www-form-urlencoded
|
10
|
+
response: !ruby/struct:VCR::Response
|
11
|
+
status: !ruby/struct:VCR::ResponseStatus
|
12
|
+
code: 200
|
13
|
+
message: ...
|
14
|
+
headers:
|
15
|
+
content-type:
|
16
|
+
- application/xml
|
17
|
+
content-length:
|
18
|
+
- "40"
|
19
|
+
body: |
|
20
|
+
#<EventMachine::Timer:0x000001010e8df8>
|
21
|
+
|
22
|
+
http_version: "1.1"
|
23
|
+
- !ruby/struct:VCR::HTTPInteraction
|
24
|
+
request: !ruby/struct:VCR::Request
|
25
|
+
method: :post
|
26
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
27
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22extra%40conference.theo-template.local%22%3e%0a%20%20%3cquery%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%23owner%22%3e%0a%20%20%20%20%3cx%20xmlns%3d%22jabber%3ax%3adata%22%20type%3d%22submit%22%2f%3e%0a%20%20%3c%2fquery%3e%0a%3c%2fiq%3e%0a
|
28
|
+
headers:
|
29
|
+
content-type:
|
30
|
+
- application/x-www-form-urlencoded
|
31
|
+
response: !ruby/struct:VCR::Response
|
32
|
+
status: !ruby/struct:VCR::ResponseStatus
|
33
|
+
code: 200
|
34
|
+
message: ...
|
35
|
+
headers:
|
36
|
+
content-type:
|
37
|
+
- application/xml
|
38
|
+
content-length:
|
39
|
+
- "205"
|
40
|
+
body: |
|
41
|
+
<iq type="result" id="blather0031" from="extra@conference.theo-template.local" to="theozaurus@theo-template.local/34112166161296558195646897">
|
42
|
+
<query xmlns="http://jabber.org/protocol/muc#owner"/>
|
43
|
+
</iq>
|
44
|
+
|
45
|
+
http_version: "1.1"
|
46
|
+
- !ruby/struct:VCR::HTTPInteraction
|
47
|
+
request: !ruby/struct:VCR::Request
|
48
|
+
method: :post
|
49
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
50
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22extra%40conference.theo-template.local%22%3e%0a%20%20%3cquery%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%23owner%22%3e%0a%20%20%20%20%3cdestroy%2f%3e%0a%20%20%3c%2fquery%3e%0a%3c%2fiq%3e%0a
|
51
|
+
headers:
|
52
|
+
content-type:
|
53
|
+
- application/x-www-form-urlencoded
|
54
|
+
response: !ruby/struct:VCR::Response
|
55
|
+
status: !ruby/struct:VCR::ResponseStatus
|
56
|
+
code: 200
|
57
|
+
message: ...
|
58
|
+
headers:
|
59
|
+
content-type:
|
60
|
+
- application/xml
|
61
|
+
content-length:
|
62
|
+
- "205"
|
63
|
+
body: |
|
64
|
+
<iq type="result" id="blather0033" from="extra@conference.theo-template.local" to="theozaurus@theo-template.local/34112166161296558195646897">
|
65
|
+
<query xmlns="http://jabber.org/protocol/muc#owner"/>
|
66
|
+
</iq>
|
67
|
+
|
68
|
+
http_version: "1.1"
|