Mercurial > prosody-hg
comparison plugins/muc/mod_muc.lua @ 10450:c1edeb9fe337
MUC: Indicate the component as origin of various errors where there's no room
A room that doesn't exist can't return an error, can it?
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 26 Nov 2019 00:02:13 +0100 |
| parents | 2e36a54906e4 |
| children | d1bfda983ffe |
comparison
equal
deleted
inserted
replaced
| 10449:2e36a54906e4 | 10450:c1edeb9fe337 |
|---|---|
| 353 end, 1); | 353 end, 1); |
| 354 | 354 |
| 355 module:hook("muc-room-pre-create", function(event) | 355 module:hook("muc-room-pre-create", function(event) |
| 356 local origin, stanza = event.origin, event.stanza; | 356 local origin, stanza = event.origin, event.stanza; |
| 357 if not track_room(event.room) then | 357 if not track_room(event.room) then |
| 358 origin.send(st.error_reply(stanza, "wait", "resource-constraint")); | 358 origin.send(st.error_reply(stanza, "wait", "resource-constraint", nil, module.host)); |
| 359 return true; | 359 return true; |
| 360 end | 360 end |
| 361 end, -1000); | 361 end, -1000); |
| 362 | 362 |
| 363 module:hook("muc-room-destroyed",function(event) | 363 module:hook("muc-room-destroyed",function(event) |
| 404 local user_jid = stanza.attr.from; | 404 local user_jid = stanza.attr.from; |
| 405 if not is_admin(user_jid) and not ( | 405 if not is_admin(user_jid) and not ( |
| 406 restrict_room_creation == "local" and | 406 restrict_room_creation == "local" and |
| 407 select(2, jid_split(user_jid)) == host_suffix | 407 select(2, jid_split(user_jid)) == host_suffix |
| 408 ) then | 408 ) then |
| 409 origin.send(st.error_reply(stanza, "cancel", "not-allowed", "Room creation is restricted")); | 409 origin.send(st.error_reply(stanza, "cancel", "not-allowed", "Room creation is restricted", module.host)); |
| 410 return true; | 410 return true; |
| 411 end | 411 end |
| 412 end); | 412 end); |
| 413 end | 413 end |
| 414 end | 414 end |
| 449 -- Allow the room to be recreated by admin or after time has passed | 449 -- Allow the room to be recreated by admin or after time has passed |
| 450 delete_room(room); | 450 delete_room(room); |
| 451 room = nil; | 451 room = nil; |
| 452 else | 452 else |
| 453 if stanza.attr.type ~= "error" then | 453 if stanza.attr.type ~= "error" then |
| 454 local reply = st.error_reply(stanza, "cancel", "gone", room._data.reason) | 454 local reply = st.error_reply(stanza, "cancel", "gone", room._data.reason, module.host) |
| 455 if room._data.newjid then | 455 if room._data.newjid then |
| 456 local uri = "xmpp:"..room._data.newjid.."?join"; | 456 local uri = "xmpp:"..room._data.newjid.."?join"; |
| 457 reply:get_child("error"):child_with_name("gone"):text(uri); | 457 reply:get_child("error"):child_with_name("gone"):text(uri); |
| 458 end | 458 end |
| 459 event.origin.send(reply); | 459 event.origin.send(reply); |
| 463 end | 463 end |
| 464 | 464 |
| 465 if room == nil then | 465 if room == nil then |
| 466 -- Watch presence to create rooms | 466 -- Watch presence to create rooms |
| 467 if not jid_prep(room_jid, true) then | 467 if not jid_prep(room_jid, true) then |
| 468 origin.send(st.error_reply(stanza, "modify", "jid-malformed")); | 468 origin.send(st.error_reply(stanza, "modify", "jid-malformed", nil, module.host)); |
| 469 return true; | 469 return true; |
| 470 end | 470 end |
| 471 if stanza.attr.type == nil and stanza.name == "presence" and stanza:get_child("x", "http://jabber.org/protocol/muc") then | 471 if stanza.attr.type == nil and stanza.name == "presence" and stanza:get_child("x", "http://jabber.org/protocol/muc") then |
| 472 room = muclib.new_room(room_jid); | 472 room = muclib.new_room(room_jid); |
| 473 return room:handle_first_presence(origin, stanza); | 473 return room:handle_first_presence(origin, stanza); |
| 474 elseif stanza.attr.type ~= "error" then | 474 elseif stanza.attr.type ~= "error" then |
| 475 origin.send(st.error_reply(stanza, "cancel", "item-not-found")); | 475 origin.send(st.error_reply(stanza, "cancel", "item-not-found", nil, module.host)); |
| 476 return true; | 476 return true; |
| 477 else | 477 else |
| 478 return; | 478 return; |
| 479 end | 479 end |
| 480 elseif room == false then -- Error loading room | 480 elseif room == false then -- Error loading room |
| 481 origin.send(st.error_reply(stanza, "wait", "resource-constraint")); | 481 origin.send(st.error_reply(stanza, "wait", "resource-constraint", nil, module.host)); |
| 482 return true; | 482 return true; |
| 483 end | 483 end |
| 484 return room[method](room, origin, stanza); | 484 return room[method](room, origin, stanza); |
| 485 end, -2) | 485 end, -2) |
| 486 end | 486 end |
