improve oauth postMessage resiliency

This commit is contained in:
Ruben Fiszel
2025-01-27 23:47:47 +01:00
parent e0b6aa42a2
commit 8daec06e20
2 changed files with 17 additions and 3 deletions

View File

@@ -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

View File

@@ -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()