diff --git a/packages/api/.env b/packages/api/.env index e0a3930f9..f0e84f7b3 100644 --- a/packages/api/.env +++ b/packages/api/.env @@ -1,15 +1 @@ -CONNECTIONS=mysql,postgres - -LABEL_mysql=MySql localhost -SERVER_mysql=localhost -USER_mysql=root -PASSWORD_mysql=test -PORT_mysql=3307 -ENGINE_mysql=mysql@dbgate-plugin-mysql - -LABEL_postgres=Postgres localhost -SERVER_postgres=localhost -USER_postgres=postgres -PASSWORD_postgres=test -PORT_postgres=5433 -ENGINE_postgres=postgres@dbgate-plugin-postgres +DEVMODE=1 diff --git a/packages/api/.covid-env b/packages/api/.env-covid similarity index 95% rename from packages/api/.covid-env rename to packages/api/.env-covid index b7606fc91..f08ba1a05 100644 --- a/packages/api/.covid-env +++ b/packages/api/.env-covid @@ -1,3 +1,5 @@ +DEVMODE=1 + CONNECTIONS=mysql LABEL_mysql=MySql diff --git a/packages/api/.env-portal b/packages/api/.env-portal new file mode 100644 index 000000000..824ef8b29 --- /dev/null +++ b/packages/api/.env-portal @@ -0,0 +1,17 @@ +DEVMODE=1 + +CONNECTIONS=mysql,postgres + +LABEL_mysql=MySql localhost +SERVER_mysql=localhost +USER_mysql=root +PASSWORD_mysql=test +PORT_mysql=3307 +ENGINE_mysql=mysql@dbgate-plugin-mysql + +LABEL_postgres=Postgres localhost +SERVER_postgres=localhost +USER_postgres=postgres +PASSWORD_postgres=test +PORT_postgres=5433 +ENGINE_postgres=postgres@dbgate-plugin-postgres diff --git a/packages/api/package.json b/packages/api/package.json index d0c03545f..9e23e5e8a 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -49,9 +49,9 @@ "uuid": "^3.4.0" }, "scripts": { - "start": "node src/index.js", - "start:portal": "env-cmd nodemon src/index.js", - "start:covid": "env-cmd -f .covid-env nodemon src/index.js", + "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", "ts": "tsc", "build": "webpack" }, diff --git a/packages/api/src/main.js b/packages/api/src/main.js index 4a41b2ab9..c60368b08 100644 --- a/packages/api/src/main.js +++ b/packages/api/src/main.js @@ -28,6 +28,7 @@ const files = require('./controllers/files'); const scheduler = require('./controllers/scheduler'); const { rundir } = require('./utility/directories'); +const platformInfo = require('./utility/platformInfo'); function start(argument = null) { // console.log('process.argv', process.argv); @@ -79,11 +80,11 @@ function start(argument = null) { app.use('/runners/data', express.static(rundir())); - if (fs.existsSync('/home/dbgate-docker/public')) { + if (platformInfo.isDocker) { // server static files inside docker container app.use(express.static('/home/dbgate-docker/public')); } else { - if (argument != 'startNodeWeb') { + if (!platformInfo.isNpmDist) { app.get('/', (req, res) => { res.send('DbGate API'); }); @@ -99,7 +100,7 @@ function start(argument = null) { process.send({ msgtype: 'listening', port }); }); }); - } else if (argument == 'startNodeWeb') { + } else if (platformInfo.isNpmDist) { app.use(express.static(path.join(__dirname, '../../dbgate-web/public'))); findFreePort(5000, function (err, port) { server.listen(port, () => { diff --git a/packages/api/src/shell/requirePlugin.js b/packages/api/src/shell/requirePlugin.js index aabb00424..fdc1b2f5f 100644 --- a/packages/api/src/shell/requirePlugin.js +++ b/packages/api/src/shell/requirePlugin.js @@ -2,7 +2,7 @@ const path = require('path'); const fs = require('fs'); const { pluginsdir, packagedPluginsDir } = require('../utility/directories'); const nativeModules = require('../nativeModules'); -const _isRunOnSource = require('../utility/_isRunOnSource'); +const platformInfo = require('../utility/platformInfo'); const loadedPlugins = {}; @@ -12,7 +12,7 @@ const dbgateEnv = { }; function getModulePath(packageName) { - const packagedModulePath = _isRunOnSource() + const packagedModulePath = platformInfo.isDevMode ? path.join(packagedPluginsDir(), packageName, 'src', 'backend', 'index.js') : path.join(packagedPluginsDir(), packageName, 'dist', 'backend.js'); diff --git a/packages/api/src/utility/_isRunOnSource.js b/packages/api/src/utility/_isRunOnSource.js deleted file mode 100644 index 5cbed583a..000000000 --- a/packages/api/src/utility/_isRunOnSource.js +++ /dev/null @@ -1,5 +0,0 @@ -function _isRunOnSource() { - return __filename.endsWith('_isRunOnSource.js'); -} - -module.exports = _isRunOnSource; diff --git a/packages/api/src/utility/directories.js b/packages/api/src/utility/directories.js index 40bb6fee9..4ead0e247 100644 --- a/packages/api/src/utility/directories.js +++ b/packages/api/src/utility/directories.js @@ -2,7 +2,6 @@ const os = require('os'); const path = require('path'); const fs = require('fs'); const cleanDirectory = require('./cleanDirectory'); -const _isRunOnSource = require('./_isRunOnSource'); const platformInfo = require('./platformInfo'); const createDirectories = {}; @@ -42,17 +41,20 @@ const archivedir = dirFunc('archive'); const filesdir = dirFunc('files'); function packagedPluginsDir() { - if (_isRunOnSource()) { + if (platformInfo.isDevMode) { return path.resolve(__dirname, '../../../../plugins'); } if (platformInfo.isDocker) { return '/home/dbgate-docker/plugins'; } - if (process.argv[2] == 'startNodeWeb') { + if (platformInfo.isNpmDist) { // node_modules return global['dbgateApiPackagedPluginsPath']; } - return path.resolve(__dirname, '../../plugins'); + if (platformInfo.isElectron) { + return path.resolve(__dirname, '../../plugins'); + } + return null; } module.exports = { diff --git a/packages/api/src/utility/platformInfo.js b/packages/api/src/utility/platformInfo.js index 2557907d9..9f3427066 100644 --- a/packages/api/src/utility/platformInfo.js +++ b/packages/api/src/utility/platformInfo.js @@ -8,12 +8,28 @@ const isWindows = platform === 'win32'; const isMac = platform === 'darwin'; const isLinux = platform === 'linux'; const isDocker = fs.existsSync('/home/dbgate-docker/build'); +const isDevMode = p.env.DEVMODE == '1'; +const isNpmDist = p.argv[2] == 'startNodeWeb'; + +function moduleAvailable(name) { + try { + require.resolve(name); + return true; + } catch (e) { + return false; + } +} + +const isElectron = moduleAvailable('electron'); const platformInfo = { isWindows, isMac, isLinux, isDocker, + isElectron, + isDevMode, + isNpmDist, isSnap: p.env.ELECTRON_SNAP == 'true', isPortable: isWindows && p.env.PORTABLE_EXECUTABLE_DIR, isAppImage: p.env.DESKTOPINTEGRATION === 'AppImageLauncher',