Software /
code /
prosody
Comparison
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 |
comparison
equal
deleted
inserted
replaced
6104:260a18062cb2 | 6105:68f53b9a186e |
---|---|
1065 origin.send(st.error_reply(stanza, "cancel", "jid-malformed")); | 1065 origin.send(st.error_reply(stanza, "cancel", "jid-malformed")); |
1066 return true; | 1066 return true; |
1067 end | 1067 end |
1068 end | 1068 end |
1069 | 1069 |
1070 function room_mt:handle_mediated_decline(origin, stanza, payload) | |
1071 local declinee = jid_prep(payload.attr.to); | |
1072 if declinee then | |
1073 local from, to = stanza.attr.from, stanza.attr.to; | |
1074 -- TODO: Validate declinee | |
1075 local reason = payload:get_child_text("reason") | |
1076 local decline = st.message({from = to, to = declinee, id = stanza.attr.id}) | |
1077 :tag('x', {xmlns='http://jabber.org/protocol/muc#user'}) | |
1078 :tag('decline', {from=from}) | |
1079 :tag('reason'):text(reason or ""):up() | |
1080 :up() | |
1081 :up() | |
1082 :tag('body') -- Add a plain message for clients which don't support declines | |
1083 :text(from..' declined your invite to the room '..to..(reason and (' ('..reason..')') or "")) | |
1084 :up(); | |
1085 self:_route_stanza(decline); | |
1086 return true; | |
1087 else | |
1088 origin.send(st.error_reply(stanza, "cancel", "jid-malformed")); | |
1089 return true; | |
1090 end | |
1091 end | |
1092 | |
1070 function room_mt:handle_message_to_room(origin, stanza) | 1093 function room_mt:handle_message_to_room(origin, stanza) |
1071 local type = stanza.attr.type; | 1094 local type = stanza.attr.type; |
1072 if type == "groupchat" then | 1095 if type == "groupchat" then |
1073 return self:handle_groupchat_to_room(origin, stanza) | 1096 return self:handle_groupchat_to_room(origin, stanza) |
1074 elseif type == "error" and is_kickable_error(stanza) then | 1097 elseif type == "error" and is_kickable_error(stanza) then |
1079 local payload = x.tags[1]; | 1102 local payload = x.tags[1]; |
1080 if payload == nil then | 1103 if payload == nil then |
1081 -- fallthrough | 1104 -- fallthrough |
1082 elseif payload.name == "invite" and payload.attr.to then | 1105 elseif payload.name == "invite" and payload.attr.to then |
1083 return self:handle_mediated_invite(origin, stanza, payload) | 1106 return self:handle_mediated_invite(origin, stanza, payload) |
1107 elseif payload.name == "decline" and payload.attr.to then | |
1108 return self:handle_mediated_decline(origin, stanza, payload) | |
1084 end | 1109 end |
1085 origin.send(st.error_reply(stanza, "cancel", "bad-request")); | 1110 origin.send(st.error_reply(stanza, "cancel", "bad-request")); |
1086 return true; | 1111 return true; |
1087 end | 1112 end |
1088 else | 1113 else |