Software /
code /
prosody
Comparison
plugins/muc/muc.lib.lua @ 6194:9b6c2d89f143
plugins/muc/muc.lib: Tidy up muc-invite event.
- Send inside of the actual handle_invite function
- Move password, compat and body tagging into event handlers
author | daurnimator <quae@daurnimator.com> |
---|---|
date | Mon, 31 Mar 2014 12:31:15 -0400 |
parent | 6193:b9074126639f |
child | 6195:9f6a003baf2e |
comparison
equal
deleted
inserted
replaced
6193:b9074126639f | 6194:9b6c2d89f143 |
---|---|
1201 origin.send(st.error_reply(stanza, "auth", "forbidden")); | 1201 origin.send(st.error_reply(stanza, "auth", "forbidden")); |
1202 return true; | 1202 return true; |
1203 end | 1203 end |
1204 local _invitee = jid_prep(payload.attr.to); | 1204 local _invitee = jid_prep(payload.attr.to); |
1205 if _invitee then | 1205 if _invitee then |
1206 local _reason = payload:get_child_text("reason"); | |
1207 if self:get_whois() == "moderators" then | |
1208 _from = current_nick; | |
1209 end | |
1210 local invite = st.message({from = _to, to = _invitee, id = stanza.attr.id}) | 1206 local invite = st.message({from = _to, to = _invitee, id = stanza.attr.id}) |
1211 :tag('x', {xmlns='http://jabber.org/protocol/muc#user'}) | 1207 :tag('x', {xmlns='http://jabber.org/protocol/muc#user'}) |
1212 :tag('invite', {from=_from}) | 1208 :tag('invite', {from=_from}) |
1213 :tag('reason'):text(_reason or ""):up() | 1209 :tag('reason'):text(payload:get_child_text("reason")):up() |
1214 :up(); | 1210 :up() |
1215 local password = self:get_password(); | |
1216 if password then | |
1217 invite:tag("password"):text(password):up(); | |
1218 end | |
1219 invite:up() | |
1220 :tag('x', {xmlns="jabber:x:conference", jid=_to}) -- COMPAT: Some older clients expect this | |
1221 :text(_reason or "") | |
1222 :up() | |
1223 :tag('body') -- Add a plain message for clients which don't support invites | |
1224 :text(_from..' invited you to the room '.._to..(_reason and (' ('.._reason..')') or "")) | |
1225 :up(); | 1211 :up(); |
1226 module:fire_event("muc-invite", {room = self, stanza = invite, origin = origin, incoming = stanza}); | 1212 if not module:fire_event("muc-invite", {room = self, stanza = invite, origin = origin, incoming = stanza}) then |
1213 self:route_stanza(invite); | |
1214 end | |
1227 return true; | 1215 return true; |
1228 else | 1216 else |
1229 origin.send(st.error_reply(stanza, "cancel", "jid-malformed")); | 1217 origin.send(st.error_reply(stanza, "cancel", "jid-malformed")); |
1230 return true; | 1218 return true; |
1231 end | 1219 end |
1232 end | 1220 end |
1233 | 1221 |
1222 -- Add password to outgoing invite | |
1234 module:hook("muc-invite", function(event) | 1223 module:hook("muc-invite", function(event) |
1235 event.room:route_stanza(event.stanza); | 1224 local password = event.room:get_password(); |
1236 return true; | 1225 if password then |
1237 end, -1) | 1226 local x = event.stanza:get_child("x", "http://jabber.org/protocol/muc#user"); |
1227 x:tag("password"):text(password):up(); | |
1228 end | |
1229 end); | |
1230 | |
1231 -- COMPAT: Some older clients expect this | |
1232 module:hook("muc-invite", function(event) | |
1233 local room, stanza = event.room, event.stanza; | |
1234 local invite = stanza:get_child("x", "http://jabber.org/protocol/muc#user"):get_child("invite"); | |
1235 local reason = invite:get_child_text("reason"); | |
1236 stanza:tag('x', {xmlns = "jabber:x:conference"; jid = room.jid;}) | |
1237 :text(reason or "") | |
1238 :up(); | |
1239 end); | |
1240 | |
1241 -- Add a plain message for clients which don't support invites | |
1242 module:hook("muc-invite", function(event) | |
1243 local room, stanza = event.room, event.stanza; | |
1244 local invite = stanza:get_child("x", "http://jabber.org/protocol/muc#user"):get_child("invite"); | |
1245 local reason = invite:get_child_text("reason") or ""; | |
1246 stanza:tag("body") | |
1247 :text(invite.attr.from.." invited you to the room "..room.jid..(reason == "" and (" ("..reason..")") or "")) | |
1248 :up(); | |
1249 end); | |
1250 | |
1251 -- Mask 'from' jid as occupant jid if room is anonymous | |
1252 module:hook("muc-invite", function(event) | |
1253 local room, stanza = event.room, event.stanza; | |
1254 if room:get_whois() == "moderators" and room:get_default_role(room:get_affiliation(stanza.attr.to)) ~= "moderator" then | |
1255 local invite = stanza:get_child("x", "http://jabber.org/protocol/muc#user"):get_child("invite"); | |
1256 local occupant_jid = room:get_occupant_jid(invite.attr.from); | |
1257 if occupant_jid ~= nil then -- FIXME: This will expose real jid if inviter is not in room | |
1258 invite.attr.from = occupant_jid; | |
1259 end | |
1260 end | |
1261 end, 50); | |
1238 | 1262 |
1239 -- When an invite is sent; add an affiliation for the invitee | 1263 -- When an invite is sent; add an affiliation for the invitee |
1240 module:hook("muc-invite", function(event) | 1264 module:hook("muc-invite", function(event) |
1241 local room, stanza = event.room, event.stanza | 1265 local room, stanza = event.room, event.stanza |
1242 local invitee = stanza.attr.to | 1266 local invitee = stanza.attr.to |