Unverified Commit 6ab4ecaa authored by Phillip Kuznetsov's avatar Phillip Kuznetsov Committed by Copybara
Browse files

Flatten callback code

Summary: cleanup callback code to be a bit more readable.

Test Plan: just reorg to be easier to read

Reviewers: michelle, nlanam

Reviewed By: nlanam

Differential Revision: https://phab.corp.pixielabs.ai/D8451

GitOrigin-RevId: c4c3fd1f96ab3ac55e3843ca3014521e45d78942
parent 42b9410f
main snyk-fix-7eb526f73c75336b865418bda117e40b snyk-fix-a916784efb9d8870d42eeba63409bf85 release/vizier/vv0.9.8-pre-test.27 release/vizier/v0.11.7 release/vizier/v0.11.6 release/vizier/v0.11.5 release/vizier/v0.11.4 release/vizier/v0.11.3 release/vizier/v0.11.2 release/vizier/v0.11.1 release/vizier/v0.11.0 release/vizier/v0.10.22 release/vizier/v0.10.21 release/vizier/v0.10.20 release/vizier/v0.10.19 release/vizier/v0.10.18 release/vizier/v0.10.17 release/vizier/v0.10.16 release/vizier/v0.10.15 release/vizier/v0.10.14 release/vizier/v0.10.13 release/vizier/v0.10.12 release/vizier/v0.10.11 release/vizier/v0.10.10 release/vizier/v0.10.9 release/vizier/v0.10.8 release/vizier/v0.10.7 release/vizier/v0.10.6 release/vizier/v0.10.5 release/vizier/v0.10.4 release/vizier/v0.10.3 release/vizier/v0.10.2 release/vizier/v0.10.1 release/vizier/v0.10.0 release/vizier/v0.9.16 release/vizier/v0.9.14 release/vizier/v0.9.14-pre-main.5 release/vizier/v0.9.13 release/vizier/v0.9.13-pre-r0.17 release/vizier/v0.9.12 release/vizier/v0.9.12-pre-r0.1 release/vizier/v0.9.11 release/vizier/v0.9.11-pre-r0.32 release/vizier/v0.9.11-pre-r0.29 release/vizier/v0.9.11-pre-main.9 release/vizier/v0.9.8 release/vizier/v0.9.8-pre-test.27 release/vizier/v0.9.8-pre-test2.28 release/vizier/v0.9.7 release/vizier/v0.9.7-pre-r0.7 release/vizier/v0.9.7-pre-main.27 release/vizier/v0.9.6 release/vizier/v0.9.5 release/vizier/v0.9.5-pre-r0.13 release/vizier/v0.9.5-pre-main.18 release/vizier/v0.9.5-pre-main.17 release/vizier/v0.9.5-pre-main.14 release/vizier/v0.9.5-pre-etcdConfig.15 release/vizier/v0.9.4 release/vizier/v0.9.3 release/vizier/v0.9.2 release/vizier/v0.9.1 release/vizier/v0.9.0 release/vizier/v0.8.10 release/vizier/v0.8.9 release/vizier/v0.8.8 release/vizier/v0.8.7 release/vizier/v0.8.6 release/vizier/v0.8.5 release/vizier/v0.8.3 release/vizier/v0.8.2 release/vizier/v0.8.1 release/vizier/v0.8.0 release/vizier/v0.7.19 release/vizier/v0.7.18 release/vizier/v0.7.17 release/vizier/v0.7.16 release/vizier/v0.7.15 release/vizier/v0.7.14 release/vizier/v0.7.13 release/vizier/v0.7.12 release/vizier/v0.7.11 release/vizier/v0.7.10 release/vizier/v0.7.9 release/vizier/v0.7.8 release/vizier/v0.7.7 release/vizier/v0.7.6 release/vizier/v0.7.5 release/vizier/v0.7.4 release/vizier/v0.7.3 release/vizier/v0.7.2 release/operator/v0.0.30 release/operator/v0.0.29 release/operator/v0.0.28 release/operator/v0.0.27 release/operator/v0.0.26 release/operator/v0.0.25 release/operator/v0.0.24 release/operator/v0.0.23 release/operator/v0.0.22 release/operator/v0.0.21 release/operator/v0.0.20 release/operator/v0.0.19 release/operator/v0.0.18 release/operator/v0.0.17 release/operator/v0.0.16 release/operator/v0.0.15 release/operator/v0.0.15-pre-r0.6 release/operator/v0.0.14 release/operator/v0.0.14-pre-zOperator3.8 release/operator/v0.0.14-pre-r0.8 release/operator/v0.0.13 release/operator/v0.0.13-pre-test.5 release/operator/v0.0.13-pre-main.5 release/operator/v0.0.12 release/operator/v0.0.12-pre-main.6 release/operator/v0.0.11 release/operator/v0.0.10 release/operator/v0.0.9 release/operator/v0.0.7 release/operator/v0.0.5 release/operator/v0.0.2 release/cloud/staging/1637355758 release/cloud/staging/1637266321 release/cloud/staging/1637083942 release/cloud/staging/1636658412 release/cloud/staging/1636655115 release/cloud/staging/1636566009 release/cloud/staging/1636486580 release/cloud/staging/1635273164 release/cloud/staging/1634664761 release/cloud/staging/1634662582 release/cloud/staging/1634426539 release/cloud/staging/1634255213 release/cloud/staging/1633889214 release/cloud/staging/1633467640 release/cloud/staging/1633377421 release/cloud/staging/1632931048 release/cloud/staging/1632880554 release/cloud/staging/1631813710 release/cloud/staging/1631205641 release/cloud/prod/1658198111 release/cloud/prod/1658185818 release/cloud/prod/1658183222 release/cloud/prod/1657740688 release/cloud/prod/1657049209 release/cloud/prod/1656629056 release/cloud/prod/1656527373 release/cloud/prod/1656452950 release/cloud/prod/1655997138 release/cloud/prod/1655226092 release/cloud/prod/1654806360 release/cloud/prod/1654144074 release/cloud/prod/1654133791 release/cloud/prod/1652313416 release/cloud/prod/1652304483 release/cloud/prod/1652214656 release/cloud/prod/1651864223 release/cloud/prod/1651799821 release/cloud/prod/1651704659 release/cloud/prod/1651616922 release/cloud/prod/1650645384 release/cloud/prod/1650480744 release/cloud/prod/1650306041 release/cloud/prod/1650056868 release/cloud/prod/1650039340 release/cloud/prod/1649978499 release/cloud/prod/1649797942 release/cloud/prod/1649787581 release/cloud/prod/1649269698 release/cloud/prod/1649107437 release/cloud/prod/1648586238 release/cloud/prod/1647992139 release/cloud/prod/1647379907 release/cloud/prod/1646182041 release/cloud/prod/1644961014 release/cloud/prod/1644348245 release/cloud/prod/1643849214 release/cloud/prod/1643826488 release/cloud/prod/1643153852 release/cloud/prod/1643056106 release/cloud/prod/1643052598 release/cloud/prod/1642705917 release/cloud/prod/1642632551 release/cloud/prod/1642205277 release/cloud/prod/1642145141 release/cloud/prod/1642141551 release/cloud/prod/1642139120 release/cloud/prod/1642134238 release/cloud/prod/1642130337 release/cloud/prod/1642126826 release/cloud/prod/1642124521 release/cloud/prod/1642109235 release/cloud/prod/1641941995 release/cloud/prod/1641420513 release/cloud/prod/1641254216 release/cloud/prod/1638917470 release/cloud/prod/1637096190 release/cloud/prod/1636492829 release/cloud/prod/1635286066 release/cloud/prod/1634668183 release/cloud/prod/1634663695 release/cloud/prod/1634282223 release/cloud/prod/1633893408 release/cloud/prod/1633710125 release/cloud/prod/1633560085 release/cloud/prod/1633495949 release/cloud/prod/1633474704 release/cloud/prod/1633379527 release/cloud/prod/1632935904 release/cloud/prod/1631826310 release/cloud/prod/1630737620 release/cloud/prod/1630714187 release/cloud/prod/1630622583 release/cloud/prod/1630433362 release/cloud/prod/1630110767 release/cloud/prod/1629952882 release/cloud/prod/1629920564 release/cloud/prod/1629851112 release/cloud/prod/1629494063 release/cloud/prod/1629339917 release/cloud/prod/1629337848 release/cloud/prod/1629335332 release/cloud/prod/1629311730 release/cloud/prod/1629166688 release/cloud/prod/1629166023 release/cloud/prod/1629165964 release/cloud/prod/1629151138 release/cloud/prod/1628025334 release/cloud/prod/1627971857 release/cloud/prod/1627943140 release/cloud/prod/1627935195 release/cloud/prod/1627644793 release/cloud/prod/1627601637 release/cloud/prod/1627445520 release/cloud/prod/1627421364 release/cloud/prod/1626909202 release/cloud/prod/1626824610 release/cloud/prod/1626391194 release/cloud/prod/1626321970 release/cloud/prod/1626073778 release/cloud/prod/1625699466 release/cloud/prod/1625253333 release/cloud/prod/1625249910 release/cloud/prod/1625013333 release/cloud/prod/1625003953 release/cloud/prod/1625001388 release/cloud/prod/1624993505 release/cloud/prod/1624989299 release/cloud/prod/1623456844 release/cloud/prod/1622779032 release/cloud/prod/1621989349 release/cloud/prod/1621986389 release/cloud/prod/1621964672 release/cloud/prod/1621920686 release/cloud/prod/1621917276 release/cloud/prod/1621882022 release/cloud/prod/1620958944 release/cloud/prod/1620945558 release/cloud/prod/1620327546 release/cloud/prod/1620273211 release/cloud/prod/1620271073 release/cloud/prod/1620090826 release/cloud/prod/1619828773 release/cloud/prod/1619741770 release/cli/v0.7.16 release/cli/v0.7.15 release/cli/v0.7.14 release/cli/v0.7.13 release/cli/v0.7.12 release/cli/v0.7.11 release/cli/v0.7.10 release/cli/v0.7.9 release/cli/v0.7.8 release/cli/v0.7.7 release/cli/v0.7.6 release/cli/v0.7.5 release/cli/v0.7.4 release/cli/v0.7.3 release/cli/v0.7.2 release/cli/v0.7.1 release/cli/v0.7.1-pre-r0.5 release/cli/v0.7.0 release/cli/v0.7.0-pre-main.11 release/cli/v0.6.8-pre-main.9 release/cli/v0.6.7 release/cli/v0.6.6 release/cli/v0.6.5 release/cli/v0.6.4 release/cli/v0.6.3 release/cli/v0.6.2 release/cli/v0.6.1 release/cli/v0.5.14 release/cli/v0.5.13 release/cli/v0.5.12 release/cli/v0.5.11 release/cli/v0.5.9 release/cli/v0.5.8 release/cli/v0.5.7 release/cli/v0.5.6 release/cli/v0.5.5 release/cli/v0.5.4 release/cli/v0.5.3 release/cli/v0.5.2
No related merge requests found
Showing with 133 additions and 128 deletions
+133 -128
...@@ -103,148 +103,153 @@ export const AuthCallbackPage: React.FC = () => { ...@@ -103,148 +103,153 @@ export const AuthCallbackPage: React.FC = () => {
const [config, setConfig] = React.useState<CallbackConfig>(null); const [config, setConfig] = React.useState<CallbackConfig>(null);
const classes = useStyles(); const classes = useStyles();
React.useEffect(() => { const setErr = (errType: ErrorType, errMsg: string) => {
const setErr = (errType: ErrorType, errMsg: string) => { setConfig((c) => ({
setConfig((c) => ({ ...c,
...c, err: {
err: { errorType: errType,
errorType: errType, errMessage: errMsg,
errMessage: errMsg, },
}, loading: false,
loading: false, }));
})); };
};
const handleHTTPError = (err: AxiosError) => {
if (err.code === '401' || err.code === '403' || err.code === '404') {
setErr('auth', err.response.data);
} else {
setErr('internal', err.response.data);
}
};
const performSignup = async (accessToken: string) => {
try {
const response = await Axios.post('/api/auth/signup', { accessToken });
await trackAuthEvent('User signed up', response.data.userInfo.userID, response.data.userInfo.email);
return true;
} catch (err) {
analytics.track('User signup failed', { error: err.response.data });
handleHTTPError(err as AxiosError);
return false;
}
};
const performUILogin = async (accessToken: string, orgName: string) => { const handleHTTPError = (err: AxiosError) => {
try { if (err.code === '401' || err.code === '403' || err.code === '404') {
const response = await Axios.post('/api/auth/login', { setErr('auth', err.response.data);
accessToken, } else {
orgName, setErr('internal', err.response.data);
}); }
await trackAuthEvent('User logged in', response.data.userInfo.userID, response.data.userInfo.email); };
return true;
} catch (err) {
analytics.track('User signup failed', { error: err.response.data });
handleHTTPError(err as AxiosError);
return false;
}
};
const sendTokenToCLI = async (accessToken: string, redirectURI: string) => {
try {
const response = await redirectGet(redirectURI, { accessToken });
return response.status === 200 && response.data === 'OK';
} catch (error) {
handleHTTPError(error as AxiosError);
// If there's an error, we just return a failure.
return false;
}
};
const handleAccessToken = (accessToken: string) => {
const params = QueryString.parse(window.location.search.substr(1));
let mode: AuthCallbackMode;
switch (params.mode) {
case 'cli_get':
case 'cli_token':
case 'ui':
({ mode } = params);
break;
default:
mode = 'ui';
}
const location = params.location && String(params.location); const performSignup = async (accessToken: string) => {
const signup = !!params.signup; try {
const orgName = params.org_name && String(params.org_name); const response = await Axios.post('/api/auth/signup', { accessToken });
const redirectURI = params.redirect_uri && String(params.redirect_uri); await trackAuthEvent('User signed up', response.data.userInfo.userID, response.data.userInfo.email);
return true;
} catch (err) {
analytics.track('User signup failed', { error: err.response.data });
handleHTTPError(err as AxiosError);
return false;
}
};
setConfig({ const performUILogin = async (accessToken: string, orgName: string) => {
mode, try {
signup, const response = await Axios.post('/api/auth/login', {
token: accessToken, accessToken,
loading: true, orgName,
}); });
await trackAuthEvent('User logged in', response.data.userInfo.userID, response.data.userInfo.email);
return true;
} catch (err) {
analytics.track('User login failed', { error: err.response.data });
handleHTTPError(err as AxiosError);
return false;
}
};
const doAuth = async () => { const sendTokenToCLI = async (accessToken: string, redirectURI: string) => {
let signupSuccess = false; try {
let loginSuccess = false; const response = await redirectGet(redirectURI, { accessToken });
return response.status === 200 && response.data === 'OK';
} catch (error) {
handleHTTPError(error as AxiosError)
// If there's an error, we just return a failure.
return false;
}
};
const doAuth = async (
mode: AuthCallbackMode,
signup: boolean,
redirectURI: string,
location: string,
orgName: string,
accessToken: string,
) => {
let signupSuccess = false;
let loginSuccess = false;
if (signup) { if (signup) {
// We always need to perform signup, even if the mode is CLI. // We always need to perform signup, even if the mode is CLI.
signupSuccess = await performSignup(accessToken); signupSuccess = await performSignup(accessToken);
}
// eslint-disable-next-line default-case
switch (mode) {
case 'cli_get':
loginSuccess = await sendTokenToCLI(accessToken, redirectURI);
if (loginSuccess) {
setConfig((c) => ({
...c,
loading: false,
}));
RedirectUtils.redirect('/auth/cli-auth-complete', {});
return;
} }
// eslint-disable-next-line default-case
switch (mode) { // Don't fallback to manual auth if there is an actual
case 'cli_get': // authentication error.
loginSuccess = await sendTokenToCLI(accessToken, redirectURI); if (config.err?.errorType === 'auth') {
if (loginSuccess) { break;
setConfig((c) => ({
...c,
loading: false,
}));
RedirectUtils.redirect('/auth/cli-auth-complete', {});
return;
}
// Don't fallback to manual auth if there is an actual
// authentication error.
if (config.err?.errorType === 'auth') {
break;
}
mode = 'cli_token';
// If it fails, switch to token auth.
setConfig((c) => ({
...c,
mode,
}));
break;
case 'cli_token':
// Nothing to do, it will just render.
break;
case 'ui':
if (!signup) {
loginSuccess = await performUILogin(accessToken, orgName);
}
// We just need to redirect if in signup or login were successful since
// the cookies are installed.
if ((signup && signupSuccess) || loginSuccess) {
RedirectUtils.redirect(redirectURI || location || '/', {});
}
} }
// If it fails, switch to token auth.
setConfig((c) => ({ setConfig((c) => ({
...c, ...c,
loading: false, mode: 'cli_token',
})); }));
}; break;
case 'cli_token':
// Nothing to do, it will just render.
break;
case 'ui':
if (!signup) {
loginSuccess = await performUILogin(accessToken, orgName);
}
// We just need to redirect if in signup or login were successful since
// the cookies are installed.
if ((signup && signupSuccess) || loginSuccess) {
RedirectUtils.redirect(redirectURI || location || '/', {});
}
}
doAuth(); setConfig((c) => ({
}; ...c,
loading: false,
}));
};
GetOAuthProvider().handleToken().then((a: Token) => { const handleAccessToken = (accessToken: string) => {
handleAccessToken(a); const params = QueryString.parse(window.location.search.substr(1));
}).catch((err) => { let mode: AuthCallbackMode;
switch (params.mode) {
case 'cli_get':
case 'cli_token':
case 'ui':
({ mode } = params);
break;
default:
mode = 'ui';
}
const location = params.location && String(params.location);
const signup = !!params.signup;
const orgName = params.org_name && String(params.org_name);
const redirectURI = params.redirect_uri && String(params.redirect_uri);
setConfig({
mode,
signup,
token: accessToken,
loading: true,
});
doAuth(mode, signup, redirectURI, location, orgName, accessToken);
};
React.useEffect(() => {
GetOAuthProvider().handleToken().then(handleAccessToken).catch((err) => {
setErr('internal', `${err}`); setErr('internal', `${err}`);
}); });
}, []); }, []);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment