jitsi / jitsi-meet

Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.
https://jitsi.org/meet
Apache License 2.0
23.14k stars 6.72k forks source link

Special chars in meeting name break "End meeting for all" #12607

Open dicer opened 1 year ago

dicer commented 1 year ago

Description:

When a meeting is named with a special character in the name, like a German umlaut, the moderator button "End meeting for all" doesn't seem to do anything.

Steps to reproduce:

  1. Open a meeting with the name büro
  2. Make sure you are logged in as a moderator
  3. Click the hang up button, then click the "End meeting for all" button

Expected behavior:

The call should be ended for all participants.

Actual behavior:

The button can be clicked but nothing happens afterwards. The button works fine as soon as you have a meeting name without the umlaut e.g. buro instead of büro

Server information:

Client information:

saghul commented 1 year ago

Can you please share your browser console logs?

dicer commented 1 year ago

When I hit the button, nothing gets logged. Or do you also need the logs before? When I enter that meeting?

saghul commented 1 year ago

Perhaps there is an error in prosody, can you check that?

dicer commented 1 year ago

Not an error, but a warning:

c2s556c785f1110                                              info       Client connected
c2s556c785f1110                                              info       Authenticated as essgk_yj-q2cu1swcyfaolnk@guest.meet.jitsi
endconference.meet.jitsi:end_conference                      warn       No room found found for /b%25c3%25bcro
saghul commented 1 year ago

Aha, there it is. What was the original room name?

dicer commented 1 year ago

büro

saghul commented 1 year ago

I have a tentative fix here: https://github.com/jitsi/jitsi-meet/pull/12613

github-actions[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

saghul commented 1 year ago

I'll try to pick this back up next week.

devharipragaz007 commented 8 months ago

is the issue still open? Shall I give it a try?

dicer commented 8 months ago

I just tried again and it seems to work for me now. Even break out rooms work as expected. Closing

miro-ku commented 7 months ago

Not sure if I should open a new issue. I have similar problem, but End meeting for all doesn't work for me when using tenant url, no special characters in it. So mydomain.com/meetingName works, but mydomain.com/tenantId/meetingName doesn't. I use non-readable strings (it's actually Ids) in room name and set name using subject

No errors shown in browser console. But same error in prosody logs:

2024-03-07 16:52:59 c2s5bb78ea07480 info Authenticated as mbsq8k0wq0ssv9fzqmtiln_6@meet.jitsi
2024-03-07 16:53:03 endconference.meet.jitsi:end_conference warn No room found found for 7spJqIPo6IsGAxjapkZY/hi0uenskokei2zsr9orx
2024-03-07 16:53:05 endconference.meet.jitsi:end_conference warn No room found found for 7spJqIPo6IsGAxjapkZY/hi0uenskokei2zsr9orx

If I use same room name without tenant - it works

2024-03-07 16:53:33 endconference.meet.jitsi:end_conference info Room hi0uenskokei2zsr9orx@muc.meet.jitsi destroyed by occupant wioexspeylrhyzxdzqn915wn@meet.jitsi/EOIx-eCbyuxo

Server information:

Jitsi Meet version: 9258 Operating System: linux x64 docker

damencho commented 7 months ago

This looks like nginx configuration problem, it is not passing the prefix param to bosh or websocket URL. Share your nginx config.

miro-ku commented 7 months ago

@damencho I'm using it in Kubernetes with Jitsi Helm Chart, but here is NGINX config, built from Ingress

NGNIX Config ```lua server { server_name mydomain.com ; listen 80 ; listen 443 ssl http2 ; set $proxy_upstream_name "-"; ssl_certificate_by_lua_block { certificate.call() } location ~* "^/" { set $namespace "jitsi"; set $ingress_name "jitsi-meet-web"; set $service_name "jitsi-meet-web"; set $service_port "80"; set $location_path "/"; set $global_rate_limit_exceeding n; rewrite_by_lua_block { lua_ingress.rewrite({ force_ssl_redirect = false, ssl_redirect = true, force_no_ssl_redirect = false, preserve_trailing_slash = false, use_port_in_redirects = false, global_throttle = { namespace = "", limit = 0, window_size = 0, key = { }, ignored_cidrs = { } }, }) balancer.rewrite() plugins.run() } # be careful with `access_by_lua_block` and `satisfy any` directives as satisfy any # will always succeed when there's `access_by_lua_block` that does not have any lua code doing `ngx.exit(ngx.DECLINED)` # other authentication method such as basic auth or external auth useless - all requests will be allowed. #access_by_lua_block { #} header_filter_by_lua_block { lua_ingress.header() plugins.run() } body_filter_by_lua_block { plugins.run() } log_by_lua_block { balancer.log() monitor.call() plugins.run() } port_in_redirect off; set $balancer_ewma_score -1; set $proxy_upstream_name "jitsi-jitsi-meet-web-80"; set $proxy_host $proxy_upstream_name; set $pass_access_scheme $scheme; set $pass_server_port $server_port; set $best_http_host $http_host; set $pass_port $pass_server_port; set $proxy_alternative_upstream_name ""; client_max_body_size 1m; proxy_set_header Host $best_http_host; # Pass the extracted client certificate to the backend # Allow websocket connections proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Request-ID $req_id; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $best_http_host; proxy_set_header X-Forwarded-Port $pass_port; proxy_set_header X-Forwarded-Proto $pass_access_scheme; proxy_set_header X-Forwarded-Scheme $pass_access_scheme; proxy_set_header X-Scheme $pass_access_scheme; # Pass the original X-Forwarded-For proxy_set_header X-Original-Forwarded-For $http_x_forwarded_for; # mitigate HTTPoxy Vulnerability # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/ proxy_set_header Proxy ""; # Custom headers to proxied server proxy_connect_timeout 5s; proxy_send_timeout 60s; proxy_read_timeout 60s; proxy_buffering off; proxy_buffer_size 4k; proxy_buffers 4 4k; proxy_max_temp_file_size 1024m; proxy_request_buffering on; proxy_http_version 1.1; proxy_cookie_domain off; proxy_cookie_path off; # In case of errors try the next upstream server before returning an error proxy_next_upstream error timeout; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 3; proxy_pass http://upstream_balancer; proxy_redirect off; } } ```
damencho commented 7 months ago

Sorry, I have no idea what this config is. Here is what it needs to look like:

First, it extracts the tenant: https://github.com/jitsi/jitsi-meet/blob/052070a6c1dd7515943bfcc3510437c305fd5fe7/doc/debian/jitsi-meet/jitsi-meet.example#L181

Then pass it to the bosh URL (same and for websocket): https://github.com/jitsi/jitsi-meet/blob/052070a6c1dd7515943bfcc3510437c305fd5fe7/doc/debian/jitsi-meet/jitsi-meet.example#L118

miro-ku commented 7 months ago

Sorry, just realized, that I should look into docker image with jitsi-meet. So the nginx config there looks correct

```lua location = /config.js { alias /config/config.js; } location = /interface_config.js { alias /config/interface_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; } } # colibri (JVB) websockets location ~ ^/colibri-ws/([a-zA-Z0-9-\._]+)/(.*) { tcp_nodelay on; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_pass http://$1:9090/colibri-ws/$1/$2$is_args$args; } # BOSH location = /http-bind { proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host meet.jitsi; proxy_pass http://orch-jitsi-prosody.jitsi.svc.cluster.local:5280/http-bind?prefix=$prefix&$args; } # xmpp websockets location = /xmpp-websocket { tcp_nodelay on; proxy_http_version 1.1; proxy_set_header Connection $connection_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Host meet.jitsi; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://orch-jitsi-prosody.jitsi.svc.cluster.local:5280/xmpp-websocket?prefix=$prefix&$args; } location ~ ^/([^/?&:'"]+)$ { try_files $uri @root_path; } location @root_path { rewrite ^/(.*)$ / break; } # Matches /(TENANT)/pwa-worker.js or /(TENANT)/manifest.json to rewrite to / and look for file location ~ ^/([^/?&:'"]+)/(pwa-worker.js|manifest.json)$ { set $subdomain "$1."; set $subdir "$1/"; rewrite ^/([^/?&:'"]+)/(pwa-worker.js|manifest.json)$ /$2; } location ~ ^/([^/?&:'"]+)/config.js$ { set $subdomain "$1."; set $subdir "$1/"; alias /config/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; } ```
damencho commented 7 months ago

Hum ... not sure then why prefix would not be set for your meeting with tenant ...

miro-ku commented 7 months ago

I assume that the prefix is there. If look into debug logs of prosody, here what I see (7spJqIPo6IsGAxjapkZY is tenant id)

![CleanShot 2024-03-07 at 14 03 56@2x](https://github.com/jitsi/jitsi-meet/assets/30985699/8d78bfff-9f3b-4074-bf93-7e846b046414)

But then

![CleanShot 2024-03-07 at 14 06 30@2x](https://github.com/jitsi/jitsi-meet/assets/30985699/9c8755b3-8a4e-46ba-a05f-1add41604ac0)
damencho commented 7 months ago

Hum you are right

2024-03-07 16:53:03 endconference.meet.jitsi:end_conference warn No room found found for 7spJqIPo6IsGAxjapkZY/hi0uenskokei2zsr9orx

https://github.com/jitsi/jitsi-meet/blob/e57c7f92a87dc492edd87998d97052699fa0baed/resources/prosody-plugins/mod_end_conference.lua#L57

damencho commented 7 months ago

Yeah, I'm out of ideas looking at the code and the docker default config. Another option is to add prints to the module and reload it to see what value is wrong and why it does not find the room.

miro-ku commented 7 months ago

Okay, I'll try to investigate the issue later