aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/mod_scansion_record.lua15
-rw-r--r--spec/scansion/muc_whois_anyone_member.scs101
-rw-r--r--spec/scansion/prosody.cfg.lua1
3 files changed, 114 insertions, 3 deletions
diff --git a/plugins/mod_scansion_record.lua b/plugins/mod_scansion_record.lua
index 3fbc8b6b..8d772b4e 100644
--- a/plugins/mod_scansion_record.lua
+++ b/plugins/mod_scansion_record.lua
@@ -6,6 +6,7 @@ local filters = require "util.filters";
local id = require "util.id";
local dt = require "util.datetime";
local dm = require "util.datamanager";
+local st = require "util.stanza";
local record_id = id.medium():lower();
local record_date = os.date("%Y%b%d"):lower();
@@ -36,12 +37,16 @@ local function record_event(session, event)
end
local function record_stanza(stanza, session, verb)
- record(session.scansion_id.." "..verb..":\n\t"..tostring(stanza).."\n\n");
+ local flattened = tostring(stanza):gsub("><", ">\n\t<");
+ -- TODO Proper prettyprinting with indentation
+ record(session.scansion_id.." "..verb..":\n\t"..flattened.."\n\n");
end
local function record_stanza_in(stanza, session)
if stanza.attr.xmlns == nil then
- record_stanza(stanza, session, "sends")
+ local copy = st.clone(stanza);
+ copy.attr.from = nil;
+ record_stanza(copy, session, "sends")
end
return stanza;
end
@@ -49,7 +54,11 @@ end
local function record_stanza_out(stanza, session)
if stanza.attr.xmlns == nil then
if not (stanza.name == "iq" and stanza:get_child("bind", "urn:ietf:params:xml:ns:xmpp-bind")) then
- record_stanza(stanza, session, "receives");
+ local copy = st.clone(stanza);
+ if copy.attr.to == session.full_jid then
+ copy.attr.to = nil;
+ end
+ record_stanza(copy, session, "receives");
end
end
return stanza;
diff --git a/spec/scansion/muc_whois_anyone_member.scs b/spec/scansion/muc_whois_anyone_member.scs
new file mode 100644
index 00000000..9a6f7e15
--- /dev/null
+++ b/spec/scansion/muc_whois_anyone_member.scs
@@ -0,0 +1,101 @@
+# MUC: Allow members to fetch the affiliation lists in open non-anonymous rooms
+
+[Client] Romeo
+ jid: romeo@localhost/MsliYo9C
+ password: password
+
+[Client] Juliet
+ jid: juliet@localhost/vJrUtY4Z
+ password: password
+
+-----
+
+Romeo connects
+
+Romeo sends:
+ <presence to='issue1230@conference.localhost/romeo'>
+ <x xmlns='http://jabber.org/protocol/muc'/>
+ </presence>
+
+Romeo receives:
+ <presence from='issue1230@conference.localhost/romeo'>
+ <x xmlns='http://jabber.org/protocol/muc#user'>
+ <status code='201'/>
+ <item jid="${Romeo's JID}" role='moderator' affiliation='owner'/>
+ <status code='110'/>
+ </x>
+ </presence>
+
+Romeo receives:
+ <message from='issue1230@conference.localhost' type='groupchat'>
+ <subject/>
+ </message>
+
+Romeo sends:
+ <iq id='lx3' type='set' to='issue1230@conference.localhost'>
+ <query xmlns='http://jabber.org/protocol/muc#owner'>
+ <x type='submit' xmlns='jabber:x:data'>
+ <field var='FORM_TYPE'>
+ <value>http://jabber.org/protocol/muc#roomconfig</value>
+ </field>
+ <field var='muc#roomconfig_whois'>
+ <value>anyone</value>
+ </field>
+ </x>
+ </query>
+ </iq>
+
+Romeo receives:
+ <iq from='issue1230@conference.localhost' type='result' id='lx3'/>
+
+Romeo receives:
+ <message from='issue1230@conference.localhost' type='groupchat'>
+ <x xmlns='http://jabber.org/protocol/muc#user'>
+ <status code='172'/>
+ </x>
+ </message>
+
+Juliet connects
+
+Juliet sends:
+ <presence to='issue1230@conference.localhost/juliet'>
+ <x xmlns='http://jabber.org/protocol/muc'/>
+ </presence>
+
+Juliet receives:
+ <presence from='issue1230@conference.localhost/romeo'>
+ <x xmlns='http://jabber.org/protocol/muc#user'>
+ <item jid="${Romeo's JID}" role='moderator' affiliation='owner'/>
+ </x>
+ </presence>
+
+Juliet receives:
+ <presence from='issue1230@conference.localhost/juliet'>
+ <x xmlns='http://jabber.org/protocol/muc#user'>
+ <status code='100'/>
+ <item jid="${Juliet's JID}" role='participant' affiliation='none'/>
+ <status code='110'/>
+ </x>
+ </presence>
+
+Juliet receives:
+ <message from='issue1230@conference.localhost' type='groupchat'>
+ <subject/>
+ </message>
+
+Juliet sends:
+ <iq id='lx2' type='get' to='issue1230@conference.localhost'>
+ <query xmlns='http://jabber.org/protocol/muc#admin'>
+ <item affiliation='member'/>
+ </query>
+ </iq>
+
+Juliet receives:
+ <iq from='issue1230@conference.localhost' type='result' id='lx2'>
+ <query xmlns='http://jabber.org/protocol/muc#admin'/>
+ </iq>
+
+Juliet disconnects
+
+Romeo disconnects
+
diff --git a/spec/scansion/prosody.cfg.lua b/spec/scansion/prosody.cfg.lua
index b30d5218..a6e8d289 100644
--- a/spec/scansion/prosody.cfg.lua
+++ b/spec/scansion/prosody.cfg.lua
@@ -42,6 +42,7 @@ modules_enabled = {
--"motd"; -- Send a message to users when they log in
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.
--"proxy65"; -- Enables a file transfer proxy service which clients behind NAT can use
+ --"scansion_record";
}
certificate = "certs"