Move to eslint
[oweals/peertube.git] / shared / extra-utils / server / plugins.ts
index 1da313ab713ceac535c027032029b36cab2629a1..2d02d823d5f176f1030b6e730ebefd40630243bc 100644 (file)
@@ -1,16 +1,22 @@
-import { makeGetRequest, makePostBodyRequest } from '../requests/requests'
+import { makeGetRequest, makePostBodyRequest, makePutBodyRequest } from '../requests/requests'
 import { PluginType } from '../../models/plugins/plugin.type'
+import { PeertubePluginIndexList } from '../../models/plugins/peertube-plugin-index-list.model'
+import { readJSON, writeJSON } from 'fs-extra'
+import { ServerInfo } from './servers'
+import { root } from '../miscs/miscs'
+import { join } from 'path'
 
 function listPlugins (parameters: {
-  url: string,
-  accessToken: string,
-  start?: number,
-  count?: number,
-  sort?: string,
-  type?: PluginType,
+  url: string
+  accessToken: string
+  start?: number
+  count?: number
+  sort?: string
+  pluginType?: PluginType
+  uninstalled?: boolean
   expectedStatus?: number
 }) {
-  const { url, accessToken, start, count, sort, type, expectedStatus = 200 } = parameters
+  const { url, accessToken, start, count, sort, pluginType, uninstalled, expectedStatus = 200 } = parameters
   const path = '/api/v1/plugins'
 
   return makeGetRequest({
@@ -21,16 +27,49 @@ function listPlugins (parameters: {
       start,
       count,
       sort,
-      type
+      pluginType,
+      uninstalled
     },
     statusCodeExpected: expectedStatus
   })
 }
 
+function listAvailablePlugins (parameters: {
+  url: string
+  accessToken: string
+  start?: number
+  count?: number
+  sort?: string
+  pluginType?: PluginType
+  currentPeerTubeEngine?: string
+  search?: string
+  expectedStatus?: number
+}) {
+  const { url, accessToken, start, count, sort, pluginType, search, currentPeerTubeEngine, expectedStatus = 200 } = parameters
+  const path = '/api/v1/plugins/available'
+
+  const query: PeertubePluginIndexList = {
+    start,
+    count,
+    sort,
+    pluginType,
+    currentPeerTubeEngine,
+    search
+  }
+
+  return makeGetRequest({
+    url,
+    path,
+    token: accessToken,
+    query,
+    statusCodeExpected: expectedStatus
+  })
+}
+
 function getPlugin (parameters: {
-  url: string,
-  accessToken: string,
-  npmName: string,
+  url: string
+  accessToken: string
+  npmName: string
   expectedStatus?: number
 }) {
   const { url, accessToken, npmName, expectedStatus = 200 } = parameters
@@ -44,27 +83,29 @@ function getPlugin (parameters: {
   })
 }
 
-function getPluginSettings (parameters: {
-  url: string,
-  accessToken: string,
-  npmName: string,
+function updatePluginSettings (parameters: {
+  url: string
+  accessToken: string
+  npmName: string
+  settings: any
   expectedStatus?: number
 }) {
-  const { url, accessToken, npmName, expectedStatus = 200 } = parameters
+  const { url, accessToken, npmName, settings, expectedStatus = 204 } = parameters
   const path = '/api/v1/plugins/' + npmName + '/settings'
 
-  return makeGetRequest({
+  return makePutBodyRequest({
     url,
     path,
     token: accessToken,
+    fields: { settings },
     statusCodeExpected: expectedStatus
   })
 }
 
 function getPluginRegisteredSettings (parameters: {
-  url: string,
-  accessToken: string,
-  npmName: string,
+  url: string
+  accessToken: string
+  npmName: string
   expectedStatus?: number
 }) {
   const { url, accessToken, npmName, expectedStatus = 200 } = parameters
@@ -78,10 +119,40 @@ function getPluginRegisteredSettings (parameters: {
   })
 }
 
+function getPublicSettings (parameters: {
+  url: string
+  npmName: string
+  expectedStatus?: number
+}) {
+  const { url, npmName, expectedStatus = 200 } = parameters
+  const path = '/api/v1/plugins/' + npmName + '/public-settings'
+
+  return makeGetRequest({
+    url,
+    path,
+    statusCodeExpected: expectedStatus
+  })
+}
+
+function getPluginTranslations (parameters: {
+  url: string
+  locale: string
+  expectedStatus?: number
+}) {
+  const { url, locale, expectedStatus = 200 } = parameters
+  const path = '/plugins/translations/' + locale + '.json'
+
+  return makeGetRequest({
+    url,
+    path,
+    statusCodeExpected: expectedStatus
+  })
+}
+
 function installPlugin (parameters: {
-  url: string,
-  accessToken: string,
-  path?: string,
+  url: string
+  accessToken: string
+  path?: string
   npmName?: string
   expectedStatus?: number
 }) {
@@ -98,9 +169,9 @@ function installPlugin (parameters: {
 }
 
 function updatePlugin (parameters: {
-  url: string,
-  accessToken: string,
-  path?: string,
+  url: string
+  accessToken: string
+  path?: string
   npmName?: string
   expectedStatus?: number
 }) {
@@ -117,8 +188,8 @@ function updatePlugin (parameters: {
 }
 
 function uninstallPlugin (parameters: {
-  url: string,
-  accessToken: string,
+  url: string
+  accessToken: string
   npmName: string
   expectedStatus?: number
 }) {
@@ -134,12 +205,50 @@ function uninstallPlugin (parameters: {
   })
 }
 
+function getPluginsCSS (url: string) {
+  const path = '/plugins/global.css'
+
+  return makeGetRequest({
+    url,
+    path,
+    statusCodeExpected: 200
+  })
+}
+
+function getPackageJSONPath (server: ServerInfo, npmName: string) {
+  return join(root(), 'test' + server.internalServerNumber, 'plugins', 'node_modules', npmName, 'package.json')
+}
+
+function updatePluginPackageJSON (server: ServerInfo, npmName: string, json: any) {
+  const path = getPackageJSONPath(server, npmName)
+
+  return writeJSON(path, json)
+}
+
+function getPluginPackageJSON (server: ServerInfo, npmName: string) {
+  const path = getPackageJSONPath(server, npmName)
+
+  return readJSON(path)
+}
+
+function getPluginTestPath (suffix = '') {
+  return join(root(), 'server', 'tests', 'fixtures', 'peertube-plugin-test' + suffix)
+}
+
 export {
   listPlugins,
+  listAvailablePlugins,
   installPlugin,
+  getPluginTranslations,
+  getPluginsCSS,
   updatePlugin,
   getPlugin,
   uninstallPlugin,
-  getPluginSettings,
-  getPluginRegisteredSettings
+  updatePluginSettings,
+  getPluginRegisteredSettings,
+  getPackageJSONPath,
+  updatePluginPackageJSON,
+  getPluginPackageJSON,
+  getPluginTestPath,
+  getPublicSettings
 }