From 03de4f5826334b062efbab0b611dce09d22155a7 Mon Sep 17 00:00:00 2001 From: John Wu <76966357+jwu-fisker@users.noreply.github.com> Date: Thu, 18 Mar 2021 17:22:08 -0700 Subject: [PATCH] Fix signout refresh (#20) * Merge to main (#17) * Fix sign up form bug * Add run.sh to run setup and run web app * Output node version * Update readme with run.sh * Fix file upload form to handle ota_update service * Enable file upload form Enable error boundary to catch React errors (#7) Fix warning for link noreferrer Include authorization header with file upload * Remove default localhost settings (#8) * Remove default localhost settings Replace with deployment settings * Fix for upload data format * Fix test data for last commit * Fix json link format and remove localhost default settings (#10) * Remove default localhost settings Replace with deployment settings * Fix for upload data format * Fix test data for last commit * Fix link data format * Fix link json again (#12) Use id token instead of access token * nginx things * Web Worker Sign Out and Use Go API (#13) * Calculate checksum and send with file upload * Limit file upload and display rejected file error * Add sign in timeout * Check auth token structure before setting Clean up * Use web worker timer to sign out Remove checksum Point to Go ota update * Remove checksum dependency * Use compute auth service and fix static code analyzer warnings (#15) * Clean up formatting * Use new compute_auth service Implment SSO Implement token refresh Clean up unit tests * Fix unit tests * Fix auth test Fix warnings * Update default settings for compute_auth * Change main UI layout and add VINs to add and upload forms (#16) * Add new upload update package form Add new add vehicle form Add new side menu layout Add new toolbar layout Update and add unit tests * Enable add get and add vehicles * Integration issues with ota_update service * Update get vehicle JSON format * Fix related unit test Add release notes field * Add StatusContext to display error and status messages * Handle api error json (#18) * Handle api error json * Fix get vehicles error handling Update .env.template Co-authored-by: Rafi Greenberg * Fix sign out and refresh * Check for bad json Co-authored-by: Rafi Greenberg --- src/components/Contexts/UserContext.jsx | 39 +++++++++++++------------ src/components/Layouts/MenuDrawer.jsx | 6 +++- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/components/Contexts/UserContext.jsx b/src/components/Contexts/UserContext.jsx index 2146b8a..aad411f 100644 --- a/src/components/Contexts/UserContext.jsx +++ b/src/components/Contexts/UserContext.jsx @@ -11,11 +11,22 @@ export const UserProvider = ({ children }) => { let timer; useEffect(() => { - if (!localStorage) return; - const t = JSON.parse(localStorage.getItem("token")); - if (!t || !t.idToken || !t.idToken.jwtToken) return; - if (!t.idToken.payload || !t.idToken.payload.exp) return; - setToken(t); + try { + if (!localStorage) return; + const t = JSON.parse(localStorage.getItem("token")); + if (!t) return; + if ( + !t.idToken || + !t.idToken.jwtToken || + !t.idToken.payload || + !t.idToken.payload.exp + ) + throw new Error("Invalid token"); + setToken(t); + } catch (e) { + document.location = signOut(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { @@ -33,12 +44,6 @@ export const UserProvider = ({ children }) => { return result; }; - const isError = (resp) => { - if (resp === null) return true; - if (resp && resp.error) return true; - return false; - }; - const startSessionTimer = () => { const duration = 1000 * token.idToken.payload.exp - new Date().getTime(); if (!timer) { @@ -46,8 +51,8 @@ export const UserProvider = ({ children }) => { timer.onMessage(async (e) => { if (e.data === "timeout") { const t = await refreshTokens(); - if (!isError(t)) return; - signOut(); + if (t && !t.error) return; + document.location = signOut(); } }); } @@ -61,17 +66,15 @@ export const UserProvider = ({ children }) => { } = token; const result = await auth.verify(idToken); - if (!result && !result.valid) { + if (!result || !result.valid) { const t = await refreshTokens(); - if (!isError(t)) return; - signOut(); - return; + if (!t || t.error) throw new Error("Unable to refresh token"); } startSessionTimer(); } catch (e) { - signOut(); setError(`Verify error. ${e.message}`); + document.location = signOut(); } }; diff --git a/src/components/Layouts/MenuDrawer.jsx b/src/components/Layouts/MenuDrawer.jsx index 9499a45..0b402be 100644 --- a/src/components/Layouts/MenuDrawer.jsx +++ b/src/components/Layouts/MenuDrawer.jsx @@ -30,6 +30,10 @@ export default function MenuDrawer({ children }) { setOpen(false); }; + const onSignOut = () => { + document.location = signOut(); + }; + return (
Sign Out