mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-04 18:29:27 +02:00
Introduce plugins command
This commit is contained in:
parent
9c6327f803
commit
ae2abfd3ae
26 changed files with 480 additions and 765 deletions
|
@ -1,307 +1,18 @@
|
|||
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
|
||||
|
||||
import { expect } from 'chai'
|
||||
import { readJSON, writeJSON } from 'fs-extra'
|
||||
import { join } from 'path'
|
||||
import { RegisteredServerSettings } from '@shared/models'
|
||||
import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
|
||||
import { PeertubePluginIndexList } from '../../models/plugins/plugin-index/peertube-plugin-index-list.model'
|
||||
import { PluginType } from '../../models/plugins/plugin.type'
|
||||
import { buildServerDirectory, root } from '../miscs/miscs'
|
||||
import { makeGetRequest, makePostBodyRequest, makePutBodyRequest } from '../requests/requests'
|
||||
import { ServerInfo } from './servers'
|
||||
|
||||
function listPlugins (parameters: {
|
||||
url: string
|
||||
accessToken: string
|
||||
start?: number
|
||||
count?: number
|
||||
sort?: string
|
||||
pluginType?: PluginType
|
||||
uninstalled?: boolean
|
||||
expectedStatus?: HttpStatusCode
|
||||
}) {
|
||||
const { url, accessToken, start, count, sort, pluginType, uninstalled, expectedStatus = HttpStatusCode.OK_200 } = parameters
|
||||
const path = '/api/v1/plugins'
|
||||
|
||||
return makeGetRequest({
|
||||
url,
|
||||
path,
|
||||
token: accessToken,
|
||||
query: {
|
||||
start,
|
||||
count,
|
||||
sort,
|
||||
pluginType,
|
||||
uninstalled
|
||||
},
|
||||
statusCodeExpected: expectedStatus
|
||||
})
|
||||
}
|
||||
|
||||
function listAvailablePlugins (parameters: {
|
||||
url: string
|
||||
accessToken: string
|
||||
start?: number
|
||||
count?: number
|
||||
sort?: string
|
||||
pluginType?: PluginType
|
||||
currentPeerTubeEngine?: string
|
||||
search?: string
|
||||
expectedStatus?: HttpStatusCode
|
||||
}) {
|
||||
const {
|
||||
url,
|
||||
accessToken,
|
||||
start,
|
||||
count,
|
||||
sort,
|
||||
pluginType,
|
||||
search,
|
||||
currentPeerTubeEngine,
|
||||
expectedStatus = HttpStatusCode.OK_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
|
||||
expectedStatus?: HttpStatusCode
|
||||
}) {
|
||||
const { url, accessToken, npmName, expectedStatus = HttpStatusCode.OK_200 } = parameters
|
||||
const path = '/api/v1/plugins/' + npmName
|
||||
|
||||
return makeGetRequest({
|
||||
url,
|
||||
path,
|
||||
token: accessToken,
|
||||
statusCodeExpected: expectedStatus
|
||||
})
|
||||
}
|
||||
|
||||
function updatePluginSettings (parameters: {
|
||||
url: string
|
||||
accessToken: string
|
||||
npmName: string
|
||||
settings: any
|
||||
expectedStatus?: HttpStatusCode
|
||||
}) {
|
||||
const { url, accessToken, npmName, settings, expectedStatus = HttpStatusCode.NO_CONTENT_204 } = parameters
|
||||
const path = '/api/v1/plugins/' + npmName + '/settings'
|
||||
|
||||
return makePutBodyRequest({
|
||||
url,
|
||||
path,
|
||||
token: accessToken,
|
||||
fields: { settings },
|
||||
statusCodeExpected: expectedStatus
|
||||
})
|
||||
}
|
||||
|
||||
function getPluginRegisteredSettings (parameters: {
|
||||
url: string
|
||||
accessToken: string
|
||||
npmName: string
|
||||
expectedStatus?: HttpStatusCode
|
||||
}) {
|
||||
const { url, accessToken, npmName, expectedStatus = HttpStatusCode.OK_200 } = parameters
|
||||
const path = '/api/v1/plugins/' + npmName + '/registered-settings'
|
||||
|
||||
return makeGetRequest({
|
||||
url,
|
||||
path,
|
||||
token: accessToken,
|
||||
statusCodeExpected: expectedStatus
|
||||
})
|
||||
}
|
||||
import { ServerInfo } from '../server/servers'
|
||||
|
||||
async function testHelloWorldRegisteredSettings (server: ServerInfo) {
|
||||
const res = await getPluginRegisteredSettings({
|
||||
url: server.url,
|
||||
accessToken: server.accessToken,
|
||||
npmName: 'peertube-plugin-hello-world'
|
||||
})
|
||||
|
||||
const registeredSettings = (res.body as RegisteredServerSettings).registeredSettings
|
||||
const body = await server.pluginsCommand.getRegisteredSettings({ npmName: 'peertube-plugin-hello-world' })
|
||||
|
||||
const registeredSettings = body.registeredSettings
|
||||
expect(registeredSettings).to.have.length.at.least(1)
|
||||
|
||||
const adminNameSettings = registeredSettings.find(s => s.name === 'admin-name')
|
||||
expect(adminNameSettings).to.not.be.undefined
|
||||
}
|
||||
|
||||
function getPublicSettings (parameters: {
|
||||
url: string
|
||||
npmName: string
|
||||
expectedStatus?: HttpStatusCode
|
||||
}) {
|
||||
const { url, npmName, expectedStatus = HttpStatusCode.OK_200 } = parameters
|
||||
const path = '/api/v1/plugins/' + npmName + '/public-settings'
|
||||
|
||||
return makeGetRequest({
|
||||
url,
|
||||
path,
|
||||
statusCodeExpected: expectedStatus
|
||||
})
|
||||
}
|
||||
|
||||
function getPluginTranslations (parameters: {
|
||||
url: string
|
||||
locale: string
|
||||
expectedStatus?: HttpStatusCode
|
||||
}) {
|
||||
const { url, locale, expectedStatus = HttpStatusCode.OK_200 } = parameters
|
||||
const path = '/plugins/translations/' + locale + '.json'
|
||||
|
||||
return makeGetRequest({
|
||||
url,
|
||||
path,
|
||||
statusCodeExpected: expectedStatus
|
||||
})
|
||||
}
|
||||
|
||||
function installPlugin (parameters: {
|
||||
url: string
|
||||
accessToken: string
|
||||
path?: string
|
||||
npmName?: string
|
||||
expectedStatus?: HttpStatusCode
|
||||
}) {
|
||||
const { url, accessToken, npmName, path, expectedStatus = HttpStatusCode.OK_200 } = parameters
|
||||
const apiPath = '/api/v1/plugins/install'
|
||||
|
||||
return makePostBodyRequest({
|
||||
url,
|
||||
path: apiPath,
|
||||
token: accessToken,
|
||||
fields: { npmName, path },
|
||||
statusCodeExpected: expectedStatus
|
||||
})
|
||||
}
|
||||
|
||||
function updatePlugin (parameters: {
|
||||
url: string
|
||||
accessToken: string
|
||||
path?: string
|
||||
npmName?: string
|
||||
expectedStatus?: HttpStatusCode
|
||||
}) {
|
||||
const { url, accessToken, npmName, path, expectedStatus = HttpStatusCode.OK_200 } = parameters
|
||||
const apiPath = '/api/v1/plugins/update'
|
||||
|
||||
return makePostBodyRequest({
|
||||
url,
|
||||
path: apiPath,
|
||||
token: accessToken,
|
||||
fields: { npmName, path },
|
||||
statusCodeExpected: expectedStatus
|
||||
})
|
||||
}
|
||||
|
||||
function uninstallPlugin (parameters: {
|
||||
url: string
|
||||
accessToken: string
|
||||
npmName: string
|
||||
expectedStatus?: HttpStatusCode
|
||||
}) {
|
||||
const { url, accessToken, npmName, expectedStatus = HttpStatusCode.NO_CONTENT_204 } = parameters
|
||||
const apiPath = '/api/v1/plugins/uninstall'
|
||||
|
||||
return makePostBodyRequest({
|
||||
url,
|
||||
path: apiPath,
|
||||
token: accessToken,
|
||||
fields: { npmName },
|
||||
statusCodeExpected: expectedStatus
|
||||
})
|
||||
}
|
||||
|
||||
function getPluginsCSS (url: string) {
|
||||
const path = '/plugins/global.css'
|
||||
|
||||
return makeGetRequest({
|
||||
url,
|
||||
path,
|
||||
statusCodeExpected: HttpStatusCode.OK_200
|
||||
})
|
||||
}
|
||||
|
||||
function getPackageJSONPath (server: ServerInfo, npmName: string) {
|
||||
return buildServerDirectory(server, join('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)
|
||||
}
|
||||
|
||||
function getExternalAuth (options: {
|
||||
url: string
|
||||
npmName: string
|
||||
npmVersion: string
|
||||
authName: string
|
||||
query?: any
|
||||
statusCodeExpected?: HttpStatusCode
|
||||
}) {
|
||||
const { url, npmName, npmVersion, authName, statusCodeExpected, query } = options
|
||||
|
||||
const path = '/plugins/' + npmName + '/' + npmVersion + '/auth/' + authName
|
||||
|
||||
return makeGetRequest({
|
||||
url,
|
||||
path,
|
||||
query,
|
||||
statusCodeExpected: statusCodeExpected || HttpStatusCode.OK_200,
|
||||
redirects: 0
|
||||
})
|
||||
}
|
||||
|
||||
export {
|
||||
listPlugins,
|
||||
listAvailablePlugins,
|
||||
installPlugin,
|
||||
getPluginTranslations,
|
||||
getPluginsCSS,
|
||||
updatePlugin,
|
||||
getPlugin,
|
||||
uninstallPlugin,
|
||||
testHelloWorldRegisteredSettings,
|
||||
updatePluginSettings,
|
||||
getPluginRegisteredSettings,
|
||||
getPackageJSONPath,
|
||||
updatePluginPackageJSON,
|
||||
getPluginPackageJSON,
|
||||
getPluginTestPath,
|
||||
getPublicSettings,
|
||||
getExternalAuth
|
||||
testHelloWorldRegisteredSettings
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue