diff options
author | Matthew Wild <mwild1@gmail.com> | 2018-09-13 14:46:24 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2018-09-13 14:46:24 +0100 |
commit | 235281229dc3626581aeb409ac4db1c04fb39f72 (patch) | |
tree | 5f9bf30950e5df9d1237ec36cc7030fcd39dbd20 | |
parent | 9e8c327fabd2e65d51b4afb420f9cf72fe7bbff8 (diff) | |
download | prosody-235281229dc3626581aeb409ac4db1c04fb39f72.tar.gz prosody-235281229dc3626581aeb409ac4db1c04fb39f72.zip |
MUC: If a user with an existing affiliation registers, preserve that affiliation (thanks jc)
-rw-r--r-- | plugins/muc/register.lib.lua | 2 | ||||
-rw-r--r-- | spec/scansion/muc_register.scs | 65 |
2 files changed, 66 insertions, 1 deletions
diff --git a/plugins/muc/register.lib.lua b/plugins/muc/register.lib.lua index f9841e06..21cb3f2f 100644 --- a/plugins/muc/register.lib.lua +++ b/plugins/muc/register.lib.lua @@ -174,7 +174,7 @@ local function handle_register_iq(room, origin, stanza) -- Checks passed, save the registration if registered_nick ~= desired_nick then local registration_data = { reserved_nickname = desired_nick }; - local ok, err_type, err_condition = room:set_affiliation(true, user_jid, "member", nil, registration_data); + local ok, err_type, err_condition = room:set_affiliation(true, user_jid, affiliation or "member", nil, registration_data); if not ok then origin.send(st.error_reply(stanza, err_type, err_condition)); return true; diff --git a/spec/scansion/muc_register.scs b/spec/scansion/muc_register.scs index dd9f2cb3..fbc36461 100644 --- a/spec/scansion/muc_register.scs +++ b/spec/scansion/muc_register.scs @@ -286,3 +286,68 @@ Juliet receives: Romeo receives: <presence from="room@conference.localhost/Juliet" /> +# Romeo updates his own registration + +Romeo sends: + <iq id='jw81b36f' to='room@conference.localhost' type='get'> + <query xmlns='jabber:iq:register'/> + </iq> + +Romeo receives: + <iq type='result' from='room@conference.localhost' id='jw81b36f'> + <query xmlns='jabber:iq:register'> + <x type='form' xmlns='jabber:x:data'> + <field type='hidden' var='FORM_TYPE'> + <value>http://jabber.org/protocol/muc#register</value> + </field> + <field type='text-single' label='Nickname' var='muc#register_roomnick'/> + </x> + </query> + </iq> + +Romeo sends: + <iq id='nv71va54' to='room@conference.localhost' type='set'> + <query xmlns='jabber:iq:register'> + <x xmlns='jabber:x:data' type='submit'> + <field var='FORM_TYPE'> + <value>http://jabber.org/protocol/muc#register</value> + </field> + <field var='muc#register_roomnick'> + <value>Romeo</value> + </field> + </x> + </query> + </iq> + +Romeo receives: + <presence from='room@conference.localhost/Romeo'> + <x xmlns='http://jabber.org/protocol/muc#user'> + <item affiliation='owner' jid="${Romeo's full JID}" role='moderator'/> + <status code='110'/> + </x> + </presence> + +Romeo receives: + <iq type='result' from='room@conference.localhost' id='nv71va54'/> + +Juliet receives: + <presence from='room@conference.localhost/Romeo'> + <x xmlns='http://jabber.org/protocol/muc#user'> + <item role='moderator' xmlns='http://jabber.org/protocol/muc#user' affiliation='owner'/> + </x> + </presence> + +# Romeo discovers his reserved nick + +Romeo sends: + <iq id='getnick1' to='room@conference.localhost' type='get'> + <query xmlns='http://jabber.org/protocol/disco#info' node='x-roomuser-item'/> + </iq> + +Romeo receives: + <iq type='result' from='room@conference.localhost' id='getnick1'> + <query xmlns='http://jabber.org/protocol/disco#info'> + <identity category='conference' name='Romeo' type='text'/> + </query> + </iq> + |