]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/server/plugin.ts
Save
[github/Chocobozzz/PeerTube.git] / server / models / server / plugin.ts
index 3f88ac26d5b160ad79442fec107992cc2ff1e45b..95fb386b557b54ad54cdbbf4f9ae13ccc83ee4cf 100644 (file)
@@ -1,7 +1,7 @@
 import * as Bluebird from 'bluebird'
-import { FindAndCountOptions, json } from 'sequelize'
+import { FindAndCountOptions, json, QueryTypes } from 'sequelize'
 import { AllowNull, Column, CreatedAt, DataType, DefaultScope, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
-import { MPlugin, MPluginFormattable } from '@server/typings/models'
+import { MPlugin, MPluginFormattable } from '@server/types/models'
 import { PeerTubePlugin } from '../../../shared/models/plugins/peertube-plugin.model'
 import { PluginType } from '../../../shared/models/plugins/plugin.type'
 import { RegisterServerSettingOptions } from '../../../shared/models/plugins/register-server-setting.model'
@@ -123,7 +123,7 @@ export class PluginModel extends Model<PluginModel> {
 
     return PluginModel.findOne(query)
       .then(p => {
-        if (!p || p.settings === undefined) {
+        if (!p || !p.settings || p.settings === undefined) {
           const registered = registeredSettings.find(s => s.name === settingName)
           if (!registered || registered.default === undefined) return undefined
 
@@ -153,7 +153,7 @@ export class PluginModel extends Model<PluginModel> {
         const result: { [settingName: string ]: string | boolean } = {}
 
         for (const name of settingNames) {
-          if (!p || p.settings[name] === undefined) {
+          if (!p || !p.settings || p.settings[name] === undefined) {
             const registered = registeredSettings.find(s => s.name === name)
 
             if (registered?.default !== undefined) {
@@ -212,18 +212,17 @@ export class PluginModel extends Model<PluginModel> {
   }
 
   static storeData (pluginName: string, pluginType: PluginType, key: string, data: any) {
-    const query = {
-      where: {
-        name: pluginName,
-        type: pluginType
-      }
-    }
+    const query = 'UPDATE "plugin" SET "storage" = jsonb_set(coalesce("storage", \'{}\'), :key, :data::jsonb) ' +
+    'WHERE "name" = :pluginName AND "type" = :pluginType'
 
-    const toSave = {
-      [`storage.${key}`]: data
+    const jsonPath = '{' + key + '}'
+
+    const options = {
+      replacements: { pluginName, pluginType, key: jsonPath, data: JSON.stringify(data) },
+      type: QueryTypes.UPDATE
     }
 
-    return PluginModel.update(toSave, query)
+    return PluginModel.sequelize.query(query, options)
                       .then(() => undefined)
   }