diff options
-rw-r--r-- | server/initializers/constants.ts | 2 | ||||
-rw-r--r-- | server/initializers/migrations/0405-plugin.ts | 40 | ||||
-rw-r--r-- | server/lib/plugins/hooks.ts | 2 | ||||
-rw-r--r-- | server/lib/plugins/plugin-manager.ts | 7 | ||||
-rw-r--r-- | server/tests/plugins/action-hooks.ts | 2 | ||||
-rw-r--r-- | shared/core-utils/plugins/hooks.ts | 2 |
6 files changed, 51 insertions, 4 deletions
diff --git a/server/initializers/constants.ts b/server/initializers/constants.ts index 1111fd97f..5329d5fab 100644 --- a/server/initializers/constants.ts +++ b/server/initializers/constants.ts | |||
@@ -14,7 +14,7 @@ import { CONFIG, registerConfigChangedHandler } from './config' | |||
14 | 14 | ||
15 | // --------------------------------------------------------------------------- | 15 | // --------------------------------------------------------------------------- |
16 | 16 | ||
17 | const LAST_MIGRATION_VERSION = 400 | 17 | const LAST_MIGRATION_VERSION = 405 |
18 | 18 | ||
19 | // --------------------------------------------------------------------------- | 19 | // --------------------------------------------------------------------------- |
20 | 20 | ||
diff --git a/server/initializers/migrations/0405-plugin.ts b/server/initializers/migrations/0405-plugin.ts new file mode 100644 index 000000000..c55b81960 --- /dev/null +++ b/server/initializers/migrations/0405-plugin.ts | |||
@@ -0,0 +1,40 @@ | |||
1 | import * as Sequelize from 'sequelize' | ||
2 | |||
3 | async function up (utils: { | ||
4 | transaction: Sequelize.Transaction, | ||
5 | queryInterface: Sequelize.QueryInterface, | ||
6 | sequelize: Sequelize.Sequelize, | ||
7 | db: any | ||
8 | }): Promise<void> { | ||
9 | { | ||
10 | const query = ` | ||
11 | CREATE TABLE IF NOT EXISTS "plugin" | ||
12 | ( | ||
13 | "id" SERIAL, | ||
14 | "name" VARCHAR(255) NOT NULL, | ||
15 | "type" INTEGER NOT NULL, | ||
16 | "version" VARCHAR(255) NOT NULL, | ||
17 | "latestVersion" VARCHAR(255), | ||
18 | "enabled" BOOLEAN NOT NULL, | ||
19 | "uninstalled" BOOLEAN NOT NULL, | ||
20 | "peertubeEngine" VARCHAR(255) NOT NULL, | ||
21 | "description" VARCHAR(255), | ||
22 | "homepage" VARCHAR(255) NOT NULL, | ||
23 | "settings" JSONB, | ||
24 | "storage" JSONB, | ||
25 | "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, | ||
26 | "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, | ||
27 | PRIMARY KEY ("id") | ||
28 | );` | ||
29 | await utils.sequelize.query(query) | ||
30 | } | ||
31 | } | ||
32 | |||
33 | function down (options) { | ||
34 | throw new Error('Not implemented.') | ||
35 | } | ||
36 | |||
37 | export { | ||
38 | up, | ||
39 | down | ||
40 | } | ||
diff --git a/server/lib/plugins/hooks.ts b/server/lib/plugins/hooks.ts index b694d4118..bcc8c674e 100644 --- a/server/lib/plugins/hooks.ts +++ b/server/lib/plugins/hooks.ts | |||
@@ -9,7 +9,7 @@ type RawFunction <U, T> = (params: U) => T | |||
9 | // Helpers to run hooks | 9 | // Helpers to run hooks |
10 | const Hooks = { | 10 | const Hooks = { |
11 | wrapObject: <T, U extends ServerFilterHookName>(result: T, hookName: U) => { | 11 | wrapObject: <T, U extends ServerFilterHookName>(result: T, hookName: U) => { |
12 | return PluginManager.Instance.runHook(hookName, result) as Promise<T> | 12 | return PluginManager.Instance.runHook(hookName, result) |
13 | }, | 13 | }, |
14 | 14 | ||
15 | wrapPromiseFun: async <U, T, V extends ServerFilterHookName>(fun: PromiseFunction<U, T>, params: U, hookName: V) => { | 15 | wrapPromiseFun: async <U, T, V extends ServerFilterHookName>(fun: PromiseFunction<U, T>, params: U, hookName: V) => { |
diff --git a/server/lib/plugins/plugin-manager.ts b/server/lib/plugins/plugin-manager.ts index 6485a47c5..afc07a151 100644 --- a/server/lib/plugins/plugin-manager.ts +++ b/server/lib/plugins/plugin-manager.ts | |||
@@ -125,6 +125,13 @@ export class PluginManager implements ServerHook { | |||
125 | try { | 125 | try { |
126 | await this.registerPluginOrTheme(plugin) | 126 | await this.registerPluginOrTheme(plugin) |
127 | } catch (err) { | 127 | } catch (err) { |
128 | // Try to unregister the plugin | ||
129 | try { | ||
130 | await this.unregister(PluginModel.buildNpmName(plugin.name, plugin.type)) | ||
131 | } catch { | ||
132 | // we don't care if we cannot unregister it | ||
133 | } | ||
134 | |||
128 | logger.error('Cannot register plugin %s, skipping.', plugin.name, { err }) | 135 | logger.error('Cannot register plugin %s, skipping.', plugin.name, { err }) |
129 | } | 136 | } |
130 | } | 137 | } |
diff --git a/server/tests/plugins/action-hooks.ts b/server/tests/plugins/action-hooks.ts index 2a941148a..e28732cac 100644 --- a/server/tests/plugins/action-hooks.ts +++ b/server/tests/plugins/action-hooks.ts | |||
@@ -43,7 +43,7 @@ describe('Test plugin action hooks', function () { | |||
43 | path: getPluginTestPath() | 43 | path: getPluginTestPath() |
44 | }) | 44 | }) |
45 | 45 | ||
46 | await killallServers([ servers[0] ]) | 46 | killallServers([ servers[0] ]) |
47 | 47 | ||
48 | await reRunServer(servers[0]) | 48 | await reRunServer(servers[0]) |
49 | }) | 49 | }) |
diff --git a/shared/core-utils/plugins/hooks.ts b/shared/core-utils/plugins/hooks.ts index 60f4130f5..3d59a7428 100644 --- a/shared/core-utils/plugins/hooks.ts +++ b/shared/core-utils/plugins/hooks.ts | |||
@@ -8,7 +8,7 @@ function getHookType (hookName: string) { | |||
8 | return HookType.STATIC | 8 | return HookType.STATIC |
9 | } | 9 | } |
10 | 10 | ||
11 | async function internalRunHook <T>(handler: Function, hookType: HookType, result: T, params: any, onError: (err: Error) => void) { | 11 | async function internalRunHook <T> (handler: Function, hookType: HookType, result: T, params: any, onError: (err: Error) => void) { |
12 | try { | 12 | try { |
13 | if (hookType === HookType.FILTER) { | 13 | if (hookType === HookType.FILTER) { |
14 | const p = handler(result, params) | 14 | const p = handler(result, params) |