diff --git a/packages/api/src/controllers/auth.js b/packages/api/src/controllers/auth.js
index 7235ce123..8d91da83e 100644
--- a/packages/api/src/controllers/auth.js
+++ b/packages/api/src/controllers/auth.js
@@ -9,6 +9,16 @@ function shouldAuthorizeApi() {
return !!process.env.OAUTH_AUTH;
}
+function unauthorizedResponse(req, res, text) {
+ // if (req.path == getExpressPath('/config/get-settings')) {
+ // return res.json({});
+ // }
+ // if (req.path == getExpressPath('/connections/list')) {
+ // return res.json([]);
+ // }
+ return res.sendStatus(401).send(text);
+}
+
function authMiddleware(req, res, next) {
const SKIP_AUTH_PATHS = ['/config/get', '/auth/oauth-token', '/stream'];
@@ -20,7 +30,7 @@ function authMiddleware(req, res, next) {
}
const authHeader = req.headers.authorization;
if (!authHeader) {
- return res.send(401, 'missing authorization header');
+ return unauthorizedResponse(req, res, 'missing authorization header');
}
const token = authHeader.split(' ')[1];
try {
@@ -28,10 +38,7 @@ function authMiddleware(req, res, next) {
req.user = decoded;
return next();
} catch (err) {
- console.log('&&&&&&&&&&&&&&&&&&&&&& IUNVALID TOKEN');
- console.log(token);
- console.log(err);
- return res.sendStatus(401).send('Invalid Token');
+ return unauthorizedResponse(req, res, 'invalid token');
}
}
diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte
index ca59767c8..e37018a19 100644
--- a/packages/web/src/App.svelte
+++ b/packages/web/src/App.svelte
@@ -20,12 +20,16 @@
import getElectron from './utility/getElectron';
import AppStartInfo from './widgets/AppStartInfo.svelte';
import SettingsListener from './utility/SettingsListener.svelte';
- import { handleAuthOnStartup } from './clientAuth';
+ import { handleAuthOnStartup, handleOauthCallback } from './clientAuth';
let loadedApi = false;
let loadedPlugins = false;
+ const isOauthCallback = handleOauthCallback();
async function loadApi() {
+ if (isOauthCallback) {
+ return;
+ }
// if (shouldWaitForElectronInitialize()) {
// setTimeout(loadApi, 100);
// return;
@@ -76,7 +80,7 @@
-{#if loadedApi}
+{#if loadedApi && !isOauthCallback}
diff --git a/packages/web/src/clientAuth.ts b/packages/web/src/clientAuth.ts
index 6024006ad..ae3d65906 100644
--- a/packages/web/src/clientAuth.ts
+++ b/packages/web/src/clientAuth.ts
@@ -1,34 +1,44 @@
import { apiCall } from './utility/api';
import { getConfig } from './utility/metadataLoaders';
-export async function handleAuthOnStartup(config) {
- console.log('********************* handleAuthOnStartup');
- if (config.oauth) {
- const params = new URLSearchParams(location.search);
- const sentCode = params.get('code');
- const sentState = params.get('state');
+export function handleOauthCallback() {
+ const params = new URLSearchParams(location.search);
+ const sentCode = params.get('code');
+ const sentState = params.get('state');
- if (
- sentCode &&
- sentState &&
- sentState.startsWith('dbg-oauth:') &&
- sentState == sessionStorage.getItem('oauthState')
- ) {
- const authResp = await apiCall('auth/oauth-token', {
- code: sentCode,
- redirectUri: location.origin,
- });
+ if (
+ sentCode &&
+ sentState &&
+ sentState.startsWith('dbg-oauth:') &&
+ sentState == sessionStorage.getItem('oauthState')
+ ) {
+ sessionStorage.removeItem('oauthState');
+ apiCall('auth/oauth-token', {
+ code: sentCode,
+ redirectUri: location.origin,
+ }).then(authResp => {
const { accessToken } = authResp;
console.log('Got new access token:', accessToken);
localStorage.setItem('accessToken', accessToken);
location.replace('/');
- } else {
- if (localStorage.getItem('accessToken')) {
- return;
- }
+ });
- redirectToLogin(config);
+ console.log('handleOauthCallback TRUE');
+ return true;
+ }
+
+ console.log('handleOauthCallback FALSE');
+ return false;
+}
+
+export async function handleAuthOnStartup(config) {
+ console.log('********************* handleAuthOnStartup');
+ if (config.oauth) {
+ if (localStorage.getItem('accessToken')) {
+ return;
}
+
+ redirectToLogin(config);
}
}
diff --git a/packages/web/src/main.ts b/packages/web/src/main.ts
index 2a72600c5..81169a1ba 100644
--- a/packages/web/src/main.ts
+++ b/packages/web/src/main.ts
@@ -3,6 +3,7 @@ import './utility/connectionsPinger';
import './utility/changeCurrentDbByTab';
import './commands/stdCommands';
import localStorageGarbageCollector from './utility/localStorageGarbageCollector';
+import { handleOauthCallback } from './clientAuth';
localStorageGarbageCollector();
diff --git a/packages/web/src/utility/api.ts b/packages/web/src/utility/api.ts
index 25b66e046..32705f9fe 100644
--- a/packages/web/src/utility/api.ts
+++ b/packages/web/src/utility/api.ts
@@ -9,7 +9,7 @@ import { redirectToLogin } from '../clientAuth';
let eventSource;
let apiLogging = false;
// let cacheCleanerRegistered;
-// let apiDisabled = false;
+let apiDisabled = false;
// export function disableApi() {
// apiDisabled = true;
@@ -41,6 +41,10 @@ export async function apiCall(route: string, args: {} = undefined) {
if (apiLogging) {
console.log('>>> API CALL', route, args);
}
+ if (apiDisabled) {
+ console.log('API disabled!!', route);
+ return;
+ }
const electron = getElectron();
if (electron) {
@@ -57,7 +61,9 @@ export async function apiCall(route: string, args: {} = undefined) {
body: JSON.stringify(args),
});
- if (resp.status == 401) {
+ if (resp.status == 401 && !apiDisabled) {
+ apiDisabled = true;
+ console.log('Disabling API', route);
// unauthorized
redirectToLogin();
}