diff --git a/packages/api/src/controllers/plugins.js b/packages/api/src/controllers/plugins.js index 1961a6c09..2d671ebaa 100644 --- a/packages/api/src/controllers/plugins.js +++ b/packages/api/src/controllers/plugins.js @@ -1,7 +1,7 @@ const fs = require('fs-extra'); const axios = require('axios'); const path = require('path'); -const { pluginstmpdir, pluginsdir } = require('../utility/directories'); +const { pluginsdir, datadir } = require('../utility/directories'); const socket = require('../utility/socket'); const requirePlugin = require('../shell/requirePlugin'); const downloadPackage = require('../utility/downloadPackage'); @@ -24,6 +24,14 @@ const downloadPackage = require('../utility/downloadPackage'); // }; // } +const preinstallPlugins = [ + 'dbgate-plugin-mssql', + 'dbgate-plugin-mysql', + 'dbgate-plugin-postgres', + 'dbgate-plugin-csv', + 'dbgate-plugin-excel', +]; + module.exports = { script_meta: 'get', async script({ packageName }) { @@ -110,6 +118,8 @@ module.exports = { const dir = path.join(pluginsdir(), packageName); await fs.rmdir(dir, { recursive: true }); socket.emitChanged(`installed-plugins-changed`); + this.removedPlugins.push(packageName); + await fs.writeFile(path.join(datadir(), 'removed-plugins'), this.removedPlugins.join('\n')); }, command_meta: 'post', @@ -117,4 +127,24 @@ module.exports = { const content = requirePlugin(packageName); return content.commands[command](args); }, + + async _init() { + const installed = await this.installed(); + try { + this.removedPlugins = (await fs.readFile(path.join(datadir(), 'removed-plugins'), { encoding: 'utf-8' })).split( + '\n' + ); + } catch (err) { + this.removedPlugins = []; + } + for (const packageName of preinstallPlugins) { + if (this.removedPlugins.includes(packageName)) continue; + try { + console.log('Preinstalling plugin', packageName); + await this.install({ packageName }); + } catch (err) { + console.error('Error preinstalling plugin', packageName, err); + } + } + }, }; diff --git a/packages/api/src/utility/directories.js b/packages/api/src/utility/directories.js index fbb42d921..4f0ace4b9 100644 --- a/packages/api/src/utility/directories.js +++ b/packages/api/src/utility/directories.js @@ -35,7 +35,6 @@ const dirFunc = (dirname, clean = false) => () => { const jsldir = dirFunc('jsl', true); const rundir = dirFunc('run', true); const uploadsdir = dirFunc('uploads', true); -const pluginstmpdir = dirFunc('plugins-tmp', true); const pluginsdir = dirFunc('plugins'); const archivedir = dirFunc('archive'); @@ -46,6 +45,5 @@ module.exports = { uploadsdir, archivedir, ensureDirectory, - pluginstmpdir, pluginsdir, };