diff --git a/packages/insomnia/src/account/session.ts b/packages/insomnia/src/account/session.ts index 3b9a7f9c585..7b6dc9445fa 100644 --- a/packages/insomnia/src/account/session.ts +++ b/packages/insomnia/src/account/session.ts @@ -26,11 +26,7 @@ export async function absorbKey(sessionId: string, key: string) { getUserProfile({ sessionId: sessionIdResolved }), getEncryptionKeys({ sessionId: sessionIdResolved }), ]); - const { - public_key: publicKey, - enc_private_key: encPrivateKey, - enc_symmetric_key: encSymmetricKey, - } = keys; + const { public_key: publicKey, enc_private_key: encPrivateKey, enc_symmetric_key: encSymmetricKey } = keys; const { email, id: accountId, first_name: firstName, last_name: lastName } = profile; const symmetricKeyStr = crypt.decryptAES(key, JSON.parse(encSymmetricKey)); @@ -46,7 +42,7 @@ export async function absorbKey(sessionId: string, key: string) { JSON.parse(encPrivateKey), ); - window.main.loginStateChange(); + window.main.loginStateChange(true); } export async function getPrivateKey() { @@ -97,7 +93,7 @@ export async function logout(clearCredentials = false) { if (clearCredentials) { await _removeAllCredentials(); } - window.main.loginStateChange(); + window.main.loginStateChange(false); } /** Set data for the new session and store it encrypted with the sessionId */ diff --git a/packages/insomnia/src/entry.preload.ts b/packages/insomnia/src/entry.preload.ts index ed7b80188a7..de226c5cce5 100644 --- a/packages/insomnia/src/entry.preload.ts +++ b/packages/insomnia/src/entry.preload.ts @@ -238,7 +238,7 @@ const main: Window['main'] = { completeExecutionStep: options => ipcRenderer.send('completeExecutionStep', options), updateLatestStepName: options => ipcRenderer.send('updateLatestStepName', options), getExecution: options => invokeWithNormalizedError('getExecution', options), - loginStateChange: () => ipcRenderer.send('loginStateChange'), + loginStateChange: options => ipcRenderer.send('loginStateChange', options), restart: () => ipcRenderer.send('restart'), openInBrowser: options => ipcRenderer.send('openInBrowser', options), openDeepLink: options => ipcRenderer.send('openDeepLink', options), diff --git a/packages/insomnia/src/main/ipc/main.ts b/packages/insomnia/src/main/ipc/main.ts index e32d45ae6e6..fa57f9b2397 100644 --- a/packages/insomnia/src/main/ipc/main.ts +++ b/packages/insomnia/src/main/ipc/main.ts @@ -134,7 +134,7 @@ const writeResponseBodyToFile = async ( }; export interface RendererToMainBridgeAPI { - loginStateChange: () => void; + loginStateChange: (isLoggedIn: boolean) => void; openInBrowser: (url: string) => void; restart: () => void; halfSecondAfterAppStart: () => void; @@ -278,9 +278,9 @@ export function registerMainHandlers() { ipcMainHandle('multipartBufferToArray', async (_, options) => { return multipartBufferToArray(options); }); - ipcMainOn('loginStateChange', async () => { + ipcMainOn('loginStateChange', async (_, isLoggedIn: boolean) => { BrowserWindow.getAllWindows().forEach(w => { - w.webContents.send('loggedIn'); + w.webContents.send('loggedIn', isLoggedIn); }); }); ipcMainHandle('backup', async () => { diff --git a/packages/insomnia/src/root.tsx b/packages/insomnia/src/root.tsx index ea09034463b..49113d2884b 100644 --- a/packages/insomnia/src/root.tsx +++ b/packages/insomnia/src/root.tsx @@ -330,12 +330,26 @@ const Root = () => { const latestInSubmission = useLatest(ifInSubmission); useEffect(() => { - return window.main.on('git.db-synced', () => { + const unsubLoggedIn = window.main.on('loggedIn', (_, isLoggedIn: boolean) => { + if (!latestInSubmission.current) { + if (!isLoggedIn) { + // If the user just logged out, navigate to the login page + navigate(href('/auth/login')); + } else { + navigate(href('/organization')); + } + } + }); + const unsubGitDbSynced = window.main.on('git.db-synced', () => { if (!latestInSubmission.current) { revalidate(); } }); - }, [latestInSubmission, revalidate]); + return () => { + unsubLoggedIn(); + unsubGitDbSynced(); + }; + }, [latestInSubmission, revalidate, navigate]); useEffect(() => { return window.main.on('shell:open', async (_: IpcRendererEvent, url: string) => {