auth db login workflow

This commit is contained in:
Jan Prochazka
2024-08-06 12:45:28 +02:00
parent 5d6d827044
commit 196c0b8a3e
7 changed files with 70 additions and 12 deletions

View File

@@ -99,17 +99,17 @@
value="Open database login page"
on:click={async e => {
const state = `dbg-dblogin:${strmid}:${selectedConnection?.conid}`;
localStorage.setItem('dbloginState', state);
openWebLink(
`connections/dblogin?conid=${selectedConnection?.conid}&state=${encodeURIComponent(state)}&redirectUri=${
location.origin + location.pathname
}`
);
// internalRedirectTo(
sessionStorage.setItem('dbloginAuthState', state);
// openWebLink(
// `connections/dblogin?conid=${selectedConnection?.conid}&state=${encodeURIComponent(state)}&redirectUri=${
// location.origin + location.pathname
// }`
// );
internalRedirectTo(
`connections/dblogin?conid=${selectedConnection?.conid}&state=${encodeURIComponent(state)}&redirectUri=${
location.origin + location.pathname
}`
);
}}
/>
{:else if selectedConnection}

View File

@@ -22,6 +22,19 @@ export function isDbLoginCallback() {
);
}
export function isDbLoginAuthCallback() {
const params = new URLSearchParams(location.search);
const sentCode = params.get('code');
const sentState = params.get('state');
return (
sentCode &&
sentState &&
sentState.startsWith('dbg-dblogin:') &&
sentState == sessionStorage.getItem('dbloginAuthState')
);
}
export function handleOauthCallback() {
const params = new URLSearchParams(location.search);
const sentCode = params.get('code');
@@ -37,7 +50,7 @@ export function handleOauthCallback() {
if (accessToken) {
console.log('Settings access token from OAUTH');
localStorage.setItem('accessToken', accessToken);
internalRedirectTo('/');
internalRedirectTo('?');
} else {
console.log('Error when processing OAUTH callback', error || errorMessage);
internalRedirectTo(`?page=not-logged&error=${error || errorMessage}`);
@@ -60,7 +73,29 @@ export function handleOauthCallback() {
if (authResp.success) {
window.close();
} else if (authResp.error) {
internalRedirectTo(`?page=error&error=${encodeURIComponent(authResp)}`);
internalRedirectTo(`?page=error&error=${encodeURIComponent(authResp.error)}`);
} else {
internalRedirectTo(`?page=error`);
}
});
return true;
}
if (isDbLoginAuthCallback()) {
const [_prefix, strmid, conid] = sessionStorage.getItem('dbloginAuthState').split(':');
sessionStorage.removeItem('dbloginAuthState');
apiCall('connections/dblogin-auth-token', {
code: sentCode,
conid,
redirectUri: location.origin + location.pathname,
}).then(authResp => {
if (authResp.accessToken) {
localStorage.setItem('accessToken', authResp.accessToken);
internalRedirectTo('?');
} else if (authResp.error) {
internalRedirectTo(`?page=error&error=${encodeURIComponent(authResp.error)}`);
} else {
internalRedirectTo(`?page=error`);
}

View File

@@ -551,7 +551,7 @@ registerCommand({
id: 'app.logout',
category: 'App',
name: 'Logout',
testEnabled: () => getCurrentConfig()?.login != null,
testEnabled: () => getCurrentConfig()?.isUserLoggedIn,
onClick: doLogout,
});
@@ -559,7 +559,7 @@ registerCommand({
id: 'app.disconnect',
category: 'App',
name: 'Disconnect',
testEnabled: () => getCurrentConfig()?.singleConnection != null,
testEnabled: () => getCurrentConfig()?.singleConnection != null && !getCurrentConfig()?.isUserLoggedIn,
onClick: () => disconnectServerConnection(getCurrentConfig()?.singleConnection?._id),
});
@@ -873,7 +873,6 @@ registerCommand({
onClick: () => showModal(UploadErrorModal),
});
const electron = getElectron();
if (electron) {
electron.addEventListener('run-command', (e, commandId) => runCommand(commandId));