Software /
code /
prosody
Diff
plugins/muc/muc.lib.lua @ 6105:68f53b9a186e
plugins/muc/muc: Support mediated declines
author | daurnimator <quae@daurnimator.com> |
---|---|
date | Tue, 18 Mar 2014 15:15:28 -0400 |
parent | 6104:260a18062cb2 |
child | 6106:4b15cfae2d11 |
line wrap: on
line diff
--- a/plugins/muc/muc.lib.lua Tue Mar 18 15:15:14 2014 -0400 +++ b/plugins/muc/muc.lib.lua Tue Mar 18 15:15:28 2014 -0400 @@ -1067,6 +1067,29 @@ end end +function room_mt:handle_mediated_decline(origin, stanza, payload) + local declinee = jid_prep(payload.attr.to); + if declinee then + local from, to = stanza.attr.from, stanza.attr.to; + -- TODO: Validate declinee + local reason = payload:get_child_text("reason") + local decline = st.message({from = to, to = declinee, id = stanza.attr.id}) + :tag('x', {xmlns='http://jabber.org/protocol/muc#user'}) + :tag('decline', {from=from}) + :tag('reason'):text(reason or ""):up() + :up() + :up() + :tag('body') -- Add a plain message for clients which don't support declines + :text(from..' declined your invite to the room '..to..(reason and (' ('..reason..')') or "")) + :up(); + self:_route_stanza(decline); + return true; + else + origin.send(st.error_reply(stanza, "cancel", "jid-malformed")); + return true; + end +end + function room_mt:handle_message_to_room(origin, stanza) local type = stanza.attr.type; if type == "groupchat" then @@ -1081,6 +1104,8 @@ -- fallthrough elseif payload.name == "invite" and payload.attr.to then return self:handle_mediated_invite(origin, stanza, payload) + elseif payload.name == "decline" and payload.attr.to then + return self:handle_mediated_decline(origin, stanza, payload) end origin.send(st.error_reply(stanza, "cancel", "bad-request")); return true;