mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-27 19:36:00 +00:00
auto login for single provider
This commit is contained in:
@@ -54,6 +54,7 @@ class AuthProviderBase {
|
|||||||
return {
|
return {
|
||||||
amoid: this.amoid,
|
amoid: this.amoid,
|
||||||
workflowType: 'anonymous',
|
workflowType: 'anonymous',
|
||||||
|
name: 'Anonymous',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,6 +131,7 @@ class OAuthProvider extends AuthProviderBase {
|
|||||||
return {
|
return {
|
||||||
...super.toJson(),
|
...super.toJson(),
|
||||||
workflowType: 'redirect',
|
workflowType: 'redirect',
|
||||||
|
name: 'OAuth 2.0',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,6 +189,7 @@ class ADProvider extends AuthProviderBase {
|
|||||||
return {
|
return {
|
||||||
...super.toJson(),
|
...super.toJson(),
|
||||||
workflowType: 'credentials',
|
workflowType: 'credentials',
|
||||||
|
name: 'Active Directory',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -214,6 +217,7 @@ class LoginsProvider extends AuthProviderBase {
|
|||||||
return {
|
return {
|
||||||
...super.toJson(),
|
...super.toJson(),
|
||||||
workflowType: 'credentials',
|
workflowType: 'credentials',
|
||||||
|
name: 'Login & Password',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -229,6 +233,7 @@ class DenyAllProvider extends AuthProviderBase {
|
|||||||
return {
|
return {
|
||||||
...super.toJson(),
|
...super.toJson(),
|
||||||
workflowType: 'credentials',
|
workflowType: 'credentials',
|
||||||
|
name: 'Deny all',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,10 +45,23 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function processSingleProvider(provider) {
|
||||||
|
if (provider.workflowType == 'redirect') {
|
||||||
|
await processRedirectLogin(provider.amoid);
|
||||||
|
}
|
||||||
|
if (provider.workflowType == 'anonymous') {
|
||||||
|
processCredentialsLogin(provider.amoid, {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function loadAvailableAuthProviders() {
|
async function loadAvailableAuthProviders() {
|
||||||
const resp = await apiCall('auth/get-providers');
|
const resp = await apiCall('auth/get-providers');
|
||||||
availableProviders = resp.providers;
|
availableProviders = resp.providers;
|
||||||
values.update(x => ({ ...x, amoid: resp.default }));
|
values.update(x => ({ ...x, amoid: resp.default }));
|
||||||
|
|
||||||
|
if (availableProviders.length == 1) {
|
||||||
|
processSingleProvider(availableProviders[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
@@ -63,6 +76,49 @@
|
|||||||
$: if ($values.amoid != serversLoadedForAmoId) {
|
$: if ($values.amoid != serversLoadedForAmoId) {
|
||||||
loadAvailableServers($values.amoid);
|
loadAvailableServers($values.amoid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function processRedirectLogin(amoid) {
|
||||||
|
const state = `dbg-oauth:${strmid}:${amoid}`;
|
||||||
|
|
||||||
|
sessionStorage.setItem('oauthState', state);
|
||||||
|
console.log('Redirecting to OAUTH provider');
|
||||||
|
|
||||||
|
const resp = await apiCall('auth/redirect', {
|
||||||
|
amoid: amoid,
|
||||||
|
state,
|
||||||
|
redirectUri: location.origin + location.pathname,
|
||||||
|
});
|
||||||
|
|
||||||
|
const { uri } = resp;
|
||||||
|
if (uri) {
|
||||||
|
location.replace(uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function processCredentialsLogin(amoid, detail) {
|
||||||
|
const resp = await apiCall('auth/login', {
|
||||||
|
amoid,
|
||||||
|
isAdminPage,
|
||||||
|
...detail,
|
||||||
|
});
|
||||||
|
if (resp.error) {
|
||||||
|
internalRedirectTo(
|
||||||
|
`/?page=not-logged&error=${encodeURIComponent(resp.error)}&is-admin=${isAdminPage ? 'true' : ''}`
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const { accessToken } = resp;
|
||||||
|
if (accessToken) {
|
||||||
|
localStorage.setItem(isAdminPage ? 'adminAccessToken' : 'accessToken', accessToken);
|
||||||
|
if (isAdminPage) {
|
||||||
|
internalRedirectTo('/?page=admin');
|
||||||
|
} else {
|
||||||
|
internalRedirectTo('/');
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
internalRedirectTo(`/?page=not-logged`);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="root theme-light theme-type-light">
|
<div class="root theme-light theme-type-light">
|
||||||
@@ -74,7 +130,7 @@
|
|||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="heading">Log In</div>
|
<div class="heading">Log In</div>
|
||||||
<FormProviderCore {values}>
|
<FormProviderCore {values}>
|
||||||
{#if !isAdminPage}
|
{#if !isAdminPage && availableProviders?.length >= 2}
|
||||||
<FormSelectField
|
<FormSelectField
|
||||||
label="Authentization method"
|
label="Authentization method"
|
||||||
name="amoid"
|
name="amoid"
|
||||||
@@ -189,44 +245,9 @@
|
|||||||
enableApi();
|
enableApi();
|
||||||
|
|
||||||
if (isAdminPage || workflowType == 'credentials' || workflowType == 'anonymous') {
|
if (isAdminPage || workflowType == 'credentials' || workflowType == 'anonymous') {
|
||||||
const resp = await apiCall('auth/login', {
|
await processCredentialsLogin($values.amoid, e.detail);
|
||||||
amoid: $values.amoid,
|
|
||||||
isAdminPage,
|
|
||||||
...e.detail,
|
|
||||||
});
|
|
||||||
if (resp.error) {
|
|
||||||
internalRedirectTo(
|
|
||||||
`/?page=not-logged&error=${encodeURIComponent(resp.error)}&is-admin=${isAdminPage ? 'true' : ''}`
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const { accessToken } = resp;
|
|
||||||
if (accessToken) {
|
|
||||||
localStorage.setItem(isAdminPage ? 'adminAccessToken' : 'accessToken', accessToken);
|
|
||||||
if (isAdminPage) {
|
|
||||||
internalRedirectTo('/?page=admin');
|
|
||||||
} else {
|
|
||||||
internalRedirectTo('/');
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
internalRedirectTo(`/?page=not-logged`);
|
|
||||||
} else if (workflowType == 'redirect') {
|
} else if (workflowType == 'redirect') {
|
||||||
const state = `dbg-oauth:${strmid}:${$values.amoid}`;
|
await processRedirectLogin($values.amoid);
|
||||||
|
|
||||||
sessionStorage.setItem('oauthState', state);
|
|
||||||
console.log('Redirecting to OAUTH provider');
|
|
||||||
|
|
||||||
const resp = await apiCall('auth/redirect', {
|
|
||||||
amoid: $values.amoid,
|
|
||||||
state,
|
|
||||||
redirectUri: location.origin + location.pathname,
|
|
||||||
});
|
|
||||||
|
|
||||||
const { uri } = resp;
|
|
||||||
if (uri) {
|
|
||||||
location.replace(uri);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user