Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use a newly generated access_token while joining Jitsi #24646

Merged
merged 4 commits into from
Mar 22, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 10 additions & 14 deletions src/vector/jitsi/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -223,13 +222,6 @@ const setupCompleted = (async (): Promise<string | void> => {

if (widgetApi) {
await widgetApiReady;

// See https://github.com/matrix-org/prosody-mod-auth-matrix-user-verification
richvdh marked this conversation as resolved.
Show resolved Hide resolved
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
Expand All @@ -245,7 +237,7 @@ const setupCompleted = (async (): Promise<string | void> => {
})();

function enableJoinButton(): void {
document.getElementById("joinButton").onclick = (): void => joinConference();
document.getElementById("joinButton").onclick = (): Promise<void> => joinConference();
}

function switchVisibleContainers(): void {
Expand All @@ -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
Expand Down Expand Up @@ -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<void> {
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();
Expand Down