aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--server/lib/plugins/plugin-manager.ts14
-rw-r--r--server/models/server/plugin.ts36
-rw-r--r--shared/models/plugins/plugin-storage-manager.model.ts7
-rw-r--r--shared/models/plugins/register-options.model.ts3
4 files changed, 58 insertions, 2 deletions
diff --git a/server/lib/plugins/plugin-manager.ts b/server/lib/plugins/plugin-manager.ts
index 2fa80e878..7576b284c 100644
--- a/server/lib/plugins/plugin-manager.ts
+++ b/server/lib/plugins/plugin-manager.ts
@@ -13,6 +13,7 @@ import { outputFile } from 'fs-extra'
13import { RegisterSettingOptions } from '../../../shared/models/plugins/register-setting.model' 13import { RegisterSettingOptions } from '../../../shared/models/plugins/register-setting.model'
14import { RegisterHookOptions } from '../../../shared/models/plugins/register-hook.model' 14import { RegisterHookOptions } from '../../../shared/models/plugins/register-hook.model'
15import { PluginSettingsManager } from '../../../shared/models/plugins/plugin-settings-manager.model' 15import { PluginSettingsManager } from '../../../shared/models/plugins/plugin-settings-manager.model'
16import { PluginStorageManager } from '../../../shared/models/plugins/plugin-storage-manager.model'
16 17
17export interface RegisteredPlugin { 18export interface RegisteredPlugin {
18 npmName: string 19 npmName: string
@@ -307,13 +308,24 @@ export class PluginManager {
307 setSetting: (name: string, value: string) => PluginModel.setSetting(plugin.name, plugin.type, name, value) 308 setSetting: (name: string, value: string) => PluginModel.setSetting(plugin.name, plugin.type, name, value)
308 } 309 }
309 310
311 const storageManager: PluginStorageManager = {
312 getData: (key: string) => PluginModel.getData(plugin.name, plugin.type, key),
313
314 storeData: (key: string, data: any) => PluginModel.storeData(plugin.name, plugin.type, key, data)
315 }
316
310 const library: PluginLibrary = require(join(pluginPath, packageJSON.library)) 317 const library: PluginLibrary = require(join(pluginPath, packageJSON.library))
311 318
312 if (!isLibraryCodeValid(library)) { 319 if (!isLibraryCodeValid(library)) {
313 throw new Error('Library code is not valid (miss register or unregister function)') 320 throw new Error('Library code is not valid (miss register or unregister function)')
314 } 321 }
315 322
316 library.register({ registerHook, registerSetting, settingsManager }) 323 library.register({
324 registerHook,
325 registerSetting,
326 settingsManager,
327 storageManager
328 })
317 329
318 logger.info('Add plugin %s CSS to global file.', npmName) 330 logger.info('Add plugin %s CSS to global file.', npmName)
319 331
diff --git a/server/models/server/plugin.ts b/server/models/server/plugin.ts
index 340d49f3b..bd3d7a81e 100644
--- a/server/models/server/plugin.ts
+++ b/server/models/server/plugin.ts
@@ -9,7 +9,7 @@ import {
9} from '../../helpers/custom-validators/plugins' 9} from '../../helpers/custom-validators/plugins'
10import { PluginType } from '../../../shared/models/plugins/plugin.type' 10import { PluginType } from '../../../shared/models/plugins/plugin.type'
11import { PeerTubePlugin } from '../../../shared/models/plugins/peertube-plugin.model' 11import { PeerTubePlugin } from '../../../shared/models/plugins/peertube-plugin.model'
12import { FindAndCountOptions } from 'sequelize' 12import { FindAndCountOptions, json } from 'sequelize'
13 13
14@DefaultScope(() => ({ 14@DefaultScope(() => ({
15 attributes: { 15 attributes: {
@@ -142,6 +142,40 @@ export class PluginModel extends Model<PluginModel> {
142 .then(() => undefined) 142 .then(() => undefined)
143 } 143 }
144 144
145 static getData (pluginName: string, pluginType: PluginType, key: string) {
146 const query = {
147 raw: true,
148 attributes: [ [ json('storage.' + key), 'value' ] as any ], // FIXME: typings
149 where: {
150 name: pluginName,
151 type: pluginType
152 }
153 }
154
155 return PluginModel.findOne(query)
156 .then((c: any) => {
157 if (!c) return undefined
158
159 return c.value
160 })
161 }
162
163 static storeData (pluginName: string, pluginType: PluginType, key: string, data: any) {
164 const query = {
165 where: {
166 name: pluginName,
167 type: pluginType
168 }
169 }
170
171 const toSave = {
172 [`storage.${key}`]: data
173 }
174
175 return PluginModel.update(toSave, query)
176 .then(() => undefined)
177 }
178
145 static listForApi (options: { 179 static listForApi (options: {
146 type?: PluginType, 180 type?: PluginType,
147 uninstalled?: boolean, 181 uninstalled?: boolean,
diff --git a/shared/models/plugins/plugin-storage-manager.model.ts b/shared/models/plugins/plugin-storage-manager.model.ts
new file mode 100644
index 000000000..8a1f389f1
--- /dev/null
+++ b/shared/models/plugins/plugin-storage-manager.model.ts
@@ -0,0 +1,7 @@
1import * as Bluebird from 'bluebird'
2
3export interface PluginStorageManager {
4 getData: (key: string) => Bluebird<string>
5
6 storeData: (key: string, data: any) => Bluebird<any>
7}
diff --git a/shared/models/plugins/register-options.model.ts b/shared/models/plugins/register-options.model.ts
index e60ce3fe0..e3a7cff08 100644
--- a/shared/models/plugins/register-options.model.ts
+++ b/shared/models/plugins/register-options.model.ts
@@ -1,6 +1,7 @@
1import { RegisterHookOptions } from './register-hook.model' 1import { RegisterHookOptions } from './register-hook.model'
2import { RegisterSettingOptions } from './register-setting.model' 2import { RegisterSettingOptions } from './register-setting.model'
3import { PluginSettingsManager } from './plugin-settings-manager.model' 3import { PluginSettingsManager } from './plugin-settings-manager.model'
4import { PluginStorageManager } from './plugin-storage-manager.model'
4 5
5export type RegisterOptions = { 6export type RegisterOptions = {
6 registerHook: (options: RegisterHookOptions) => void 7 registerHook: (options: RegisterHookOptions) => void
@@ -8,4 +9,6 @@ export type RegisterOptions = {
8 registerSetting: (options: RegisterSettingOptions) => void 9 registerSetting: (options: RegisterSettingOptions) => void
9 10
10 settingsManager: PluginSettingsManager 11 settingsManager: PluginSettingsManager
12
13 storageManager: PluginStorageManager
11} 14}