Problem hiding transcriber after successfully enabling transcription in Jitsi docker

I am self-hosting the latest stable version of Jitsi (8319) as a docker image on my server. I have enabled transcription and it is working well, but I am having trouble hiding the “Transcriber” iFrame from the UI.
Please help, Jitsi masters! :grinning:

Background information:

  • I have JVB running on a separate instance from the Main server (web, prosody, jicofo, jigasi).
  • I don’t use SIP (incoming call) in Jigasi
  • I don’t use the Record function

Problem:
I have followed Damencho’s instructions for hiding the transcriber from the UI from this link:

Essentially, he outlined 3 key steps:

1. Create an authenticated user
e.g. “transcriber@auth.meet.mydomain.com

2. Configure the user in Jigasi

3. Configure the domain (“auth.meet.mydomain.com”) as a hidden domain

I have followed these steps as best as I could, but I still can’t get the transcriber to be hidden. I will describe what I did for each in detail below, and also list the problems I am facing.


1. Create an authenticated user

  • Set configuration in .env file:
# Enable authentication
ENABLE_AUTH=1

# Enable guest access
ENABLE_GUESTS=1

# Select authentication type: internal, jwt or ldap
AUTH_TYPE=internal
  • Verify that the VirtualHost is configured for the XMPP_AUTH_DOMAIN
VirtualHost "{{ $XMPP_AUTH_DOMAIN }}"
    ssl = {
        key = "/config/certs/{{ $XMPP_AUTH_DOMAIN }}.key";
        certificate = "/config/certs/{{ $XMPP_AUTH_DOMAIN }}.crt";
    }
    modules_enabled = {
        "limits_exception";
    }
	admins = { "transcriber@auth.meet.mydomain.com" }
    authentication = "internal_hashed"

in Path: “/prosody/rootfs/defaults/conf.d/jitsi-meet.cfg.lua”

  • Create a user with password in prosody

Because I’m running Jitsi as a docker image, the location where I can make the change is very limited. I first thought that I could make the change on the “/prosody/rootfs/etc/cont-init.d/10-config” file, so add the line:

prosodyctl --config $PROSODY_CFG register transcriber $XMPP_AUTH_DOMAIN $JIGASI_XMPP_PASSWORD

I named the user “transcriber” because that’s the example that was given by Damencho.
In order to check if the user was successfully registered, I went inside the /bin/bash of the prosody container and ran

find /config/data/auth%2emeet%2emydomain%2ecom/accounts -type f -exec basename {} .dat \;

Unfortunately, the user was not successfully created.

Even though I edit the 10-config file, it is not applied. Only things that I edit on the “.env”, “docker-compose.yml” are applied to docker, for some reason.

So I resolved this by adding the line as a command in the “docker-compose.yml” file, at the last line of the “prosody” chunk:

command: /bin/sh -c 'prosodyctl --config /config/prosody.cfg.lua register ${JIGASI_XMPP_USER} auth.meet.mydomain.com ${JIGASI_XMPP_PASSWORD} && /init'

As you can see, I set the user name as ${JIGASI_XMPP_USER}, and the value is set to “transcriber” in the .env file, and I set the password as ${JIGASI_XMPP_PASSWORD}.

After checking in /bin/bash for the list of users in Prosody, I did see that the user “transcriber” was successfully created.


2. Configure the user in Jigasi

I saw that in order to configure the user in Jigasi, I need to edit the following in the file below:

{{ if .Env.ENABLE_AUTH | default "0" | toBool }}
{{ if .Env.ENABLE_GUESTS | default "0" | toBool }}
org.jitsi.jigasi.xmpp.acc.USER_ID={{ $JIGASI_XMPP_USER }}@{{ $XMPP_GUEST_DOMAIN }}
org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=true
{{ else }}
org.jitsi.jigasi.xmpp.acc.USER_ID={{ $JIGASI_XMPP_USER }}@{{ $XMPP_AUTH_DOMAIN }}
org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false
{{ end }}
org.jitsi.jigasi.xmpp.acc.PASS={{ .Env.JIGASI_XMPP_PASSWORD }}
org.jitsi.jigasi.xmpp.acc.ALLOW_NON_SECURE=true
{{ end }}

file path: "//jigasi/rootfs/defaults/sip-communicator.properties"

However, as I mentioned in Part 1 above, I can’t edit this file because any edits I make don’t get implemented. (due to Jitsi running as a docker image, not a built container) I can see for sure that any change I make doesn’t get applied, because after bringing the container up, when I check the automatically generated configuration file:
"/.jitsi-meet-cfg/jigasi/sip-communicator.properties"
none of the changes I made are shown here.

That’s why the only way I can configure this is through the .env file.
I set $JIGASI_XMPP_USER as “transcriber” (in accordance to the example Damencho gave).
This is also why I used the JIGASI_XMPP_PASSWORD as the password when creating the “transcriber” user in Part 1. Because I can’t customize a different password in the “sip-communicator.properties” file, I can only edit the value of the JIGASI_XMPP_PASSWORD variable in the .env file.


3. Configure the domain (“auth.meet.mydomain.com”) as a hidden domain

In the file “/web/rootfs/defaults/settings-config.js”, I saw

// Recording.
{{ if $ENABLE_RECORDING  -}}
config.hiddenDomain = '{{ $XMPP_RECORDER_DOMAIN }}';

So, in order to enable the hiddenDomain, I did:

  1. Set $ENABLE_RECORDING=1 in the .env file
  2. Set the value of $XMPP_RECORDER_DOMAIN in the .env file to “auth.meet.mydomain.com

I don’t know if I did each step correctly, but this is everything I did in order to hide the transcriber from the UI.

The problem is that when I go to my hosted Jitsi and try to check if the transcriber is hidden now, I am shown a modal that says “Authentication Required”.
I’m assuming this is because I set ENABLE_AUTH=1

I tried various different Username/PW combos, and the only one that Jitsi seems to accept is:
Username: transcriber@auth.meet.mydomain.com
PW: $JIGASI_XMPP_PASSWORD

However, even then, the screen is stuck without going past that modal. All I see is “Obtaining session-id…” and it doesn’t go past this screen.

The browser console shows error messages such as:

  • authenticationError: “not-authorized”
  • [modules/xmpp/moderator.js] <Ir._handleError>: Unauthorized to start the conference
  • [conference.js] <Vie._onConferenceFailed>: CONFERENCE FAILED: conference.authenticationRequired

So right now, I can’t even access Jitsi, and I can’t check if the transcriber is hidden.
I even tried accessing through the now enabled “guest” domain: “guest.meet.mydomain.com:8443” but it still asks for authentication. (maybe because I’m creating a new room?)

Can someone please help?
Please let me know if you require any other logs or information to help troubleshoot.


Also, as a side question, the two links below hint at requiring to make two separate accounts in Prosody.

Is this required even if I’m not using SIP or Recording?

Thank you in advance for your time and support! :raised_hands:

Any help?

This should be enabled when you want authentication in your deployment, not for hiding transcriber.

You can create /custom/custom-sip-communicator.properties and add into it:

org.jitsi.jigasi.xmpp.acc.USER_ID=transcriber@somedomain.com
org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false
org.jitsi.jigasi.xmpp.acc.PASS=some_password
org.jitsi.jigasi.xmpp.acc.ALLOW_NON_SECURE=true

You can also create /config/nginx/custom-meet.conf and add into it:

config.hiddenDomain = 'somedomain.com';

And you also need to add that domain ^ to the prosody config and create that transcriber user in prosody. But I’m not familiar with docker to know how to do that.
Another option is to enable Recording, that will add the hidden recorder domain in config.js without the need of modifications, and you can use that in the custom sip-communicator.properties and the prosody config will add that virtual host, you only need to create that user in prosody.

@saghul I think the current docker images do not support hiding the transcriber user, especially if authentication and recording is not enabled.

Thank you for the reply Damencho.

So for clarification, is enabling authentication a requirement or not a requirement for hiding the transcriber?

Nope, it is not a requirement.

Thank you @damencho I will try this.

One more question: in your reply you wrote

And you also need to add that domain ^ to the prosody config and create that transcriber user in prosody.

By adding the domain to the prosody config, do you mean making sure that there is a VirtualHost for that domain in the jitsi-meet.cfg.lua file? If not, what do you mean?

Thank you!

Yep, you need a virtual host for it to be able to create a user and use it.

Thank you for the response!

I’m happy to share that the issue is fixed and resolved now.

I disabled authentication, I disabled guest access, I verified that the XMPP_AUTH_DOMAIN is registered as a VirtualHost, I created a user with a password in Prosody (prosodyctl), and registered XMPP_AUTH_DOMAIN as a hidden domain.

As for the most difficult part - setting the configurations in the sip-communicator.properties file - I had to add an extra step since I’m running Jitsi as a docker image.

The “/custom/custom-sip-communicator.properties” needed to be in docker container’s virtual directory. Therefore, I first created the file in a random place on the server (/custom-config/jigasi/custom-sip-communicator.properties), then I used “docker-compose.yml” file’s volume directive to mount that file inside the docker container, so that it is located in “/config/custom-sip-communicator.properties” (of the virtual directory).

For this, I added the line below to the docker-compose.yml file, Jigasi section, volumes directive:

services:
    jigasi:
        image: jitsi/web:stable-8319
        . . .
        volumes: 
           . . .
           - ./custom-config/jigasi/custom-sip-communicator.properties:/config/custom-sip-communicator.properties

This finally worked and it changed the sip-communicator.properties file to append our custom configuration. This was the key to customizing many of Jitsi’s configurations when running Jitsi on Docker.

@damencho @saghul so it seems, fortunately, that docker images can support hiding the transcriber user, even with authentication and recording not enabled. :+1:

Thank you very much, Damencho, for your support and wisdom! :pray:


Oh, by the way, in your reply, you mentioned that I had to create the file in

  • /custom/custom-sip-communicator.properties

but I think it’s actually supposed to be in

  • /config/custom-sip-communicator.properties

as shown in this part of the code:

Just leaving this here for future people referencing this post.