From 8daec06e2007f2eb57e5d96a30d3be0f434aa9eb Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Mon, 27 Jan 2025 23:47:47 +0100 Subject: [PATCH] improve oauth postMessage resiliency --- frontend/src/lib/components/AppConnectInner.svelte | 13 +++++++++++-- .../oauth/callback/[client_name]/+page.svelte | 7 ++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/frontend/src/lib/components/AppConnectInner.svelte b/frontend/src/lib/components/AppConnectInner.svelte index c6e4b1983f..fc644a3cd2 100644 --- a/frontend/src/lib/components/AppConnectInner.svelte +++ b/frontend/src/lib/components/AppConnectInner.svelte @@ -174,13 +174,21 @@ } function popupListener(event) { + console.log('Received oauth popup message') let data = event.data if (event.origin == null || event.origin !== window.location.origin) { + console.log( + 'Received oauth popup message from different origin', + event.origin, + window.location.origin + ) return } - window.removeEventListener('message', popupListener) - processPopupData(data) + if (data.type == 'success' || data.type == 'error') { + window.removeEventListener('message', popupListener) + processPopupData(data) + } } function handleStorageEvent(event) { @@ -205,6 +213,7 @@ }) function processPopupData(data) { + console.log('Processing oauth popup data') if (data.type === 'error') { sendUserToast(data.error, true) step = 2 diff --git a/frontend/src/routes/(root)/(logged)/oauth/callback/[client_name]/+page.svelte b/frontend/src/routes/(root)/(logged)/oauth/callback/[client_name]/+page.svelte index 73b9c7e4b4..69fc4cdf40 100644 --- a/frontend/src/routes/(root)/(logged)/oauth/callback/[client_name]/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/oauth/callback/[client_name]/+page.svelte @@ -35,8 +35,10 @@ const message = { type: 'success', res, resource_type: client_name } sendUserToast('successful', false) if (window.opener) { + console.log('Sending oauth popup message') window.opener?.postMessage(message, '*') } else { + console.log('Storing oauth popup message in local storage') localStorage.setItem('oauth-callback', JSON.stringify(message)) } // goto(`/resources?resource_type=${client_name}`) @@ -44,8 +46,10 @@ sendUserToast(`Error trying to add ${client_name} connection: ${e.body}`, true) const message = { type: 'error', error: `Error parsing the response token, ${e.body}` } if (window.opener) { + console.log('Sending oauth popup message') window.opener?.postMessage(message, '*') } else { + console.log('Storing oauth popup message in local storage') localStorage.setItem('oauth-callback', JSON.stringify(message)) } @@ -55,14 +59,15 @@ sendUserToast('Missing code or state as query params', true) const message = { type: 'error', error: 'Missing code or state as query params' } if (window.opener) { + console.log('Sending oauth popup message') window.opener?.postMessage(message, '*') } else { + console.log('Storing oauth popup message in local storage') localStorage.setItem( 'oauth-callback', JSON.stringify({ type: 'error', error: 'Missing code or state as query params' }) ) } - window.opener?.postMessage(message, '*') // goto('/resources') } close()