diff --git a/packages/api/src/controllers/runners.js b/packages/api/src/controllers/runners.js index db789e669..d239031b0 100644 --- a/packages/api/src/controllers/runners.js +++ b/packages/api/src/controllers/runners.js @@ -5,7 +5,7 @@ const uuidv1 = require('uuid/v1'); const byline = require('byline'); const socket = require('../utility/socket'); const { fork } = require('child_process'); -const { rundir, uploadsdir, pluginsdir } = require('../utility/directories'); +const { rundir, uploadsdir, pluginsdir, getPluginPath, packagedPluginList } = require('../utility/directories'); const { extractShellApiPlugins, extractShellApiFunctionName } = require('dbgate-tools'); const { handleProcessCommunication } = require('../utility/processComm'); @@ -92,7 +92,7 @@ module.exports = { const scriptFile = path.join(uploadsdir(), runid + '.js'); fs.writeFileSync(`${scriptFile}`, scriptText); fs.mkdirSync(directory); - const pluginNames = fs.readdirSync(pluginsdir()); + const pluginNames = _.union(fs.readdirSync(pluginsdir()), packagedPluginList); console.log(`RUNNING SCRIPT ${scriptFile}`); // const subprocess = fork(scriptFile, ['--checkParent', '--max-old-space-size=8192'], { const subprocess = fork(scriptFile, ['--checkParent', ...process.argv.slice(3)], { @@ -101,7 +101,7 @@ module.exports = { env: { ...process.env, DBGATE_API: global['dbgateApiModulePath'] || process.argv[1], - ..._.fromPairs(pluginNames.map(name => [`PLUGIN_${_.camelCase(name)}`, path.join(pluginsdir(), name)])), + ..._.fromPairs(pluginNames.map(name => [`PLUGIN_${_.camelCase(name)}`, getPluginPath(name)])), }, }); const pipeDispatcher = severity => data => diff --git a/packages/api/src/utility/directories.js b/packages/api/src/utility/directories.js index 778e9b83a..2a1781097 100644 --- a/packages/api/src/utility/directories.js +++ b/packages/api/src/utility/directories.js @@ -57,6 +57,14 @@ function packagedPluginsDir() { return null; } +const packagedPluginList = + packagedPluginsDir() != null ? fs.readdirSync(packagedPluginsDir()).filter(x => x.startsWith('dbgate-plugin-')) : []; + +function getPluginPath(packageName) { + if (packagedPluginList.includes(packageName)) return path.join(packagedPluginsDir(), packageName); + return path.join(pluginsdir(), packageName); +} + module.exports = { datadir, jsldir, @@ -67,4 +75,6 @@ module.exports = { pluginsdir, filesdir, packagedPluginsDir, + packagedPluginList, + getPluginPath, };