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 |