From 841ddf8886f87ee694b604d2d0948326a6f9b4bb Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 5 May 2023 14:14:26 +0200 Subject: [PATCH] Don't call plugin register/unregister methods --- scripts/plugin/install.ts | 7 +++++- scripts/plugin/uninstall.ts | 2 +- server/controllers/api/plugins.ts | 4 ++-- server/lib/plugins/plugin-manager.ts | 34 ++++++++++++++++++++-------- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/scripts/plugin/install.ts b/scripts/plugin/install.ts index 0795d7c93..138f34446 100755 --- a/scripts/plugin/install.ts +++ b/scripts/plugin/install.ts @@ -32,5 +32,10 @@ async function run () { await initDatabaseModels(true) const toInstall = options.npmName || options.pluginPath - await PluginManager.Instance.install(toInstall, options.pluginVersion, !!options.pluginPath) + await PluginManager.Instance.install({ + toInstall, + version: options.pluginVersion, + fromDisk: !!options.pluginPath, + register: false + }) } diff --git a/scripts/plugin/uninstall.ts b/scripts/plugin/uninstall.ts index 152b651dd..770594685 100755 --- a/scripts/plugin/uninstall.ts +++ b/scripts/plugin/uninstall.ts @@ -25,5 +25,5 @@ async function run () { await initDatabaseModels(true) const toUninstall = options.npmName - await PluginManager.Instance.uninstall(toUninstall) + await PluginManager.Instance.uninstall({ npmName: toUninstall, unregister: false }) } diff --git a/server/controllers/api/plugins.ts b/server/controllers/api/plugins.ts index de9e055dc..e85fd6e11 100644 --- a/server/controllers/api/plugins.ts +++ b/server/controllers/api/plugins.ts @@ -150,7 +150,7 @@ async function installPlugin (req: express.Request, res: express.Response) { : undefined try { - const plugin = await PluginManager.Instance.install(toInstall, pluginVersion, fromDisk) + const plugin = await PluginManager.Instance.install({ toInstall, version: pluginVersion, fromDisk }) return res.json(plugin.toFormattedJSON()) } catch (err) { @@ -177,7 +177,7 @@ async function updatePlugin (req: express.Request, res: express.Response) { async function uninstallPlugin (req: express.Request, res: express.Response) { const body: ManagePlugin = req.body - await PluginManager.Instance.uninstall(body.npmName) + await PluginManager.Instance.uninstall({ npmName: body.npmName }) return res.status(HttpStatusCode.NO_CONTENT_204).end() } diff --git a/server/lib/plugins/plugin-manager.ts b/server/lib/plugins/plugin-manager.ts index d368aecfc..ca7275366 100644 --- a/server/lib/plugins/plugin-manager.ts +++ b/server/lib/plugins/plugin-manager.ts @@ -325,7 +325,14 @@ export class PluginManager implements ServerHook { // ###################### Installation ###################### - async install (toInstall: string, version?: string, fromDisk = false) { + async install (options: { + toInstall: string + version?: string + fromDisk?: boolean // default false + register?: boolean // default true + }) { + const { toInstall, version, fromDisk = false, register = true } = options + let plugin: PluginModel let npmName: string @@ -357,12 +364,14 @@ export class PluginManager implements ServerHook { logger.info('Successful installation of plugin %s.', toInstall) - await this.registerPluginOrTheme(plugin) + if (register) { + await this.registerPluginOrTheme(plugin) + } } catch (rootErr) { logger.error('Cannot install plugin %s, removing it...', toInstall, { err: rootErr }) try { - await this.uninstall(npmName) + await this.uninstall({ npmName }) } catch (err) { logger.error('Cannot uninstall plugin %s after failed installation.', toInstall, { err }) @@ -394,16 +403,23 @@ export class PluginManager implements ServerHook { // Unregister old hooks await this.unregister(npmName) - return this.install(toUpdate, version, fromDisk) + return this.install({ toInstall: toUpdate, version, fromDisk }) } - async uninstall (npmName: string) { + async uninstall (options: { + npmName: string + unregister?: boolean // default true + }) { + const { npmName, unregister } = options + logger.info('Uninstalling plugin %s.', npmName) - try { - await this.unregister(npmName) - } catch (err) { - logger.warn('Cannot unregister plugin %s.', npmName, { err }) + if (unregister) { + try { + await this.unregister(npmName) + } catch (err) { + logger.warn('Cannot unregister plugin %s.', npmName, { err }) + } } const plugin = await PluginModel.loadByNpmName(npmName)