From 33bc346e835ffcfb2437c471216fd579394bf201 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 4 Apr 2024 16:48:19 +0200 Subject: [PATCH] Fix #48: Proper 404 and 403 pages when trying to open non-existant chatroom.: * error page on the old endpoint, when anonymous users are disabled. --- conversejs/builtin.ts | 19 +++++++++++++++++-- server/lib/conversejs/params.ts | 2 +- shared/lib/types.ts | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/conversejs/builtin.ts b/conversejs/builtin.ts index dd58f2fd..9b4919d2 100644 --- a/conversejs/builtin.ts +++ b/conversejs/builtin.ts @@ -113,7 +113,8 @@ async function initConverse ( remoteRoomAnonymousParams(initConverseParams, auth, params) isRemoteWithNicknameSet = true } else { - throw new Error('Remote server does not allow remote connection') + console.error('Remote server does not allow remote connection') + params.jid = null } } else { if (!isRemoteChat) { @@ -121,7 +122,21 @@ async function initConverse ( } else if (remoteAnonymousXMPPServer) { remoteRoomAnonymousParams(initConverseParams, null, params) } else { - throw new Error('Remote server does not allow remote connection') + console.error('Remote server does not allow remote connection') + params.jid = null + } + } + + if (params.jid === null) { + if (chatIncludeMode === 'chat-only') { + // Special use case: when mode=chat-only, and no params.jid: display an error page. + // Note: this can happen if anonymous users are not allowed on the server. + console.error('Seems that anonymous users are not allowed on the target server') + // FIXME: localize? + document.body.innerHTML = '

This chatroom does not exist, or is not accessible to you.

' + return + } else { + throw new Error('Can\'t connect, no JID') } } diff --git a/server/lib/conversejs/params.ts b/server/lib/conversejs/params.ts index ed48595d..16cb850c 100644 --- a/server/lib/conversejs/params.ts +++ b/server/lib/conversejs/params.ts @@ -80,7 +80,7 @@ async function getConverseJSParams ( staticBaseUrl, assetsPath: staticBaseUrl + 'conversejs/', isRemoteChat: !!(roomInfos.video?.remote), - localAnonymousJID: localAnonymousJID, + localAnonymousJID: !settings['chat-no-anonymous'] ? localAnonymousJID : null, remoteAnonymousJID: remoteConnectionInfos?.anonymous?.userJID ?? null, remoteAnonymousXMPPServer: !!(remoteConnectionInfos?.anonymous), remoteAuthenticatedXMPPServer: !!(remoteConnectionInfos?.authenticated), diff --git a/shared/lib/types.ts b/shared/lib/types.ts index 3cd72591..1b94be23 100644 --- a/shared/lib/types.ts +++ b/shared/lib/types.ts @@ -2,7 +2,7 @@ type ConverseJSTheme = 'peertube' | 'default' | 'concord' interface InitConverseJSParams { isRemoteChat: boolean - localAnonymousJID: string + localAnonymousJID: string | null remoteAnonymousJID: string | null remoteAnonymousXMPPServer: boolean remoteAuthenticatedXMPPServer: boolean