From b82100ede8f1825071f68cd5872f1c7df1b39f0e Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 3 May 2024 12:47:40 +0100 Subject: [PATCH 1/3] Fix `element-desktop-ssoid being` included in OIDC Authorization call Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/vector/platform/ElectronPlatform.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/vector/platform/ElectronPlatform.tsx b/src/vector/platform/ElectronPlatform.tsx index 9063fc945d..0ae1f75863 100644 --- a/src/vector/platform/ElectronPlatform.tsx +++ b/src/vector/platform/ElectronPlatform.tsx @@ -377,10 +377,12 @@ export default class ElectronPlatform extends VectorBasePlatform { return this.ipc.call("getAvailableSpellCheckLanguages"); } - public getSSOCallbackUrl(fragmentAfterLogin?: string): URL { - const url = super.getSSOCallbackUrl(fragmentAfterLogin); + public getSSOCallbackUrl(forOidc = false, fragmentAfterLogin?: string): URL { + const url = super.getSSOCallbackUrl(forOidc, fragmentAfterLogin); url.protocol = "element"; - url.searchParams.set(SSO_ID_KEY, this.ssoID); + if (!forOidc) { + url.searchParams.set(SSO_ID_KEY, this.ssoID); + } return url; } @@ -446,8 +448,7 @@ export default class ElectronPlatform extends VectorBasePlatform { public async getOidcClientMetadata(): Promise { const baseMetadata = await super.getOidcClientMetadata(); - const redirectUri = this.getSSOCallbackUrl(); - redirectUri.searchParams.delete(SSO_ID_KEY); // it will be shuttled via the state param instead + const redirectUri = this.getSSOCallbackUrl(true); return { ...baseMetadata, applicationType: "native", From 9efa04da7a4865842bc14cd94aa56bee6dc53004 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 10 May 2024 11:58:58 +0100 Subject: [PATCH 2/3] Split out oidc callback url into its own method Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/vector/platform/ElectronPlatform.tsx | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/vector/platform/ElectronPlatform.tsx b/src/vector/platform/ElectronPlatform.tsx index 0ae1f75863..dddf73ae07 100644 --- a/src/vector/platform/ElectronPlatform.tsx +++ b/src/vector/platform/ElectronPlatform.tsx @@ -57,6 +57,8 @@ interface SquirrelUpdate { updateURL: string; } +const LEGACY_PROTOCOL = "element"; +const OIDC_PROTOCOL = "io.element.desktop"; const SSO_ID_KEY = "element-desktop-ssoid"; const isMac = navigator.platform.toUpperCase().includes("MAC"); @@ -377,12 +379,10 @@ export default class ElectronPlatform extends VectorBasePlatform { return this.ipc.call("getAvailableSpellCheckLanguages"); } - public getSSOCallbackUrl(forOidc = false, fragmentAfterLogin?: string): URL { - const url = super.getSSOCallbackUrl(forOidc, fragmentAfterLogin); - url.protocol = "element"; - if (!forOidc) { - url.searchParams.set(SSO_ID_KEY, this.ssoID); - } + public getSSOCallbackUrl(fragmentAfterLogin?: string): URL { + const url = super.getSSOCallbackUrl(fragmentAfterLogin); + url.protocol = LEGACY_PROTOCOL; + url.searchParams.set(SSO_ID_KEY, this.ssoID); return url; } @@ -448,11 +448,9 @@ export default class ElectronPlatform extends VectorBasePlatform { public async getOidcClientMetadata(): Promise { const baseMetadata = await super.getOidcClientMetadata(); - const redirectUri = this.getSSOCallbackUrl(true); return { ...baseMetadata, applicationType: "native", - redirectUris: [redirectUri.href], // XXX: This should be overridable in config clientUri: "https://element.io", }; @@ -461,4 +459,13 @@ export default class ElectronPlatform extends VectorBasePlatform { public getOidcClientState(): string { return `:${SSO_ID_KEY}:${this.ssoID}`; } + + /** + * The URL to return to after a successful OIDC authentication + */ + public getOidcCallbackUrl(): URL { + const url = super.getOidcCallbackUrl(); + url.protocol = OIDC_PROTOCOL; + return url; + } } From 64f0bb546033fb9fa19b8bd1a4a2505cc8244596 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 13 May 2024 13:05:50 +0100 Subject: [PATCH 3/3] Inline consts Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/vector/platform/ElectronPlatform.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/vector/platform/ElectronPlatform.tsx b/src/vector/platform/ElectronPlatform.tsx index dddf73ae07..29c331cc73 100644 --- a/src/vector/platform/ElectronPlatform.tsx +++ b/src/vector/platform/ElectronPlatform.tsx @@ -57,8 +57,6 @@ interface SquirrelUpdate { updateURL: string; } -const LEGACY_PROTOCOL = "element"; -const OIDC_PROTOCOL = "io.element.desktop"; const SSO_ID_KEY = "element-desktop-ssoid"; const isMac = navigator.platform.toUpperCase().includes("MAC"); @@ -381,7 +379,7 @@ export default class ElectronPlatform extends VectorBasePlatform { public getSSOCallbackUrl(fragmentAfterLogin?: string): URL { const url = super.getSSOCallbackUrl(fragmentAfterLogin); - url.protocol = LEGACY_PROTOCOL; + url.protocol = "element"; url.searchParams.set(SSO_ID_KEY, this.ssoID); return url; } @@ -465,7 +463,7 @@ export default class ElectronPlatform extends VectorBasePlatform { */ public getOidcCallbackUrl(): URL { const url = super.getOidcCallbackUrl(); - url.protocol = OIDC_PROTOCOL; + url.protocol = "io.element.desktop"; return url; } }