From fd206f0b2d7e5c8e00e2817266d90ec54f79e1da Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 17 Jan 2018 10:32:03 +0100 Subject: Add ability to update some configuration keys --- server/controllers/api/config.ts | 91 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 87 insertions(+), 4 deletions(-) (limited to 'server/controllers') diff --git a/server/controllers/api/config.ts b/server/controllers/api/config.ts index 35c89835b..f0b2c3d79 100644 --- a/server/controllers/api/config.ts +++ b/server/controllers/api/config.ts @@ -1,15 +1,34 @@ import * as express from 'express' +import { ServerConfig, UserRight } from '../../../shared' +import { CustomConfig } from '../../../shared/models/config/custom-config.model' +import { unlinkPromise, writeFilePromise } from '../../helpers/core-utils' import { isSignupAllowed } from '../../helpers/utils' - -import { CONFIG, CONSTRAINTS_FIELDS } from '../../initializers' -import { asyncMiddleware } from '../../middlewares' -import { ServerConfig } from '../../../shared' +import { CONFIG, CONSTRAINTS_FIELDS, reloadConfig } from '../../initializers' +import { asyncMiddleware, authenticate, ensureUserHasRight } from '../../middlewares' +import { customConfigUpdateValidator } from '../../middlewares/validators/config' +import { omit } from 'lodash' const configRouter = express.Router() configRouter.get('/', asyncMiddleware(getConfig) ) +configRouter.get('/custom', + authenticate, + ensureUserHasRight(UserRight.MANAGE_CONFIGURATION), + asyncMiddleware(getCustomConfig) +) +configRouter.put('/custom', + authenticate, + ensureUserHasRight(UserRight.MANAGE_CONFIGURATION), + asyncMiddleware(customConfigUpdateValidator), + asyncMiddleware(updateCustomConfig) +) +configRouter.delete('/custom', + authenticate, + ensureUserHasRight(UserRight.MANAGE_CONFIGURATION), + asyncMiddleware(deleteCustomConfig) +) async function getConfig (req: express.Request, res: express.Response, next: express.NextFunction) { const allowed = await isSignupAllowed() @@ -43,8 +62,72 @@ async function getConfig (req: express.Request, res: express.Response, next: exp return res.json(json) } +async function getCustomConfig (req: express.Request, res: express.Response, next: express.NextFunction) { + const data = customConfig() + + return res.json(data).end() +} + +async function deleteCustomConfig (req: express.Request, res: express.Response, next: express.NextFunction) { + await unlinkPromise(CONFIG.CUSTOM_FILE) + + reloadConfig() + + const data = customConfig() + + return res.json(data).end() +} + +async function updateCustomConfig (req: express.Request, res: express.Response, next: express.NextFunction) { + const toUpdate: CustomConfig = req.body + + // Need to change the videoQuota key a little bit + const toUpdateJSON = omit(toUpdate, 'videoQuota') + toUpdateJSON.user['video_quota'] = toUpdate.user.videoQuota + + await writeFilePromise(CONFIG.CUSTOM_FILE, JSON.stringify(toUpdateJSON)) + + reloadConfig() + + const data = customConfig() + return res.json(data).end() +} + // --------------------------------------------------------------------------- export { configRouter } + +// --------------------------------------------------------------------------- + +function customConfig (): CustomConfig { + return { + cache: { + previews: { + size: CONFIG.CACHE.PREVIEWS.SIZE + } + }, + signup: { + enabled: CONFIG.SIGNUP.ENABLED, + limit: CONFIG.SIGNUP.LIMIT + }, + admin: { + email: CONFIG.ADMIN.EMAIL + }, + user: { + videoQuota: CONFIG.USER.VIDEO_QUOTA + }, + transcoding: { + enabled: CONFIG.TRANSCODING.ENABLED, + threads: CONFIG.TRANSCODING.THREADS, + resolutions: { + '240p': CONFIG.TRANSCODING.RESOLUTIONS[ '240p' ], + '360p': CONFIG.TRANSCODING.RESOLUTIONS[ '360p' ], + '480p': CONFIG.TRANSCODING.RESOLUTIONS[ '480p' ], + '720p': CONFIG.TRANSCODING.RESOLUTIONS[ '720p' ], + '1080p': CONFIG.TRANSCODING.RESOLUTIONS[ '1080p' ] + } + } + } +} -- cgit v1.2.3