From 257532236076f1828d1f6f37649cea3b97ebd6d1 Mon Sep 17 00:00:00 2001 From: emrah Date: Wed, 22 Mar 2023 17:05:10 +0300 Subject: [PATCH] Use a newly generated access_token while joining Jitsi (#24646) Fixes: #24687 Signed-off-by: Emrah Eryilmaz emrah.com@gmail.com --- src/vector/jitsi/index.ts | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/vector/jitsi/index.ts b/src/vector/jitsi/index.ts index ae1868e702..77379fe209 100644 --- a/src/vector/jitsi/index.ts +++ b/src/vector/jitsi/index.ts @@ -52,7 +52,6 @@ let avatarUrl: string; let userId: string; let jitsiAuth: string; let roomId: string; -let openIdToken: IOpenIDCredentials; let roomName: string; let startAudioOnly: boolean; let startWithAudioMuted: boolean | undefined; @@ -223,13 +222,6 @@ const setupCompleted = (async (): Promise => { if (widgetApi) { await widgetApiReady; - - // See https://github.com/matrix-org/prosody-mod-auth-matrix-user-verification - if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) { - // Request credentials, give callback to continue when received - openIdToken = await widgetApi.requestOpenIDConnectToken(); - logger.log("Got OpenID Connect token"); - } } // Now that everything should be set up, skip to the Jitsi splash screen if needed @@ -245,7 +237,7 @@ const setupCompleted = (async (): Promise => { })(); function enableJoinButton(): void { - document.getElementById("joinButton").onclick = (): void => joinConference(); + document.getElementById("joinButton").onclick = (): Promise => joinConference(); } function switchVisibleContainers(): void { @@ -271,11 +263,11 @@ function skipToJitsiSplashScreen(): void { } /** - * Create a JWT token fot jitsi openidtoken-jwt auth + * Create a JWT token for jitsi openidtoken-jwt auth * * See https://github.com/matrix-org/prosody-mod-auth-matrix-user-verification */ -function createJWTToken(): string { +function createJWTToken(openIdToken: IOpenIDCredentials): string { // Header const header = { alg: "HS256", typ: "JWT" }; // Payload @@ -356,17 +348,21 @@ function mapLanguage(language: string): string { // audio input it can find, while an input of null instructs it to start muted, // and a non-nullish input specifies the label of a specific device to use. // Same for video inputs. -function joinConference(audioInput?: string | null, videoInput?: string | null): void { +async function joinConference(audioInput?: string | null, videoInput?: string | null): Promise { let jwt; if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) { - if (!openIdToken?.access_token) { + // See https://github.com/matrix-org/prosody-mod-auth-matrix-user-verification + const openIdToken: IOpenIDCredentials = await widgetApi.requestOpenIDConnectToken(); + logger.log("Got OpenID Connect token"); + + if (!openIdToken.access_token) { // eslint-disable-line camelcase // We've failing to get a token, don't try to init conference logger.warn("Expected to have an OpenID credential, cannot initialize widget."); document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget"; return; } - jwt = createJWTToken(); + jwt = createJWTToken(openIdToken); } switchVisibleContainers();