"Fossies" - the Fresh Open Source Software Archive

Member "jitsi-meet-7309/resources/prosody-plugins/mod_muc_census.lua" (31 May 2023, 2664 Bytes) of package /linux/misc/jitsi-meet-7309.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Lua source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 -- provides an http endpoint at /room-census that reports list of rooms with the
    2 -- number of members and created date in this JSON format:
    3 --
    4 --     {
    5 --         "room_census": [
    6 --             {
    7 --                 "room_name": "<muc name>",
    8 --                 "participants": <# participants>,
    9 --                 "created_time": <unix timestamp>,
   10 --             },
   11 --             ...
   12 --         ]
   13 --     }
   14 --
   15 -- to activate, add "muc_census" to the modules_enabled table in prosody.cfg.lua
   16 --
   17 -- warning: this module is unprotected and intended for server admin use only.
   18 -- when enabled, make sure to secure the endpoint at the web server or via
   19 -- network filters
   20 
   21 local jid = require "util.jid";
   22 local json = require "util.json";
   23 local iterators = require "util.iterators";
   24 local util = module:require "util";
   25 local is_healthcheck_room = util.is_healthcheck_room;
   26 
   27 local have_async = pcall(require, "util.async");
   28 if not have_async then
   29     module:log("error", "requires a version of Prosody with util.async");
   30     return;
   31 end
   32 
   33 local async_handler_wrapper = module:require "util".async_handler_wrapper;
   34 
   35 local tostring = tostring;
   36 
   37 -- required parameter for custom muc component prefix, defaults to "conference"
   38 local muc_domain_prefix = module:get_option_string("muc_mapper_domain_prefix", "conference");
   39 
   40 --- handles request to get number of participants in all rooms
   41 -- @return GET response
   42 function handle_get_room_census(event)
   43     local host_session = prosody.hosts[muc_domain_prefix .. "." .. tostring(module.host)]
   44     if not host_session or not host_session.modules.muc then
   45         return { status_code = 400; }
   46     end
   47 
   48     room_data = {}
   49     for room in host_session.modules.muc.each_room() do
   50         if not is_healthcheck_room(room.jid) then
   51             local occupants = room._occupants;
   52             if occupants then
   53                 participant_count = iterators.count(room:each_occupant()) - 1; -- subtract focus
   54             else
   55                 participant_count = 0
   56             end
   57             table.insert(room_data, {
   58                 room_name = room.jid;
   59                 participants = participant_count;
   60                 created_time = room.created_timestamp;
   61             });
   62         end
   63     end
   64 
   65     census_resp = json.encode({
   66         room_census = room_data;
   67     });
   68     return { status_code = 200; body = census_resp }
   69 end
   70 
   71 function module.load()
   72     module:depends("http");
   73         module:provides("http", {
   74                 default_path = "/";
   75                 route = {
   76                         ["GET room-census"] = function (event) return async_handler_wrapper(event,handle_get_room_census) end;
   77                 };
   78         });
   79 end