diff --git a/packages/api/src/controllers/config.js b/packages/api/src/controllers/config.js index 3929d1330..253829c0e 100644 --- a/packages/api/src/controllers/config.js +++ b/packages/api/src/controllers/config.js @@ -43,6 +43,7 @@ module.exports = { allowShellScripting: platformInfo.allowShellScripting, isDocker: platformInfo.isDocker, isElectron: platformInfo.isElectron, + isLicenseValid: platformInfo.isLicenseValid, permissions, login, ...additionalConfigProps, diff --git a/packages/api/src/utility/checkLicense.js b/packages/api/src/utility/checkLicense.js new file mode 100644 index 000000000..3a91fbaf5 --- /dev/null +++ b/packages/api/src/utility/checkLicense.js @@ -0,0 +1,7 @@ +function checkLicense() { + return true; +} + +module.exports = { + checkLicense, +}; diff --git a/packages/api/src/utility/platformInfo.js b/packages/api/src/utility/platformInfo.js index d6af1323a..41e051823 100644 --- a/packages/api/src/utility/platformInfo.js +++ b/packages/api/src/utility/platformInfo.js @@ -3,6 +3,7 @@ const os = require('os'); const path = require('path'); const processArgs = require('./processArgs'); const isElectron = require('is-electron'); +const { checkLicense } = require('./checkLicense'); const platform = process.env.OS_OVERRIDE ? process.env.OS_OVERRIDE : process.platform; const isWindows = platform === 'win32'; @@ -12,6 +13,7 @@ const isDocker = fs.existsSync('/home/dbgate-docker/public'); const isDevMode = process.env.DEVMODE == '1'; const isNpmDist = !!global['IS_NPM_DIST']; const isForkedApi = processArgs.isForkedApi; +const isLicenseValid = checkLicense(); // function moduleAvailable(name) { // try { @@ -30,6 +32,7 @@ const platformInfo = { isElectronBundle: isElectron() && !isDevMode, isForkedApi, isElectron: isElectron(), + isLicenseValid, isDevMode, isNpmDist, isSnap: process.env.ELECTRON_SNAP == 'true', diff --git a/packages/web/src/ErrorPage.svelte b/packages/web/src/ErrorPage.svelte new file mode 100644 index 000000000..bc580c28a --- /dev/null +++ b/packages/web/src/ErrorPage.svelte @@ -0,0 +1,85 @@ + + +
+
DbGate
+
+ +
+
Configuration error
+ {#if !$config?.isLicenseValid} + + {:else} + + Back to app + {/if} +
+
+
+ + diff --git a/packages/web/src/clientAuth.ts b/packages/web/src/clientAuth.ts index 02f067aa2..9c2c22d8d 100644 --- a/packages/web/src/clientAuth.ts +++ b/packages/web/src/clientAuth.ts @@ -41,6 +41,10 @@ export function handleOauthCallback() { } export async function handleAuthOnStartup(config, isAdminPage = false) { + if (!config.isLicenseValid) { + internalRedirectTo(`?page=error`); + } + if (config.isAdminLoginForm && isAdminPage) { if (localStorage.getItem('adminAccessToken')) { return; diff --git a/packages/web/src/main.ts b/packages/web/src/main.ts index 68b78b28f..ee5b5155d 100644 --- a/packages/web/src/main.ts +++ b/packages/web/src/main.ts @@ -6,6 +6,7 @@ import localStorageGarbageCollector from './utility/localStorageGarbageCollector import { handleOauthCallback } from './clientAuth'; import LoginPage from './LoginPage.svelte'; import NotLoggedPage from './NotLoggedPage.svelte'; +import ErrorPage from './ErrorPage.svelte'; const isOauthCallback = handleOauthCallback(); @@ -22,6 +23,13 @@ function createApp() { switch (page) { case 'login': return new LoginPage({ + target: document.body, + props: { + isAdminPage: false, + }, + }); + case 'error': + return new ErrorPage({ target: document.body, props: {}, });