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 <rgreenberg@fiskerinc.com>

* Fix sign out and refresh

* Check for bad json

Co-authored-by: Rafi Greenberg <rgreenberg@fiskerinc.com>
This commit is contained in:
John Wu
2021-03-18 17:22:08 -07:00
committed by GitHub
parent bf401e68eb
commit 03de4f5826
2 changed files with 26 additions and 19 deletions

View File

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

View File

@@ -30,6 +30,10 @@ export default function MenuDrawer({ children }) {
setOpen(false);
};
const onSignOut = () => {
document.location = signOut();
};
return (
<div className={classes.root}>
<AppBar
@@ -59,7 +63,7 @@ export default function MenuDrawer({ children }) {
{token !== null && (
<Button
color="inherit"
onClick={signOut}
onClick={onSignOut}
className={classes.rightToolbar}
>
Sign Out