Software /
code /
prosody
Comparison
plugins/muc/mod_muc.lua @ 9015:dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 11 Jul 2018 03:37:57 +0200 |
parent | 9013:a54bcc76cd22 |
child | 9016:946ae1181c57 |
comparison
equal
deleted
inserted
replaced
9014:326fedc1d3c6 | 9015:dc606dc89f44 |
---|---|
320 module:hook("muc-room-destroyed",function(event) | 320 module:hook("muc-room-destroyed",function(event) |
321 local room = event.room; | 321 local room = event.room; |
322 forget_room(room); | 322 forget_room(room); |
323 delete_room(room); | 323 delete_room(room); |
324 end); | 324 end); |
325 | |
326 if module:get_option_boolean("muc_tombstones", true) then | |
327 | |
328 local ttl = module:get_option_number("muc_tombstone_expiry", 86400 * 31); | |
329 | |
330 module:hook("muc-room-destroyed",function(event) | |
331 local room = event.room; | |
332 if not room:get_persistent() then return end | |
333 | |
334 local tombstone = new_room(room.jid, { | |
335 locked = os.time() + ttl; | |
336 destroyed = true; | |
337 reason = event.reason; | |
338 newjid = event.newjid; | |
339 -- password? | |
340 }); | |
341 tombstone.save = room_save; | |
342 tombstone:set_persistent(true); | |
343 tombstone:set_hidden(true); | |
344 tombstone:save(true); | |
345 return true; | |
346 end, -10); | |
347 end | |
325 | 348 |
326 do | 349 do |
327 local restrict_room_creation = module:get_option("restrict_room_creation"); | 350 local restrict_room_creation = module:get_option("restrict_room_creation"); |
328 if restrict_room_creation == true then | 351 if restrict_room_creation == true then |
329 restrict_room_creation = "admin"; | 352 restrict_room_creation = "admin"; |
370 } do | 393 } do |
371 module:hook(event_name, function (event) | 394 module:hook(event_name, function (event) |
372 local origin, stanza = event.origin, event.stanza; | 395 local origin, stanza = event.origin, event.stanza; |
373 local room_jid = jid_bare(stanza.attr.to); | 396 local room_jid = jid_bare(stanza.attr.to); |
374 local room = get_room_from_jid(room_jid); | 397 local room = get_room_from_jid(room_jid); |
398 | |
399 if room and room._data.destroyed then | |
400 if stanza.attr.type == nil and stanza.name == "presence" then | |
401 if room._data.locked < os.time() then | |
402 -- Allow the room to be recreated after time has passed | |
403 delete_room(room); | |
404 room = nil; | |
405 else | |
406 local reply = st.reply(stanza) | |
407 :tag("x", {xmlns = "http://jabber.org/protocol/muc#user"}) | |
408 :tag("item", { affiliation='none', role='none' }):up() | |
409 :tag("destroy", {jid=room._data.newjid}):text(room._data.reason); | |
410 reply.attr.type = "unavailable"; | |
411 event.origin.send(reply); | |
412 return true; | |
413 end | |
414 end | |
415 end | |
416 | |
375 if room == nil then | 417 if room == nil then |
376 -- Watch presence to create rooms | 418 -- Watch presence to create rooms |
377 if stanza.attr.type == nil and stanza.name == "presence" then | 419 if stanza.attr.type == nil and stanza.name == "presence" then |
378 room = muclib.new_room(room_jid); | 420 room = muclib.new_room(room_jid); |
379 return room:handle_first_presence(origin, stanza); | 421 return room:handle_first_presence(origin, stanza); |