Get the list of rooms

“netstat -anlp | grep 5280” gives an empty result.

Maybe my nginx config is broken?

This isn’t a nginx error. I think you have a configuration issue elsewhere.

i had an error in my localhost.cfg.lua, now after i call netstat i get this:

tcp 0 0 0.0.0.0:5280 0.0.0.0:* LISTEN 922/lua5.2
tcp 0 0 127.0.0.1:38330 127.0.0.1:5280 TIME_WAIT -
tcp 0 0 127.0.0.1:5280 127.0.0.1:38332 TIME_WAIT -
tcp 0 0 127.0.0.1:5280 127.0.0.1:38356 ESTABLISHED 922/lua5.2
tcp 0 0 127.0.0.1:5280 127.0.0.1:38344 TIME_WAIT -
tcp 0 0 127.0.0.1:38334 127.0.0.1:5280 TIME_WAIT -
tcp 0 0 127.0.0.1:38342 127.0.0.1:5280 TIME_WAIT -
tcp 0 0 127.0.0.1:42452 127.0.1.1:5280 TIME_WAIT -
tcp 0 0 127.0.0.1:38340 127.0.0.1:5280 TIME_WAIT -
tcp 0 0 127.0.0.1:38356 127.0.0.1:5280 ESTABLISHED 818/nginx: worker p
tcp 0 0 127.0.0.1:5280 127.0.0.1:38346 TIME_WAIT -
tcp 0 0 127.0.0.1:38336 127.0.0.1:5280 TIME_WAIT -
tcp 0 0 127.0.0.1:38350 127.0.0.1:5280 TIME_WAIT -
tcp 0 0 127.0.0.1:5280 127.0.0.1:38352 TIME_WAIT -
tcp 0 0 127.0.0.1:38348 127.0.0.1:5280 TIME_WAIT -
tcp 0 0 127.0.0.1:42484 127.0.1.1:5280 TIME_WAIT -
tcp 0 0 127.0.0.1:38338 127.0.0.1:5280 TIME_WAIT -
tcp6 0 0 :::5280 :::* LISTEN 922/lua5.2

I tried the curl commands again: “curl https://localhost:5280/room

and i get a timeout, besides that i tried “/sessions” and that worked.

Great! Your getting closer. Now you just need to see what’s going on with /rooms. It all in the same module. In any event, you have it (mostly) working now - it’s at least configured properly on the server side for local access. The mapping through Nginx should also work. I’d watch the Prosody logs to see if there are errors as you make various curl / web requests. Good luck!

1 Like

Can you please upload the request structure? For example:

Url: https://example.com
Method: Get
Body: { key: “value”},
header:

I’m getting 404 error please explain in full steps @corby

my
netstat -anlp | grep 5280

tcp 0 0 0.0.0.0:5280 0.0.0.0:* LISTEN 15492/lua5.2
tcp6 0 0 :::5280 :::* LISTEN 15492/lua5.2
tcp6 0 0 :::5280 :::* LISTEN 17774/lua5.2

example.com/rooms?jwt=xxxxxxxx
is this the right way of getting room-list ?

I have also enabled the admin module so I can specify admin in jwt payload
in the postman, it says “Could not get response”

@corby @simonf @hasgardee @damencho

I cant provide any information about jwt authentication, cuz we havent enabled that.

Steps:

  1. enable the lua module in "/etc/prosody/conf.avail/[yourdomain].cfg.lua:
    modules_enabled = {

    “muc_size” <- this is the module you need to enable
    }

For the rooms i didnt have to make any changes in “mod_muc_size.lua”!

  1. Add those lines in the nginx conf “/etc/nginx/[yourdomain].conf”:

    location = /room {
    add_header Access-Control-Allow-Origin *;
    proxy_pass http://localhost:5280;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $remote_addr;
    }

After that i could get information about a room with this URL:
https://[yourdomain]/room?room=test&domain=[yourdomain]

You have to replace “test” with the room you want information about, if the room doesnt exist i get an error. That said, make sure the room exists e.g. start a meeting: https://[yourdomain]/test

It looks like your URL is lacking some parameters: “?room=test&domain=[yourdomain]”

Logs are located at:
“/var/log/prosody/err.log”, check that file for erros reported by prosody

I hope i could provide you with some general information, i cant make any statements on JWT tho.

Greetings Simon

EDIT:
if u enable the module in your localhost config “/etc/prosody/conf.avail/localhost.cfg.lua” aswell,
you can ssh into the server and call it like this " curl “http://localhost:5280/room?room=[room]&domain=[yourdomain]”, replace [yourdomain] with your actual domain the server is running on and replace [room] with the room you want to have information about:

e.g. curl “http://localhost:5280/room?room=test&domain=private.meetingserver.stream

Hi,

I am getting response /sessions and /all-rooms both. But I am getting it only when I am querying with http, when I change it to https- it does not work.
If I make a call to http://mydomain:5280/sessions from other than postman or from chrome, it does an internal redirect to https.

Please help me with a solution.

@damencho, Thank you for all your articles in the Jitsi community. Can you help me to get the occupant list (display names) with step by step instructions?

Hello, *
thank you for you comments :smiley:
I want to get something like you did

but unfortunately I added your code to mod_muc_size .
Then I reset the prosody and restarted nginx and try to get information by doing a request to the address https://my_domain.com:5280/nbConfPart . Don’t work…
Let me tell you what I did, maybe you find an error :

**1/ Allowed the port 5280 on my firewall (ufw) **

sudo ufw allow 5280

2/This is my prosody localhost virtual host looks like (/etc/prosody/conf.d/localhost.cfg.lua)

*-- Section for localhost
plugin_paths = { “/usr/share/jitsi-meet/prosody-plugins/” }

– This allows clients to connect to localhost. No harm in it.
VirtualHost “localhost”
– enabled = false – Remove this line to enable this host
app_id=""
app_secret=""
authentication = “anonymous”
modules_enabled = {
“muc_size”;
}

3/This is my prosody domain virtual host looks like (/etc/prosody/conf.d/domain.cfg.lua)

VirtualHost “domain”
– enabled = false – Remove this line to enable this host
authentication = “anonymous”
– Properties below are modified by jitsi-meet-tokens package config
– and authentication above is switched to “token”
–app_id=“example_app_id”
–app_secret=“example_app_secret”
– Assign this host a certificate for TLS, otherwise it would use the one
– set in the global section (if any).
– Note that old-style SSL on port 5223 only supports one certificate, and will al>
– use the global one.
ssl = {
key = “/etc/prosody/certs/domain.key”;
certificate = “/etc/prosody/certs/domain.crt”;
}
av_moderation_component = “avmoderation.domain”
speakerstats_component = “speakerstats.domain”
conference_duration_component = “conferenceduration.domain”
– we need bosh
modules_enabled = {
“bosh”;
“pubsub”;
“ping”; – Enable mod_ping
“muc_size”;
“speakerstats”;
“external_services”;
“conference_duration”;
“muc_lobby_rooms”;
“av_moderation”;
}

4/This is my mod_muc_size.lua looks like (/usr/share/jitsi-meet/prosody-plugins/mod_muc_size.lua) :

– Prosody IM
– Copyright (C) 2017 Atlassian

local jid = require “util.jid”;
local it = require “util.iterators”;
local json = require “util.json”;
local iterators = require “util.iterators”;
local array = require"util.array";

local have_async = pcall(require, “util.async”);
if not have_async then
module:log(“error”, “requires a version of Prosody with util.async”);
return;
end

local async_handler_wrapper = module:require “util”.async_handler_wrapper;

local tostring = tostring;
local neturl = require “net.url”;
local parse = neturl.parseQuery;

– option to enable/disable room API token verifications
local enableTokenVerification
= module:get_option_boolean(“enable_roomsize_token_verification”, false);

local token_util = module:require “token/util”.new(module);
local get_room_from_jid = module:require “util”.get_room_from_jid;

– no token configuration but required
if token_util == nil and enableTokenVerification then
log(“error”, “no token configuration but it is required”);
return;
end

– required parameter for custom muc component prefix,
– defaults to “conference”
local muc_domain_prefix
= module:get_option_string(“muc_mapper_domain_prefix”, “conference”);

— Verifies room name, domain name with the values in the token
@param token the token we received
@param room_address the full room address jid
@return true if values are ok or false otherwise
function verify_token(token, room_address)
if not enableTokenVerification then
return true;
end

-- if enableTokenVerification is enabled and we do not have token
-- stop here, cause the main virtual host can have guest access enabled
-- (allowEmptyToken = true) and we will allow access to rooms info without
-- a token
if token == nil then
    log("warn", "no token provided");
    return false;
end

local session = {};
session.auth_token = token;
local verified, reason = token_util:process_and_verify_token(session);
if not verified then
    log("warn", "not a valid token %s", tostring(reason));
    return false;
end

if not token_util:verify_room(session, room_address) then
    log("warn", "Token %s not allowed to join: %s",
        tostring(token), tostring(room_address));
    return false;
end

return true;

end

— Handles request for retrieving the room size
@param event the http event, holds the request query
@return GET response, containing a json with participants count,
– tha value is without counting the focus.
function handle_get_room_size(event)
if (not event.request.url.query) then
return { status_code = 400; };
end

local params = parse(event.request.url.query);
local room_name = params[“room”];
local domain_name = params[“domain”];
local subdomain = params[“subdomain”];

local room_address
    = jid.join(room_name, muc_domain_prefix.."."..domain_name);

if subdomain and subdomain ~= "" then
    room_address = "["..subdomain.."]"..room_address;
end

if not verify_token(params["token"], room_address) then
    return { status_code = 403; };
end

local room = get_room_from_jid(room_address);
local participant_count = 0;

log(“debug”, “Querying room %s”, tostring(room_address));

if room then
local occupants = room._occupants;
if occupants then
participant_count = iterators.count(room:each_occupant());
end
log(“debug”,
“there are %s occupants in room”, tostring(participant_count));
else
log(“debug”, “no such room exists”);
return { status_code = 404; };
end

if participant_count > 1 then
participant_count = participant_count - 1;
end

return { status_code = 200; body = [[{“participants”:]]…participant_count…[[}]] };
end

— Handles request for retrieving the room participants details
@param event the http event, holds the request query
@return GET response, containing a json with participants details
function handle_get_room (event)
if (not event.request.url.query) then
return { status_code = 400; };
end

local params = parse(event.request.url.query);
local room_name = params[“room”];
local domain_name = params[“domain”];
local subdomain = params[“subdomain”];
local room_address
= jid.join(room_name, muc_domain_prefix…"."…domain_name);

if subdomain and subdomain ~= "" then
    room_address = "["..subdomain.."]"..room_address;
end

if not verify_token(params["token"], room_address) then
    return { status_code = 403; };
end

local room = get_room_from_jid(room_address);
local participant_count = 0;
local occupants_json = array();

log(“debug”, “Querying room %s”, tostring(room_address));

if room then
local occupants = room._occupants;
if occupants then
participant_count = iterators.count(room:each_occupant());
for _, occupant in room:each_occupant() do
– filter focus as we keep it as hidden participant
if string.sub(occupant.nick,-string.len("/focus"))~="/focus" then
for _, pr in occupant:each_session() do
local nick = pr:get_child_text(“nick”, “http://jabber.org/protocol/nick”) or “”;
local email = pr:get_child_text(“email”) or “”;
occupants_json:push({
jid = tostring(occupant.nick),
email = tostring(email),
display_name = tostring(nick)});
end
end
end
end
log(“debug”,
“there are %s occupants in room”, tostring(participant_count));
else
log(“debug”, “no such room exists”);
return { status_code = 404; };
end

if participant_count > 1 then
participant_count = participant_count - 1;
end

return { status_code = 200; body = json.encode(occupants_json); };
end;

function tablelength(T)
local hash = {}
local res = {}

    for _,v in ipairs(T) do
       if (not hash[v]) then
           res[#res+1] = v
           hash[v] = true
       end
    end

    local count = 0
    for _ in pairs(res) do count = count + 1 end
    return count

end

function getNbConfPart()
local result={};

for key, value in pairs(prosody.full_sessions) do
        if value["jitsi_bosh_query_room"] then
            if result[value["jitsi_bosh_query_room"]] then
                    result[value["jitsi_bosh_query_room"]] = result[value["jitsi_bosh_query_room"]] + 1;
            else
                    result[value["jitsi_bosh_query_room"]] = 1;
            end
        end
end

return { status_code = 200; body = json.encode(result); };

end

function module.load()
module:depends(“http”);
module:provides(“http”, {
default_path = “/”;
route = {
[“GET room-size”] = function (event) return async_handler_wrapper(event,handle_get_room_size) end;
[“GET sessions”] = function () return tostring(it.count(it.keys(prosody.full_sessions))); end;
[“GET room”] = function (event) return async_handler_wrapper(event,handle_get_room) end;
[“GET nbConfPart”] = function (event) return async_handler_wrapper(event,getNbConfPart) end;
};
});
end

5/This is my nginx domain.conf looks like (/etc/nginx/sites-enabled/domain.conf) :

server_names_hash_bucket_size 64;

types {

nginx’s default mime.types doesn’t include a mapping for wasm

application/wasm     wasm;

}
server {
listen 80;
listen [::]:80;
server_name domain;

location ^~ /.well-known/acme-challenge/ {
    default_type "text/plain";
    root         /usr/share/jitsi-meet;
}
location = /.well-known/acme-challenge/ {
    return 404;
}
location / {
    return 301 https://$host$request_uri;
}

}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name domain;

# Mozilla Guideline v5.4, nginx 1.17.7, OpenSSL 1.1.1d, intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;  # about 40000 sessions
ssl_session_tickets off;

add_header Strict-Transport-Security "max-age=63072000" always;
set $prefix "";

ssl_certificate /etc/letsencrypt/live/domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain/privkey.pem;

root /usr/share/jitsi-meet;

# ssi on with javascript for multidomain variables in config.js
ssi on;
ssi_types application/x-javascript application/javascript;

index index.html index.htm;
error_page 404 /static/404.html;

gzip on;
gzip_types text/plain text/css application/javascript application/json image/x-icon application/octet-stream application/wasm;
gzip_vary on;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 512;

location = /config.js {
    alias /etc/jitsi/meet/domain-config.js;
}

location = /external_api.js {
    alias /usr/share/jitsi-meet/libs/external_api.min.js;
}

# ensure all static content can always be found first
location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$
{
    add_header 'Access-Control-Allow-Origin' '*';
    alias /usr/share/jitsi-meet/$1/$2;

    # cache all versioned files
    if ($arg_v) {
        expires 1y;
    }
}

# BOSH
location = /http-bind {
    proxy_pass http://127.0.0.1:5280/http-bind?prefix=$prefix&$args;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $http_host;
}

# xmpp websockets
location = /xmpp-websocket {
    proxy_pass http://127.0.0.1:5280/xmpp-websocket?prefix=$prefix&$args;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $http_host;
    tcp_nodelay on;
}
location /nbConfPart {
proxy_pass      http://127.0.0.1:5280/nbConfPart;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;

}

location /room {
proxy_pass http://127.0.0.1:5280/room;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}

# colibri (JVB) websockets for jvb1
location ~ ^/colibri-ws/default-id/(.*) {
    proxy_pass https://127.0.0.1:9090/colibri-ws/default-id/$1$is_args$args;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    tcp_nodelay on;
}

# load test minimal client, uncomment when used
#location ~ ^/_load-test/([^/?&:'"]+)$ {
#    rewrite ^/_load-test/(.*)$ /load-test/index.html break;
#}
#location ~ ^/_load-test/libs/(.*)$ {
#    add_header 'Access-Control-Allow-Origin' '*';
#    alias /usr/share/jitsi-meet/load-test/libs/$1;
#}

location ~ ^/([^/?&:'"]+)$ {
    try_files $uri @root_path;
}

location @root_path {
    rewrite ^/(.*)$ / break;
}

location ~ ^/([^/?&:'"]+)/config.js$
{
    set $subdomain "$1.";
    set $subdir "$1/";

    alias /etc/jitsi/meet/vps-8ca148e9.vps.ovh.ca-config.js;
}

# BOSH for subdomains
location ~ ^/([^/?&:'"]+)/http-bind {
    set $subdomain "$1.";
    set $subdir "$1/";
    set $prefix "$1";

    rewrite ^/(.*)$ /http-bind;
}

# websockets for subdomains
location ~ ^/([^/?&:'"]+)/xmpp-websocket {
    set $subdomain "$1.";
    set $subdir "$1/";
    set $prefix "$1";

    rewrite ^/(.*)$ /xmpp-websocket;
}

# Anything that didn't match above, and isn't a real file, assume it's a room name and redirect to /
location ~ ^/([^/?&:'"]+)/(.*)$ {
    set $subdomain "$1.";
    set $subdir "$1/";
    rewrite ^/([^/?&:'"]+)/(.*)$ /$2;
}

}

6/ I installed also net-url

I appreciate your help :slight_smile:

I have the same problem as him. I will be happy if you answer me as soon as possible

Maybe start with what is not working … have you checked prosody logs, what they tell you?
Guessing that is hard :slightly_smiling_face:

2 Likes

Thank you Damencho for your quick answer :slight_smile:
Here is my prosody logs file :

/usr/lib/prosody/util/async.lua:127: in function </usr/lib/prosody/util/async.lua:125>
Sep 19 07:17:20 portmanager info Activated service ‘http’ on []:5280, [::]:5280
Sep 19 07:17:20 portmanager error Error binding encrypted port for https: No certificate present in SSL/TLS configuration for https port 5281
Sep 19 07:17:20 portmanager error Error binding encrypted port for https: No certificate present in SSL/TLS configuration for https port 5281
Sep 19 07:17:20 portmanager info Activated service ‘https’ on no ports
Sep 19 07:17:20 portmanager info Activated service ‘c2s’ on [
]:5222, [::]:5222
Sep 19 07:17:20 portmanager info Activated service ‘legacy_ssl’ on no ports
Sep 19 07:17:20 speakerstats.vps-8ca148e9.vps.ovh.ca:speakerstats_component info Hook to muc events on conference.vps-8ca148e9.vps.ovh.ca
Sep 19 07:17:20 conference.vps-8ca148e9.vps.ovh.ca:muc_domain_mapper info Loading mod_muc_domain_mapper for host conference.vps-8ca148e9.vps.ovh.ca!
Sep 19 07:17:20 conference.vps-8ca148e9.vps.ovh.ca:muc_domain_mapper info Loading mod_muc_domain_mapper for host vps-8ca148e9.vps.ovh.ca!
Sep 19 07:17:20 conference.vps-8ca148e9.vps.ovh.ca:muc_domain_mapper info Loading mod_muc_domain_mapper for host speakerstats.vps-8ca148e9.vps.ovh.ca!
Sep 19 07:17:20 conference.vps-8ca148e9.vps.ovh.ca:muc_domain_mapper info Loading mod_muc_domain_mapper for host internal.auth.vps-8ca148e9.vps.ovh.ca!
Sep 19 07:17:20 vps-8ca148e9.vps.ovh.ca:muc_lobby_rooms info Lobby component loaded lobby.vps-8ca148e9.vps.ovh.ca
Sep 19 07:17:20 conference.vps-8ca148e9.vps.ovh.ca:muc_domain_mapper info Loading mod_muc_domain_mapper for host lobby.vps-8ca148e9.vps.ovh.ca!
Sep 19 07:17:20 conference.vps-8ca148e9.vps.ovh.ca:muc_domain_mapper info Loading mod_muc_domain_mapper for host conferenceduration.vps-8ca148e9.vps.ovh.ca!
Sep 19 07:17:20 general info Starting conference duration timer for conference.vps-8ca148e9.vps.ovh.ca
Sep 19 07:17:20 conferenceduration.vps-8ca148e9.vps.ovh.ca:conference_duration_component info Hook to muc events on conference.vps-8ca148e9.vps.ovh.ca
Sep 19 07:17:20 conference.vps-8ca148e9.vps.ovh.ca:muc_domain_mapper info Loading mod_muc_domain_mapper for host avmoderation.vps-8ca148e9.vps.ovh.ca!
Sep 19 07:17:20 avmoderation.vps-8ca148e9.vps.ovh.ca:av_moderation_component info Starting av_moderation for conference.vps-8ca148e9.vps.ovh.ca
Sep 19 07:17:20 avmoderation.vps-8ca148e9.vps.ovh.ca:av_moderation_component info Hook to muc events on conference.vps-8ca148e9.vps.ovh.ca
Sep 19 07:17:20 conference.vps-8ca148e9.vps.ovh.ca:muc_domain_mapper info Loading mod_muc_domain_mapper for host localhost!
Sep 19 07:17:20 modulemanager error Error initializing module ‘muc_size’ on ‘localhost’: /usr/lib/prosody/util/startup.lua:145: module ‘basexx’ not found:No LuaRocks module found for basexx
no field package.preload[‘basexx’]
no file ‘/usr/lib/prosody/basexx.lua’
no file ‘/usr/local/share/lua/5.2/basexx.lua’
no file ‘/usr/local/share/lua/5.2/basexx/init.lua’
no file ‘/usr/local/lib/lua/5.2/basexx.lua’
no file ‘/usr/local/lib/lua/5.2/basexx/init.lua’
no file ‘/usr/share/lua/5.2/basexx.lua’
no file ‘/usr/share/lua/5.2/basexx/init.lua’
no file ‘/var/lib/prosody/.luarocks/share/lua/5.2/basexx.lua’
no file ‘/var/lib/prosody/.luarocks/share/lua/5.2/basexx/init.lua’
no file ‘/usr/lib/prosody/basexx.so’
no file ‘/usr/local/lib/lua/5.2/basexx.so’
no file ‘/usr/lib/x86_64-linux-gnu/lua/5.2/basexx.so’
no file ‘/usr/lib/lua/5.2/basexx.so’
no file ‘/usr/local/lib/lua/5.2/loadall.so’
no file ‘/var/lib/prosody/.luarocks/lib/lua/5.2/basexx.so’
stack traceback:
[C]: in function ‘_real_require’
/usr/lib/prosody/util/startup.lua:145: in function ‘require’
/usr/share/jitsi-meet/prosody-plugins/token/util.lib.lua:4: in main chunk
(…tail calls…)
/usr/share/jitsi-meet/prosody-plugins/mod_muc_size.lua:27: in main chunk
[C]: in function ‘xpcall’
/usr/lib/prosody/core/modulemanager.lua:183: in function ‘do_load_module’
/usr/lib/prosody/core/modulemanager.lua:261: in function ‘load’
/usr/lib/prosody/core/modulemanager.lua:83: in function ‘?’
/usr/lib/prosody/util/events.lua:79: in function </usr/lib/prosody/util/events.lua:75>
(…tail calls…)
/usr/lib/prosody/core/hostmanager.lua:108: in function ‘activate’
/usr/lib/prosody/core/hostmanager.lua:58: in function ‘?’
/usr/lib/prosody/util/events.lua:79: in function </usr/lib/prosody/util/events.lua:75>
(…tail calls…)
/usr/lib/prosody/util/startup.lua:337: in function ‘prepare_to_start’
/usr/lib/prosody/util/startup.lua:558: in function ‘f’
/usr/lib/prosody/util/async.lua:139: in function ‘func’
/usr/lib/prosody/util/async.lua:127: in function </usr/lib/prosody/util/async.lua:125>
Sep 19 07:17:20 conference.vps-8ca148e9.vps.ovh.ca:muc_domain_mapper info Loading mod_muc_domain_mapper for host focus.vps-8ca148e9.vps.ovh.ca!
Sep 19 07:17:20 conference.vps-8ca148e9.vps.ovh.ca:muc_domain_mapper info Loading mod_muc_domain_mapper for host auth.vps-8ca148e9.vps.ovh.ca!
Sep 19 07:17:23 c2s558f91cdb270 info Client connected
Sep 19 07:17:23 c2s558f91cdb270 info Stream encrypted (TLSv1.3 with TLS_AES_256_GCM_SHA384)
Sep 19 07:17:23 c2s558f91cdb270 info Authenticated as jvb@auth.vps-8ca148e9.vps.ovh.ca
Sep 19 07:17:29 mod_bosh info Client tried to use sid ‘00c38b8e-0518-4a0c-9055-1d503159132e’ which we don’t know about
Sep 19 07:17:29 mod_bosh info Client tried to use sid ‘00c38b8e-0518-4a0c-9055-1d503159132e’ which we don’t know about
Sep 19 07:17:30 c2s558f91dc7820 info Client connected
Sep 19 07:17:30 c2s558f91dc7820 info Stream encrypted (TLSv1.3 with TLS_AES_256_GCM_SHA384)
Sep 19 07:17:30 c2s558f91dc7820 info Authenticated as focus@auth.vps-8ca148e9.vps.ovh.ca
Sep 19 07:17:49 mod_bosh info New BOSH session, assigned it sid ‘4417b759-b4ad-4874-8afa-a9a778b9b755’
Sep 19 07:17:50 bosh4417b759-b4ad-4874-8afa-a9a778b9b755 info Authenticated as ffmuq0_po8a_enuo@vps-8ca148e9.vps.ovh.ca
Sep 19 07:21:29 speakerstats.vps-8ca148e9.vps.ovh.ca:speakerstats_component warn A module has been configured that triggers external events.
Sep 19 07:21:29 speakerstats.vps-8ca148e9.vps.ovh.ca:speakerstats_component warn Implement this lib to trigger external events.
Sep 19 21:11:12 mod_posix info Received SIGHUP
Sep 19 21:11:12 startup info Reloading configuration file

You need to install that package.
luarocks install net.url
Then restart prosody and check do you still have such errors

1 Like

@Khayati_Iteb, You can follow Jitsi Monitoring Mod where you not only can get room name but also the details of room info’s like num of participants, their display name, roles, audio/video status etc in json format.
I faced problems regarding ‘net-url’ module and in TOKEN module which is a dependency in that module. So I had to comment out all the lines that was dependent on that as it wasn’t necessary and it worked fine.

Hope this helps. And please use “hide details” or simple ``` this for both start and end of big logs so that the readers won’t have to scroll infinite logs just to see next post…!

Edit : I had to comment out token related lines… I was able to install net-url module later

1 Like

@damencho Thank you for you answer :slight_smile: but I already installed net-url
the error in the log was before installing the net-url
@Fuji I appreciate also your help ^^
I tried what they did but I’m having this error now :
it seems that I’m missing this package.preload[‘luajwtjitsi’]

Sep 21 00:04:56 vps-8ca148e9.vps.ovh.ca systemd[1]: Started Prosody XMPP Server.
Sep 21 00:04:57 vps-8ca148e9.vps.ovh.ca prosody[57514]: portmanager: Error binding encrypted port for https: No certificate present in SSL/TLS configuration>
Sep 21 00:04:57 vps-8ca148e9.vps.ovh.ca prosody[57514]: portmanager: Error binding encrypted port for https: No certificate present in SSL/TLS configuration>
Sep 21 00:04:57 vps-8ca148e9.vps.ovh.ca prosody[57514]: modulemanager: Error initializing module 'muc_status' on 'vps-8ca148e9.vps.ovh.ca': /usr/lib/prosody>
                                                                no field package.preload['luajwtjitsi']
                                                                no file '/usr/lib/prosody/luajwtjitsi.lua'
                                                                no file '/usr/local/share/lua/5.2/luajwtjitsi.lua'
                                                                no file '/usr/local/share/lua/5.2/luajwtjitsi/init.lua'
                                                                no file '/usr/local/lib/lua/5.2/luajwtjitsi.lua'
                                                                no file '/usr/local/lib/lua/5.2/luajwtjitsi/init.lua'
                                                                no file '/usr/share/lua/5.2/luajwtjitsi.lua'
                                                                no file '/usr/share/lua/5.2/luajwtjitsi/init.lua'
                                                                no file '/var/lib/prosody/.luarocks/share/lua/5.2/luajwtjitsi.lua'
                                                                no file '/var/lib/prosody/.luarocks/share/lua/5.2/luajwtjitsi/init.lua'
                                                                no file '/usr/lib/prosody/luajwtjitsi.so'
                                                                no file '/usr/local/lib/lua/5.2/luajwtjitsi.so'
                                                                no file '/usr/lib/x86_64-linux-gnu/lua/5.2/luajwtjitsi.so'
                                                                no file '/usr/lib/lua/5.2/luajwtjitsi.so'
                                                                no file '/usr/local/lib/lua/5.2/loadall.so'
                                                                no file '/var/lib/prosody/.luarocks/lib/lua/5.2/luajwtjitsi.so'
                                                        stack traceback:
                                                                [C]: in function '_real_require'
                                                                /usr/lib/prosody/util/startup.lua:145: in function 'require'
                                                                /usr/share/jitsi-meet/prosody-plugins/token/util.lib.lua:7: in main chunk
                                                                (...tail calls...)
                                                                /usr/share/jitsi-meet/prosody-plugins/mod_muc_status.lua:27: in main chunk
                                                                [C]: in function 'xpcall'
                                                                /usr/lib/prosody/core/modulemanager.lua:183: in function 'do_load_module'
                                                                /usr/lib/prosody/core/modulemanager.lua:261: in function 'load'
                                                                /usr/lib/prosody/core/modulemanager.lua:83: in function '?'
                                                                /usr/lib/prosody/util/events.lua:79: in function </usr/lib/prosody/util/events.lua:75>
                                                                (...tail calls...)
                                                                /usr/lib/prosody/core/hostmanager.lua:108: in function 'activate'
                                                                /usr/lib/prosody/core/hostmanager.lua:58: in function '?'
                                                                /usr/lib/prosody/util/events.lua:79: in function </usr/lib/prosody/util/events.lua:75>
                                                                (...tail calls...)
                                                                /usr/lib/prosody/util/startup.lua:337: in function 'prepare_to_start'
                                                                /usr/lib/prosody/util/startup.lua:558: in function 'f'
                                                                /usr/lib/prosody/util/async.lua:139: in function 'func'
                                                                /usr/lib/prosody/util/async.lua:127: in function </usr/lib/prosody/util/async.lua:125

You can install and that jitsi-meet/jitsi-meet-tokens.postinst at 4cd5be9d8b757b01573ec49fbc7a829fc3fd00b3 · jitsi/jitsi-meet · GitHub

1 Like


this what I get when I try to install it :frowning:

@damencho is this the right way to configure nginx :
I edited nginx mydomain.conf like this (/etc/nginx/sites-enabled/mydomain.conf) :

server {
listen 443 ssl;
listen [::]:443 ssl;

location = /xmpp-websocket {
proxy_pass http://localhost:5280/xmpp-websocket?prefix=$prefix&$args;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $http_host;
tcp_nodelay on;
}
location /nbConfPart {
proxy_pass htt*://localhost:5280/nbConfPart;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}

location /room {
proxy_pass htt*://localhost:5280/room;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}

}