aboutsummaryrefslogtreecommitdiffhomepage
path: root/server
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2019-07-26 09:35:43 +0200
committerChocobozzz <me@florianbigard.com>2019-07-26 15:18:29 +0200
commitba211e7386bb2f25e37a4c5bcdfeb4237e1cd315 (patch)
tree398bb14a92c7df3765a0a64bac9f4672c5588488 /server
parent23bdacf8ec24ce47a15529830e116911d7478598 (diff)
downloadPeerTube-ba211e7386bb2f25e37a4c5bcdfeb4237e1cd315.tar.gz
PeerTube-ba211e7386bb2f25e37a4c5bcdfeb4237e1cd315.tar.zst
PeerTube-ba211e7386bb2f25e37a4c5bcdfeb4237e1cd315.zip
Add public settings endpoint
Diffstat (limited to 'server')
-rw-r--r--server/controllers/api/plugins.ts32
-rw-r--r--server/models/server/plugin.ts15
-rw-r--r--server/tests/api/check-params/plugins.ts10
-rw-r--r--server/tests/api/server/plugins.ts19
4 files changed, 58 insertions, 18 deletions
diff --git a/server/controllers/api/plugins.ts b/server/controllers/api/plugins.ts
index 86384ee27..6b7562fd3 100644
--- a/server/controllers/api/plugins.ts
+++ b/server/controllers/api/plugins.ts
@@ -26,6 +26,7 @@ import { logger } from '../../helpers/logger'
26import { listAvailablePluginsFromIndex } from '../../lib/plugins/plugin-index' 26import { listAvailablePluginsFromIndex } from '../../lib/plugins/plugin-index'
27import { PeertubePluginIndexList } from '../../../shared/models/plugins/peertube-plugin-index-list.model' 27import { PeertubePluginIndexList } from '../../../shared/models/plugins/peertube-plugin-index-list.model'
28import { RegisteredServerSettings } from '../../../shared/models/plugins/register-server-setting.model' 28import { RegisteredServerSettings } from '../../../shared/models/plugins/register-server-setting.model'
29import { PublicServerSetting } from '../../../shared/models/plugins/public-server.setting'
29 30
30const pluginRouter = express.Router() 31const pluginRouter = express.Router()
31 32
@@ -51,18 +52,16 @@ pluginRouter.get('/',
51 asyncMiddleware(listPlugins) 52 asyncMiddleware(listPlugins)
52) 53)
53 54
54pluginRouter.get('/:npmName', 55pluginRouter.get('/:npmName/registered-settings',
55 authenticate, 56 authenticate,
56 ensureUserHasRight(UserRight.MANAGE_PLUGINS), 57 ensureUserHasRight(UserRight.MANAGE_PLUGINS),
57 asyncMiddleware(existingPluginValidator), 58 asyncMiddleware(existingPluginValidator),
58 getPlugin 59 getPluginRegisteredSettings
59) 60)
60 61
61pluginRouter.get('/:npmName/registered-settings', 62pluginRouter.get('/:npmName/public-settings',
62 authenticate,
63 ensureUserHasRight(UserRight.MANAGE_PLUGINS),
64 asyncMiddleware(existingPluginValidator), 63 asyncMiddleware(existingPluginValidator),
65 getPluginRegisteredSettings 64 getPublicPluginSettings
66) 65)
67 66
68pluginRouter.put('/:npmName/settings', 67pluginRouter.put('/:npmName/settings',
@@ -73,6 +72,13 @@ pluginRouter.put('/:npmName/settings',
73 asyncMiddleware(updatePluginSettings) 72 asyncMiddleware(updatePluginSettings)
74) 73)
75 74
75pluginRouter.get('/:npmName',
76 authenticate,
77 ensureUserHasRight(UserRight.MANAGE_PLUGINS),
78 asyncMiddleware(existingPluginValidator),
79 getPlugin
80)
81
76pluginRouter.post('/install', 82pluginRouter.post('/install',
77 authenticate, 83 authenticate,
78 ensureUserHasRight(UserRight.MANAGE_PLUGINS), 84 ensureUserHasRight(UserRight.MANAGE_PLUGINS),
@@ -161,10 +167,20 @@ async function uninstallPlugin (req: express.Request, res: express.Response) {
161 return res.sendStatus(204) 167 return res.sendStatus(204)
162} 168}
163 169
170function getPublicPluginSettings (req: express.Request, res: express.Response) {
171 const plugin = res.locals.plugin
172 const registeredSettings = PluginManager.Instance.getRegisteredSettings(req.params.npmName)
173 const publicSettings = plugin.getPublicSettings(registeredSettings)
174
175 const json: PublicServerSetting = { publicSettings }
176
177 return res.json(json)
178}
179
164function getPluginRegisteredSettings (req: express.Request, res: express.Response) { 180function getPluginRegisteredSettings (req: express.Request, res: express.Response) {
165 const settings = PluginManager.Instance.getRegisteredSettings(req.params.npmName) 181 const registeredSettings = PluginManager.Instance.getRegisteredSettings(req.params.npmName)
166 182
167 const json: RegisteredServerSettings = { settings } 183 const json: RegisteredServerSettings = { registeredSettings }
168 184
169 return res.json(json) 185 return res.json(json)
170} 186}
diff --git a/server/models/server/plugin.ts b/server/models/server/plugin.ts
index f39b97ef0..a15f9a7e2 100644
--- a/server/models/server/plugin.ts
+++ b/server/models/server/plugin.ts
@@ -10,7 +10,7 @@ import {
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, json } from 'sequelize' 12import { FindAndCountOptions, json } from 'sequelize'
13import { PeerTubePluginIndex } from '../../../shared/models/plugins/peertube-plugin-index.model' 13import { RegisterServerSettingOptions } from '../../../shared/models/plugins/register-server-setting.model'
14 14
15@DefaultScope(() => ({ 15@DefaultScope(() => ({
16 attributes: { 16 attributes: {
@@ -238,6 +238,19 @@ export class PluginModel extends Model<PluginModel> {
238 return 'peertube-plugin-' + name 238 return 'peertube-plugin-' + name
239 } 239 }
240 240
241 getPublicSettings (registeredSettings: RegisterServerSettingOptions[]) {
242 const result: { [ name: string ]: string } = {}
243 const settings = this.settings || {}
244
245 for (const r of registeredSettings) {
246 if (r.private !== false) continue
247
248 result[r.name] = settings[r.name] || r.default || null
249 }
250
251 return result
252 }
253
241 toFormattedJSON (): PeerTubePlugin { 254 toFormattedJSON (): PeerTubePlugin {
242 return { 255 return {
243 name: this.name, 256 name: this.name,
diff --git a/server/tests/api/check-params/plugins.ts b/server/tests/api/check-params/plugins.ts
index 83ce6f451..9553bce17 100644
--- a/server/tests/api/check-params/plugins.ts
+++ b/server/tests/api/check-params/plugins.ts
@@ -281,7 +281,7 @@ describe('Test server plugins API validators', function () {
281 }) 281 })
282 }) 282 })
283 283
284 describe('When getting a plugin or the registered settings', function () { 284 describe('When getting a plugin or the registered settings or public settings', function () {
285 const path = '/api/v1/plugins/' 285 const path = '/api/v1/plugins/'
286 286
287 it('Should fail with an invalid token', async function () { 287 it('Should fail with an invalid token', async function () {
@@ -307,7 +307,7 @@ describe('Test server plugins API validators', function () {
307 }) 307 })
308 308
309 it('Should fail with an invalid npm name', async function () { 309 it('Should fail with an invalid npm name', async function () {
310 for (const suffix of [ 'toto', 'toto/registered-settings' ]) { 310 for (const suffix of [ 'toto', 'toto/registered-settings', 'toto/public-settings' ]) {
311 await makeGetRequest({ 311 await makeGetRequest({
312 url: server.url, 312 url: server.url,
313 path: path + suffix, 313 path: path + suffix,
@@ -316,7 +316,7 @@ describe('Test server plugins API validators', function () {
316 }) 316 })
317 } 317 }
318 318
319 for (const suffix of [ 'peertube-plugin-TOTO', 'peertube-plugin-TOTO/registered-settings' ]) { 319 for (const suffix of [ 'peertube-plugin-TOTO', 'peertube-plugin-TOTO/registered-settings', 'peertube-plugin-TOTO/public-settings' ]) {
320 await makeGetRequest({ 320 await makeGetRequest({
321 url: server.url, 321 url: server.url,
322 path: path + suffix, 322 path: path + suffix,
@@ -327,7 +327,7 @@ describe('Test server plugins API validators', function () {
327 }) 327 })
328 328
329 it('Should fail with an unknown plugin', async function () { 329 it('Should fail with an unknown plugin', async function () {
330 for (const suffix of [ 'peertube-plugin-toto', 'peertube-plugin-toto/registered-settings' ]) { 330 for (const suffix of [ 'peertube-plugin-toto', 'peertube-plugin-toto/registered-settings', 'peertube-plugin-toto/public-settings' ]) {
331 await makeGetRequest({ 331 await makeGetRequest({
332 url: server.url, 332 url: server.url,
333 path: path + suffix, 333 path: path + suffix,
@@ -338,7 +338,7 @@ describe('Test server plugins API validators', function () {
338 }) 338 })
339 339
340 it('Should succeed with the correct parameters', async function () { 340 it('Should succeed with the correct parameters', async function () {
341 for (const suffix of [ npmPlugin, `${npmPlugin}/registered-settings` ]) { 341 for (const suffix of [ npmPlugin, `${npmPlugin}/registered-settings`, `${npmPlugin}/public-settings` ]) {
342 await makeGetRequest({ 342 await makeGetRequest({
343 url: server.url, 343 url: server.url,
344 path: path + suffix, 344 path: path + suffix,
diff --git a/server/tests/api/server/plugins.ts b/server/tests/api/server/plugins.ts
index f8b2d78c9..b8a8a2fee 100644
--- a/server/tests/api/server/plugins.ts
+++ b/server/tests/api/server/plugins.ts
@@ -18,7 +18,7 @@ import {
18 setPluginVersion, uninstallPlugin, 18 setPluginVersion, uninstallPlugin,
19 updateCustomSubConfig, updateMyUser, updatePluginPackageJSON, updatePlugin, 19 updateCustomSubConfig, updateMyUser, updatePluginPackageJSON, updatePlugin,
20 updatePluginSettings, 20 updatePluginSettings,
21 wait 21 wait, getPublicSettings
22} from '../../../../shared/extra-utils' 22} from '../../../../shared/extra-utils'
23import { PluginType } from '../../../../shared/models/plugins/plugin.type' 23import { PluginType } from '../../../../shared/models/plugins/plugin.type'
24import { PeerTubePluginIndex } from '../../../../shared/models/plugins/peertube-plugin-index.model' 24import { PeerTubePluginIndex } from '../../../../shared/models/plugins/peertube-plugin-index.model'
@@ -27,6 +27,7 @@ import { PeerTubePlugin } from '../../../../shared/models/plugins/peertube-plugi
27import { User } from '../../../../shared/models/users' 27import { User } from '../../../../shared/models/users'
28import { PluginPackageJson } from '../../../../shared/models/plugins/plugin-package-json.model' 28import { PluginPackageJson } from '../../../../shared/models/plugins/plugin-package-json.model'
29import { RegisteredServerSettings } from '../../../../shared/models/plugins/register-server-setting.model' 29import { RegisteredServerSettings } from '../../../../shared/models/plugins/register-server-setting.model'
30import { PublicServerSetting } from '../../../../shared/models/plugins/public-server.setting'
30 31
31const expect = chai.expect 32const expect = chai.expect
32 33
@@ -217,14 +218,24 @@ describe('Test plugins', function () {
217 npmName: 'peertube-plugin-hello-world' 218 npmName: 'peertube-plugin-hello-world'
218 }) 219 })
219 220
220 const settings = (res.body as RegisteredServerSettings).settings 221 const registeredSettings = (res.body as RegisteredServerSettings).registeredSettings
221 222
222 expect(settings).to.have.length.at.least(1) 223 expect(registeredSettings).to.have.length.at.least(1)
223 224
224 const adminNameSettings = settings.find(s => s.name === 'admin-name') 225 const adminNameSettings = registeredSettings.find(s => s.name === 'admin-name')
225 expect(adminNameSettings).to.not.be.undefined 226 expect(adminNameSettings).to.not.be.undefined
226 }) 227 })
227 228
229 it('Should get public settings', async function () {
230 const res = await getPublicSettings({ url: server.url, npmName: 'peertube-plugin-hello-world' })
231
232 const publicSettings = (res.body as PublicServerSetting).publicSettings
233
234 expect(Object.keys(publicSettings)).to.have.lengthOf(1)
235 expect(Object.keys(publicSettings)).to.deep.equal([ 'user-name' ])
236 expect(publicSettings['user-name']).to.be.null
237 })
238
228 it('Should update the settings', async function () { 239 it('Should update the settings', async function () {
229 const settings = { 240 const settings = {
230 'admin-name': 'Cid' 241 'admin-name': 'Cid'