diff --git a/packages/api/src/controllers/auth.js b/packages/api/src/controllers/auth.js
index 9d326abd5..b9e6a9aff 100644
--- a/packages/api/src/controllers/auth.js
+++ b/packages/api/src/controllers/auth.js
@@ -8,7 +8,8 @@ const AD = require('activedirectory2').promiseWrapper;
const tokenSecret = uuidv1();
function shouldAuthorizeApi() {
- return !!process.env.OAUTH_AUTH;
+ const logins = getLogins();
+ return !!process.env.OAUTH_AUTH || !!process.env.AD_URL || (!!logins && !process.env.BASIC_AUTH);
}
function unauthorizedResponse(req, res, text) {
@@ -22,7 +23,7 @@ function unauthorizedResponse(req, res, text) {
}
function authMiddleware(req, res, next) {
- const SKIP_AUTH_PATHS = ['/config/get', '/auth/oauth-token', 'auth/login', '/stream'];
+ const SKIP_AUTH_PATHS = ['/config/get', '/auth/oauth-token', '/auth/login', '/stream'];
if (!shouldAuthorizeApi()) {
return next();
@@ -85,14 +86,16 @@ module.exports = {
try {
const res = await ad.authenticate(login, password);
if (!res) {
- return { error: 'login failed' };
+ return { error: 'Login failed' };
}
return {
accessToken: jwt.sign({ login }, tokenSecret, { expiresIn: '1m' }),
};
} catch (err) {
console.log('Failed active directory authentization', err.message);
- return { error: err.message };
+ return {
+ error: err.message,
+ };
}
}
@@ -100,7 +103,7 @@ module.exports = {
if (!logins) {
return { error: 'Logins not configured' };
}
- if (logins[login] == password) {
+ if (logins.find(x => x.login == login)?.password == password) {
return {
accessToken: jwt.sign({ login }, tokenSecret, { expiresIn: '1m' }),
};
diff --git a/packages/api/src/main.js b/packages/api/src/main.js
index a89670449..2edf4ca8b 100644
--- a/packages/api/src/main.js
+++ b/packages/api/src/main.js
@@ -42,7 +42,7 @@ function start() {
const server = http.createServer(app);
const logins = getLogins();
- if (logins) {
+ if (logins && process.env.BASIC_AUTH) {
app.use(
basicAuth({
users: _.fromPairs(logins.map(x => [x.login, x.password])),
diff --git a/packages/web/src/LoginPage.svelte b/packages/web/src/LoginPage.svelte
index 026b3874c..689441750 100644
--- a/packages/web/src/LoginPage.svelte
+++ b/packages/web/src/LoginPage.svelte
@@ -1,5 +1,6 @@
-
Sorry, you are not authorized to run DbGate
+
+
Sorry, you are not authorized to run DbGate
+ {#if error}
+
{error}
+ {/if}
+
+
+
+
+
diff --git a/packages/web/src/clientAuth.ts b/packages/web/src/clientAuth.ts
index af8a6511f..ac3e1ba3c 100644
--- a/packages/web/src/clientAuth.ts
+++ b/packages/web/src/clientAuth.ts
@@ -1,4 +1,4 @@
-import { apiCall, disableApi } from './utility/api';
+import { apiCall, disableApi, enableApi } from './utility/api';
import { getConfig } from './utility/metadataLoaders';
export function isOauthCallback() {
@@ -23,7 +23,7 @@ export function handleOauthCallback() {
}).then(authResp => {
const { accessToken } = authResp;
localStorage.setItem('accessToken', accessToken);
- location.replace('/');
+ internalRedirectTo('/');
});
return true;
@@ -42,13 +42,21 @@ export async function handleAuthOnStartup(config) {
}
}
-export async function redirectToLogin(config = null) {
- if (!config) config = await getConfig();
+export async function redirectToLogin(config = null, force = false) {
+ if (!config) {
+ enableApi();
+ config = await getConfig();
+ }
if (config.isLoginForm) {
- const index = location.pathname.lastIndexOf('/');
- const loginPath = index >= 0 ? location.pathname.substring(0, index) + '/?page=login' : '/?page=login';
- location.replace(loginPath);
+ if (!force) {
+ const params = new URLSearchParams(location.search);
+ if (params.get('page') == 'login' || params.get('page') == 'not-logged') {
+ return;
+ }
+ }
+ internalRedirectTo('/?page=login');
+ return;
}
if (config.oauth) {
@@ -60,5 +68,12 @@ export async function redirectToLogin(config = null) {
location.origin + location.pathname
)}&state=${encodeURIComponent(state)}`
);
+ return;
}
}
+
+export function internalRedirectTo(path) {
+ const index = location.pathname.lastIndexOf('/');
+ const newPath = index >= 0 ? location.pathname.substring(0, index) + path : path;
+ location.replace(newPath);
+}
diff --git a/packages/web/src/forms/TextField.svelte b/packages/web/src/forms/TextField.svelte
index 55f9a3506..e373dce94 100644
--- a/packages/web/src/forms/TextField.svelte
+++ b/packages/web/src/forms/TextField.svelte
@@ -4,6 +4,7 @@
export let value;
export let focused = false;
export let domEditor = undefined;
+ export let autocomplete = 'new-password';
if (focused) onMount(() => domEditor.focus());
@@ -17,5 +18,5 @@
on:click
bind:this={domEditor}
on:keydown
- autocomplete="new-password"
+ {autocomplete}
/>