Software /
code /
prosody
Comparison
plugins/muc/muc.lib.lua @ 6180:35388114439f
plugins/muc/muc.lib: non-function changes (reordering, semicolons and comments)
author | daurnimator <quae@daurnimator.com> |
---|---|
date | Thu, 27 Mar 2014 19:18:57 -0400 |
parent | 6179:e488a90195bc |
child | 6181:6baa9a59aa03 |
comparison
equal
deleted
inserted
replaced
6179:e488a90195bc | 6180:35388114439f |
---|---|
7 -- COPYING file in the source package for more information. | 7 -- COPYING file in the source package for more information. |
8 -- | 8 -- |
9 | 9 |
10 local select = select; | 10 local select = select; |
11 local pairs, ipairs = pairs, ipairs; | 11 local pairs, ipairs = pairs, ipairs; |
12 local next = next; | |
13 local setmetatable = setmetatable; | |
14 local t_insert, t_remove = table.insert, table.remove; | |
12 | 15 |
13 local gettime = os.time; | 16 local gettime = os.time; |
14 local datetime = require "util.datetime"; | 17 local datetime = require "util.datetime"; |
15 | 18 |
16 local dataform = require "util.dataforms"; | 19 local dataform = require "util.dataforms"; |
18 local jid_split = require "util.jid".split; | 21 local jid_split = require "util.jid".split; |
19 local jid_bare = require "util.jid".bare; | 22 local jid_bare = require "util.jid".bare; |
20 local jid_prep = require "util.jid".prep; | 23 local jid_prep = require "util.jid".prep; |
21 local st = require "util.stanza"; | 24 local st = require "util.stanza"; |
22 local log = require "util.logger".init("mod_muc"); | 25 local log = require "util.logger".init("mod_muc"); |
23 local t_insert, t_remove = table.insert, table.remove; | |
24 local setmetatable = setmetatable; | |
25 local base64 = require "util.encodings".base64; | 26 local base64 = require "util.encodings".base64; |
26 local md5 = require "util.hashes".md5; | 27 local md5 = require "util.hashes".md5; |
27 | 28 |
28 local occupant_lib = module:require "muc/occupant" | 29 local occupant_lib = module:require "muc/occupant" |
29 | 30 |
353 msg.attr.to = to; | 354 msg.attr.to = to; |
354 i = i + 1 | 355 i = i + 1 |
355 return msg | 356 return msg |
356 end | 357 end |
357 return true; | 358 return true; |
358 end) | 359 end); |
359 | 360 |
360 function room_mt:send_history(stanza) | 361 function room_mt:send_history(stanza) |
361 local maxchars, maxstanzas, since = parse_history(stanza) | 362 local maxchars, maxstanzas, since = parse_history(stanza) |
362 local event = { | 363 local event = { |
363 room = self; | 364 room = self; |
582 local reply = st.error_reply(stanza, "auth", "not-authorized"):up(); | 583 local reply = st.error_reply(stanza, "auth", "not-authorized"):up(); |
583 reply.tags[1].attr.code = "401"; | 584 reply.tags[1].attr.code = "401"; |
584 event.origin.send(reply:tag("x", {xmlns = "http://jabber.org/protocol/muc"})); | 585 event.origin.send(reply:tag("x", {xmlns = "http://jabber.org/protocol/muc"})); |
585 return true; | 586 return true; |
586 end | 587 end |
587 end, -1) | 588 end, -1); |
588 | 589 |
589 module:hook("muc-occupant-pre-join/locked", function(event) | 590 module:hook("muc-occupant-pre-join/locked", function(event) |
590 if event.room:is_locked() then -- Deny entry | 591 if event.room:is_locked() then -- Deny entry |
591 event.origin.send(st.error_reply(event.stanza, "cancel", "item-not-found")); | 592 event.origin.send(st.error_reply(event.stanza, "cancel", "item-not-found")); |
592 return true; | 593 return true; |
601 local reply = st.error_reply(stanza, "auth", "registration-required"):up(); | 602 local reply = st.error_reply(stanza, "auth", "registration-required"):up(); |
602 reply.tags[1].attr.code = "407"; | 603 reply.tags[1].attr.code = "407"; |
603 event.origin.send(reply:tag("x", {xmlns = "http://jabber.org/protocol/muc"})); | 604 event.origin.send(reply:tag("x", {xmlns = "http://jabber.org/protocol/muc"})); |
604 return true; | 605 return true; |
605 end | 606 end |
606 end, -1) | 607 end, -1); |
607 | 608 |
608 -- banned | 609 -- check if user is banned |
609 module:hook("muc-occupant-pre-join/affiliation", function(event) | 610 module:hook("muc-occupant-pre-join/affiliation", function(event) |
610 local room, stanza = event.room, event.stanza; | 611 local room, stanza = event.room, event.stanza; |
611 local affiliation = room:get_affiliation(stanza.attr.from); | 612 local affiliation = room:get_affiliation(stanza.attr.from); |
612 if affiliation == "outcast" then | 613 if affiliation == "outcast" then |
613 local reply = st.error_reply(stanza, "auth", "forbidden"):up(); | 614 local reply = st.error_reply(stanza, "auth", "forbidden"):up(); |
614 reply.tags[1].attr.code = "403"; | 615 reply.tags[1].attr.code = "403"; |
615 event.origin.send(reply:tag("x", {xmlns = "http://jabber.org/protocol/muc"})); | 616 event.origin.send(reply:tag("x", {xmlns = "http://jabber.org/protocol/muc"})); |
616 return true; | 617 return true; |
617 end | 618 end |
618 end, -1) | 619 end, -1); |
619 | 620 |
620 module:hook("muc-occupant-joined", function(event) | 621 module:hook("muc-occupant-joined", function(event) |
621 local room, stanza = event.room, event.stanza; | 622 local room, stanza = event.room, event.stanza; |
622 local real_jid = stanza.attr.from; | 623 local real_jid = stanza.attr.from; |
623 room:send_occupant_list(real_jid, function(nick, occupant) | 624 room:send_occupant_list(real_jid, function(nick, occupant) |
855 end | 856 end |
856 log("debug", "%s sent private message stanza to %s (%s)", from, to, o_data.jid); | 857 log("debug", "%s sent private message stanza to %s (%s)", from, to, o_data.jid); |
857 stanza:tag("x", { xmlns = "http://jabber.org/protocol/muc#user" }):up(); | 858 stanza:tag("x", { xmlns = "http://jabber.org/protocol/muc#user" }):up(); |
858 stanza.attr.from = current_nick; | 859 stanza.attr.from = current_nick; |
859 self:route_to_occupant(o_data, stanza) | 860 self:route_to_occupant(o_data, stanza) |
861 -- TODO: Remove x tag? | |
860 stanza.attr.from = from; | 862 stanza.attr.from = from; |
861 return true; | 863 return true; |
862 end | 864 end |
863 | 865 |
864 function room_mt:send_form(origin, stanza) | 866 function room_mt:send_form(origin, stanza) |
1187 origin.send(st.error_reply(stanza, "auth", "forbidden")); | 1189 origin.send(st.error_reply(stanza, "auth", "forbidden")); |
1188 return true; | 1190 return true; |
1189 end | 1191 end |
1190 local _invitee = jid_prep(payload.attr.to); | 1192 local _invitee = jid_prep(payload.attr.to); |
1191 if _invitee then | 1193 if _invitee then |
1194 local _reason = payload:get_child_text("reason"); | |
1192 if self:get_whois() == "moderators" then | 1195 if self:get_whois() == "moderators" then |
1193 _from = current_nick; | 1196 _from = current_nick; |
1194 end | 1197 end |
1195 local _reason = payload:get_child_text("reason") | |
1196 local invite = st.message({from = _to, to = _invitee, id = stanza.attr.id}) | 1198 local invite = st.message({from = _to, to = _invitee, id = stanza.attr.id}) |
1197 :tag('x', {xmlns='http://jabber.org/protocol/muc#user'}) | 1199 :tag('x', {xmlns='http://jabber.org/protocol/muc#user'}) |
1198 :tag('invite', {from=_from}) | 1200 :tag('invite', {from=_from}) |
1199 :tag('reason'):text(_reason or ""):up() | 1201 :tag('reason'):text(_reason or ""):up() |
1200 :up(); | 1202 :up(); |
1201 local password = self:get_password() | 1203 local password = self:get_password(); |
1202 if password then | 1204 if password then |
1203 invite:tag("password"):text(password):up(); | 1205 invite:tag("password"):text(password):up(); |
1204 end | 1206 end |
1205 invite:up() | 1207 invite:up() |
1206 :tag('x', {xmlns="jabber:x:conference", jid=_to}) -- COMPAT: Some older clients expect this | 1208 :tag('x', {xmlns="jabber:x:conference", jid=_to}) -- COMPAT: Some older clients expect this |
1207 :text(_reason or "") | 1209 :text(_reason or "") |
1208 :up() | 1210 :up() |
1209 :tag('body') -- Add a plain message for clients which don't support invites | 1211 :tag('body') -- Add a plain message for clients which don't support invites |
1210 :text(_from..' invited you to the room '.._to..(_reason and (' ('.._reason..')') or "")) | 1212 :text(_from..' invited you to the room '.._to..(_reason and (' ('.._reason..')') or "")) |
1211 :up(); | 1213 :up(); |
1212 module:fire_event("muc-invite", { room = self, stanza = invite, origin = origin, incoming = stanza }); | 1214 module:fire_event("muc-invite", {room = self, stanza = invite, origin = origin, incoming = stanza}); |
1213 return true; | 1215 return true; |
1214 else | 1216 else |
1215 origin.send(st.error_reply(stanza, "cancel", "jid-malformed")); | 1217 origin.send(st.error_reply(stanza, "cancel", "jid-malformed")); |
1216 return true; | 1218 return true; |
1217 end | 1219 end |
1230 local from = stanza:get_child("x", "http://jabber.org/protocol/muc#user"):get_child("invite").attr.from | 1232 local from = stanza:get_child("x", "http://jabber.org/protocol/muc#user"):get_child("invite").attr.from |
1231 local current_nick = room:get_occupant_jid(from) | 1233 local current_nick = room:get_occupant_jid(from) |
1232 log("debug", "%s invited %s into members only room %s, granting membership", from, invitee, room.jid); | 1234 log("debug", "%s invited %s into members only room %s, granting membership", from, invitee, room.jid); |
1233 room:set_affiliation(from, invitee, "member", nil, "Invited by " .. current_nick) | 1235 room:set_affiliation(from, invitee, "member", nil, "Invited by " .. current_nick) |
1234 end | 1236 end |
1235 end) | 1237 end); |
1236 | 1238 |
1237 function room_mt:handle_mediated_decline(origin, stanza) | 1239 function room_mt:handle_mediated_decline(origin, stanza) |
1238 local payload = stanza:get_child("x", "http://jabber.org/protocol/muc#user"):get_child("decline") | 1240 local payload = stanza:get_child("x", "http://jabber.org/protocol/muc#user"):get_child("decline") |
1239 local declinee = jid_prep(payload.attr.to); | 1241 local declinee = jid_prep(payload.attr.to); |
1240 if declinee then | 1242 if declinee then |
1287 return self:handle_mediated_decline(origin, stanza) | 1289 return self:handle_mediated_decline(origin, stanza) |
1288 end | 1290 end |
1289 origin.send(st.error_reply(stanza, "cancel", "bad-request")); | 1291 origin.send(st.error_reply(stanza, "cancel", "bad-request")); |
1290 return true; | 1292 return true; |
1291 end | 1293 end |
1292 else | |
1293 return nil; | |
1294 end | 1294 end |
1295 end | 1295 end |
1296 | 1296 |
1297 function room_mt:route_stanza(stanza) | 1297 function room_mt:route_stanza(stanza) |
1298 module:send(stanza) | 1298 module:send(stanza); |
1299 end | 1299 end |
1300 | 1300 |
1301 function room_mt:get_affiliation(jid) | 1301 function room_mt:get_affiliation(jid) |
1302 local node, host, resource = jid_split(jid); | 1302 local node, host, resource = jid_split(jid); |
1303 local bare = node and node.."@"..host or host; | 1303 local bare = node and node.."@"..host or host; |