From a5896799f169d3313b63165fe6a79d4149fa6df1 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 30 Apr 2020 09:28:39 +0200 Subject: Add plugin settings change watcher --- server/lib/plugins/plugin-manager.ts | 45 +++++++++++++++++++--------- server/lib/plugins/register-helpers-store.ts | 12 ++++++-- 2 files changed, 41 insertions(+), 16 deletions(-) (limited to 'server/lib') diff --git a/server/lib/plugins/plugin-manager.ts b/server/lib/plugins/plugin-manager.ts index f7b84b1ff..950acf7ad 100644 --- a/server/lib/plugins/plugin-manager.ts +++ b/server/lib/plugins/plugin-manager.ts @@ -144,20 +144,6 @@ export class PluginManager implements ServerHook { return this.translations[locale] || {} } - onLogout (npmName: string, authName: string, user: MUser) { - const auth = this.getAuth(npmName, authName) - - if (auth?.onLogout) { - logger.info('Running onLogout function from auth %s of plugin %s', authName, npmName) - - try { - auth.onLogout(user) - } catch (err) { - logger.warn('Cannot run onLogout function from auth %s of plugin %s.', authName, npmName, { err }) - } - } - } - async isTokenValid (token: MOAuthTokenUser, type: 'access' | 'refresh') { const auth = this.getAuth(token.User.pluginAuth, token.authName) if (!auth) return true @@ -180,6 +166,37 @@ export class PluginManager implements ServerHook { return true } + // ###################### External events ###################### + + onLogout (npmName: string, authName: string, user: MUser) { + const auth = this.getAuth(npmName, authName) + + if (auth?.onLogout) { + logger.info('Running onLogout function from auth %s of plugin %s', authName, npmName) + + try { + auth.onLogout(user) + } catch (err) { + logger.warn('Cannot run onLogout function from auth %s of plugin %s.', authName, npmName, { err }) + } + } + } + + onSettingsChanged (name: string, settings: any) { + const registered = this.getRegisteredPluginByShortName(name) + if (!registered) { + logger.error('Cannot find plugin %s to call on settings changed.', name) + } + + for (const cb of registered.registerHelpersStore.getOnSettingsChangedCallbacks()) { + try { + cb(settings) + } catch (err) { + logger.error('Cannot run on settings changed callback for %s.', registered.npmName, { err }) + } + } + } + // ###################### Hooks ###################### async runHook (hookName: ServerHookName, result?: T, params?: any): Promise { diff --git a/server/lib/plugins/register-helpers-store.ts b/server/lib/plugins/register-helpers-store.ts index 151196bf1..6317ac2cf 100644 --- a/server/lib/plugins/register-helpers-store.ts +++ b/server/lib/plugins/register-helpers-store.ts @@ -52,6 +52,8 @@ export class RegisterHelpersStore { private readonly idAndPassAuths: RegisterServerAuthPassOptions[] = [] private readonly externalAuths: RegisterServerAuthExternalOptions[] = [] + private readonly onSettingsChangeCallbacks: ((settings: any) => void)[] = [] + private readonly router: express.Router constructor ( @@ -149,6 +151,10 @@ export class RegisterHelpersStore { return this.externalAuths } + getOnSettingsChangedCallbacks () { + return this.onSettingsChangeCallbacks + } + private buildGetRouter () { return () => this.router } @@ -185,7 +191,7 @@ export class RegisterHelpersStore { const self = this return (options: RegisterServerAuthExternalOptions) => { - if (!options.authName || !options.onAuthRequest || typeof options.onAuthRequest !== 'function') { + if (!options.authName || typeof options.authDisplayName !== 'function' || typeof options.onAuthRequest !== 'function') { logger.error('Cannot register auth plugin %s: authName of getWeight or login are not valid.', this.npmName) return } @@ -212,7 +218,9 @@ export class RegisterHelpersStore { getSettings: (names: string[]) => PluginModel.getSettings(this.plugin.name, this.plugin.type, names), - setSetting: (name: string, value: string) => PluginModel.setSetting(this.plugin.name, this.plugin.type, name, value) + setSetting: (name: string, value: string) => PluginModel.setSetting(this.plugin.name, this.plugin.type, name, value), + + onSettingsChange: (cb: (settings: any) => void) => this.onSettingsChangeCallbacks.push(cb) } } -- cgit v1.2.3