diff options
-rw-r--r-- | plugins/mod_scansion_record.lua | 15 | ||||
-rw-r--r-- | spec/scansion/muc_whois_anyone_member.scs | 101 | ||||
-rw-r--r-- | spec/scansion/prosody.cfg.lua | 1 |
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" |