Sfoglia il codice sorgente

fix(breakout-rooms) avoid accessing invalid room objects

master
Saúl Ibarra Corretgé 3 anni fa
parent
commit
73e8f5703c
1 ha cambiato i file con 14 aggiunte e 11 eliminazioni
  1. 14
    11
      resources/prosody-plugins/mod_muc_breakout_rooms.lua

+ 14
- 11
resources/prosody-plugins/mod_muc_breakout_rooms.lua Vedi File

197
         main_room._data.breakout_rooms = {};
197
         main_room._data.breakout_rooms = {};
198
     end
198
     end
199
     main_room._data.breakout_rooms[breakout_room_jid] = subject;
199
     main_room._data.breakout_rooms[breakout_room_jid] = subject;
200
+    main_room._data.breakout_rooms_active = true;
200
     -- Make room persistent - not to be destroyed - if all participants join breakout rooms.
201
     -- Make room persistent - not to be destroyed - if all participants join breakout rooms.
201
     main_room:set_persistent(true);
202
     main_room:set_persistent(true);
202
     main_room:save(true);
203
     main_room:save(true);
300
     local main_room, main_room_jid = get_main_room(breakout_room.jid);
301
     local main_room, main_room_jid = get_main_room(breakout_room.jid);
301
 
302
 
302
     -- Only allow existent breakout rooms to be started.
303
     -- Only allow existent breakout rooms to be started.
303
-    -- Authorisation of breakout rooms is done by their random uuid suffix
304
+    -- Authorisation of breakout rooms is done by their random uuid name
304
     if main_room and main_room._data.breakout_rooms and main_room._data.breakout_rooms[breakout_room.jid] then
305
     if main_room and main_room._data.breakout_rooms and main_room._data.breakout_rooms[breakout_room.jid] then
305
         breakout_room._data.subject = main_room._data.breakout_rooms[breakout_room.jid];
306
         breakout_room._data.subject = main_room._data.breakout_rooms[breakout_room.jid];
306
         breakout_room.save();
307
         breakout_room.save();
320
 
321
 
321
     local main_room = get_main_room(room.jid);
322
     local main_room = get_main_room(room.jid);
322
 
323
 
323
-    if jid_node(event.occupant.jid) ~= 'focus' then
324
-        broadcast_breakout_rooms(room.jid);
325
-    end
324
+    if main_room._data.breakout_rooms_active then
325
+        if jid_node(event.occupant.jid) ~= 'focus' then
326
+            broadcast_breakout_rooms(room.jid);
327
+        end
326
 
328
 
327
-    -- Prevent closing all rooms if a participant has joined (see on_occupant_left).
328
-    if (main_room._data.is_close_all_scheduled) then
329
-        main_room._data.is_close_all_scheduled = false;
330
-        main_room:save();
329
+        -- Prevent closing all rooms if a participant has joined (see on_occupant_left).
330
+        if main_room._data.is_close_all_scheduled then
331
+            main_room._data.is_close_all_scheduled = false;
332
+            main_room:save();
333
+        end
331
     end
334
     end
332
 end
335
 end
333
 
336
 
367
 
370
 
368
     local main_room, main_room_jid = get_main_room(room.jid);
371
     local main_room, main_room_jid = get_main_room(room.jid);
369
 
372
 
370
-    if jid_node(event.occupant.jid) ~= 'focus' then
373
+    if main_room._data.breakout_rooms_active and jid_node(event.occupant.jid) ~= 'focus' then
371
         broadcast_breakout_rooms(room.jid);
374
         broadcast_breakout_rooms(room.jid);
372
     end
375
     end
373
 
376
 
374
     -- Close the conference if all left for good.
377
     -- Close the conference if all left for good.
375
-    if not main_room._data.is_close_all_scheduled and not exist_occupants_in_rooms(main_room) then
378
+    if main_room._data.breakout_rooms_active and not main_room._data.is_close_all_scheduled and not exist_occupants_in_rooms(main_room) then
376
         main_room._data.is_close_all_scheduled = true;
379
         main_room._data.is_close_all_scheduled = true;
377
         main_room:save(true);
380
         main_room:save(true);
378
         module:add_timer(ROOMS_TTL_IF_ALL_LEFT, function()
381
         module:add_timer(ROOMS_TTL_IF_ALL_LEFT, function()
379
             if main_room._data.is_close_all_scheduled then
382
             if main_room._data.is_close_all_scheduled then
380
-                --module:log('info', 'Closing conference %s as all left for good.', main_room_jid);
383
+                module:log('info', 'Closing conference %s as all left for good.', main_room_jid);
381
                 main_room:set_persistent(false);
384
                 main_room:set_persistent(false);
382
                 main_room:save(true);
385
                 main_room:save(true);
383
                 main_room:destroy(main_room_jid, 'All occupants left.');
386
                 main_room:destroy(main_room_jid, 'All occupants left.');

Loading…
Annulla
Salva