diff --git a/packages/api/.env-covid b/packages/api/.env-covid deleted file mode 100644 index f08ba1a05..000000000 --- a/packages/api/.env-covid +++ /dev/null @@ -1,14 +0,0 @@ -DEVMODE=1 - -CONNECTIONS=mysql - -LABEL_mysql=MySql -SERVER_mysql=dbgate.org -USER_mysql=reader -PASSWORD_mysql=CovidReader2020 -PORT_mysql=3326 -ENGINE_mysql=mysql@dbgate-plugin-mysql -SINGLE_CONNECTION=mysql -SINGLE_DATABASE=covid - -PERMISSIONS=files/charts/read diff --git a/packages/api/.env-singledb b/packages/api/.env-singledb new file mode 100644 index 000000000..136f6429f --- /dev/null +++ b/packages/api/.env-singledb @@ -0,0 +1,15 @@ +DEVMODE=1 + +CONNECTIONS=mysql + +LABEL_mysql=MySql localhost +SERVER_mysql=localhost +USER_mysql=root +PASSWORD_mysql=test +PORT_mysql=3307 +ENGINE_mysql=mysql@dbgate-plugin-mysql + +SINGLE_CONNECTION=mysql +SINGLE_DATABASE=Chinook + +PERMISSIONS=files/charts/read diff --git a/packages/api/package.json b/packages/api/package.json index f59915ca0..f4ac19d0b 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -51,7 +51,9 @@ "scripts": { "start": "env-cmd node src/index.js", "start:portal": "env-cmd -f .env-portal node src/index.js", - "start:covid": "env-cmd -f .env-covid node src/index.js", + "start:singledb": "env-cmd -f .env-singledb node src/index.js", + "start:filedb": "env-cmd node src/index.js /home/jena/test/chinook/Chinook.db", + "start:singleconn": "env-cmd node src/index.js --server localhost --user root --port 3307 --engine mysql@dbgate-plugin-mysql --password test", "ts": "tsc", "build": "webpack" }, @@ -69,4 +71,4 @@ "optionalDependencies": { "msnodesqlv8": "^2.0.10" } -} +} \ No newline at end of file diff --git a/packages/api/src/controllers/config.js b/packages/api/src/controllers/config.js index 4f6e05e33..f813912bd 100644 --- a/packages/api/src/controllers/config.js +++ b/packages/api/src/controllers/config.js @@ -7,6 +7,7 @@ const _ = require('lodash'); const currentVersion = require('../currentVersion'); const platformInfo = require('../utility/platformInfo'); +const connections = require('../controllers/connections'); module.exports = { settingsValue: {}, @@ -21,30 +22,11 @@ module.exports = { get_meta: 'get', async get() { - // const toolbarButtons = process.env.TOOLBAR; - // const toolbar = toolbarButtons - // ? toolbarButtons.split(',').map((name) => ({ - // name, - // icon: process.env[`ICON_${name}`], - // title: process.env[`TITLE_${name}`], - // page: process.env[`PAGE_${name}`], - // })) - // : null; - // const startupPages = process.env.STARTUP_PAGES ? process.env.STARTUP_PAGES.split(',') : []; const permissions = process.env.PERMISSIONS ? process.env.PERMISSIONS.split(',') : null; - const singleDatabase = - process.env.SINGLE_CONNECTION && process.env.SINGLE_DATABASE - ? { - conid: process.env.SINGLE_CONNECTION, - database: process.env.SINGLE_DATABASE, - } - : null; return { - runAsPortal: !!process.env.CONNECTIONS, - // toolbar, - // startupPages, - singleDatabase, + runAsPortal: !!connections.portalConnections, + singleDatabase: connections.singleDatabase, permissions, ...currentVersion, }; diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index d806543fa..db0c95dad 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -8,6 +8,32 @@ const socket = require('../utility/socket'); const { encryptConnection } = require('../utility/crypting'); const { handleProcessCommunication } = require('../utility/processComm'); +function getNamedArgs() { + const res = {}; + for (let i = 0; i < process.argv.length; i++) { + const name = process.argv[i]; + if (name.startsWith('--')) { + let value = process.argv[i + 1]; + if (value && value.startsWith('--')) value = null; + res[name.substring(2)] = value == null ? true : value; + i++; + } else { + if (name.endsWith('.db') || name.endsWith('.sqlite') || name.endsWith('.sqlite3')) { + res.databaseFile = name; + res.engine = 'sqlite@dbgate-plugin-sqlite'; + } + } + } + return res; +} + +function getDatabaseFileLabel(databaseFile) { + if (!databaseFile) return databaseFile; + const m = databaseFile.match(/[\/]([^\/]+)$/); + if (m) return m[1]; + return databaseFile; +} + function getPortalCollections() { if (process.env.CONNECTIONS) { return _.compact(process.env.CONNECTIONS.split(',')).map(id => ({ @@ -24,13 +50,72 @@ function getPortalCollections() { displayName: process.env[`LABEL_${id}`], })); } + + const args = getNamedArgs(); + if (args.databaseFile) { + return [ + { + _id: 'argv', + databaseFile: args.databaseFile, + singleDatabase: true, + defaultDatabase: getDatabaseFileLabel(args.databaseFile), + engine: args.engine, + }, + ]; + } + if (args.databaseUrl) { + return [ + { + _id: 'argv', + useDatabaseUrl: true, + ...args, + }, + ]; + } + if (args.server) { + return [ + { + _id: 'argv', + ...args, + }, + ]; + } + return null; } const portalConnections = getPortalCollections(); +function getSingleDatabase() { + if (process.env.SINGLE_CONNECTION && process.env.SINGLE_DATABASE) { + // @ts-ignore + const connection = portalConnections.find(x => x._id == process.env.SINGLE_CONNECTION); + return { + connection, + name: process.env.SINGLE_DATABASE, + }; + } + // @ts-ignore + const arg0 = (portalConnections || []).find(x => x._id == 'argv'); + if (arg0) { + // @ts-ignore + if (arg0.singleDatabase) { + return { + connection: arg0, + // @ts-ignore + name: arg0.defaultDatabase, + }; + } + } + return null; +} + +const singleDatabase = getSingleDatabase(); + module.exports = { datastore: null, opened: [], + singleDatabase, + portalConnections, async _init() { const dir = datadir(); diff --git a/packages/web/src/stores.ts b/packages/web/src/stores.ts index 36e3880ba..1cb61f78b 100644 --- a/packages/web/src/stores.ts +++ b/packages/web/src/stores.ts @@ -120,6 +120,9 @@ let currentConfigValue = null; currentConfigStore.subscribe(value => { currentConfigValue = value; invalidateCommands(); + if (value.singleDatabase) { + currentDatabase.set(value.singleDatabase); + } }); export const getCurrentConfig = () => currentConfigValue; diff --git a/packages/web/src/widgets/DatabaseWidget.svelte b/packages/web/src/widgets/DatabaseWidget.svelte index 56318bfdf..9b5ee19a9 100644 --- a/packages/web/src/widgets/DatabaseWidget.svelte +++ b/packages/web/src/widgets/DatabaseWidget.svelte @@ -1,7 +1,7 @@ - - - + {#if !$config?.singleDatabase} + + + + {/if}