From 72c33e716fecd1826dcf645957f8669821f91ff3 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 28 May 2020 11:15:38 +0200 Subject: Support broadcast messages --- server/controllers/api/config.ts | 13 +++++++++++++ server/initializers/checker-after-init.ts | 14 ++++++++++++-- server/initializers/config.ts | 7 +++++++ server/middlewares/validators/config.ts | 5 +++++ server/tests/api/check-params/config.ts | 6 ++++++ server/tests/api/server/config.ts | 16 ++++++++++++++++ 6 files changed, 59 insertions(+), 2 deletions(-) (limited to 'server') diff --git a/server/controllers/api/config.ts b/server/controllers/api/config.ts index edcb0b99e..41e5027b9 100644 --- a/server/controllers/api/config.ts +++ b/server/controllers/api/config.ts @@ -172,6 +172,13 @@ async function getConfig (req: express.Request, res: express.Response) { indexUrl: CONFIG.FOLLOWINGS.INSTANCE.AUTO_FOLLOW_INDEX.INDEX_URL } } + }, + + broadcastMessage: { + enabled: CONFIG.BROADCAST_MESSAGE.ENABLED, + message: CONFIG.BROADCAST_MESSAGE.MESSAGE, + level: CONFIG.BROADCAST_MESSAGE.LEVEL, + dismissable: CONFIG.BROADCAST_MESSAGE.DISMISSABLE } } @@ -432,6 +439,12 @@ function customConfig (): CustomConfig { indexUrl: CONFIG.FOLLOWINGS.INSTANCE.AUTO_FOLLOW_INDEX.INDEX_URL } } + }, + broadcastMessage: { + enabled: CONFIG.BROADCAST_MESSAGE.ENABLED, + message: CONFIG.BROADCAST_MESSAGE.MESSAGE, + level: CONFIG.BROADCAST_MESSAGE.LEVEL, + dismissable: CONFIG.BROADCAST_MESSAGE.DISMISSABLE } } } diff --git a/server/initializers/checker-after-init.ts b/server/initializers/checker-after-init.ts index f111be2ae..b5b854137 100644 --- a/server/initializers/checker-after-init.ts +++ b/server/initializers/checker-after-init.ts @@ -107,6 +107,10 @@ function checkConfig () { } } + if (CONFIG.STORAGE.VIDEOS_DIR === CONFIG.STORAGE.REDUNDANCY_DIR) { + logger.warn('Redundancy directory should be different than the videos folder.') + } + // Transcoding if (CONFIG.TRANSCODING.ENABLED) { if (CONFIG.TRANSCODING.WEBTORRENT.ENABLED === false && CONFIG.TRANSCODING.HLS.ENABLED === false) { @@ -114,8 +118,14 @@ function checkConfig () { } } - if (CONFIG.STORAGE.VIDEOS_DIR === CONFIG.STORAGE.REDUNDANCY_DIR) { - logger.warn('Redundancy directory should be different than the videos folder.') + // Broadcast message + if (CONFIG.BROADCAST_MESSAGE.ENABLED) { + const currentLevel = CONFIG.BROADCAST_MESSAGE.LEVEL + const available = [ 'info', 'warning', 'error' ] + + if (available.includes(currentLevel) === false) { + return 'Broadcast message level should be ' + available.join(' or ') + ' instead of ' + currentLevel + } } return null diff --git a/server/initializers/config.ts b/server/initializers/config.ts index 6932b41e1..e2920ce9e 100644 --- a/server/initializers/config.ts +++ b/server/initializers/config.ts @@ -6,6 +6,7 @@ import { buildPath, parseBytes, parseDurationToMs, root } from '../helpers/core- import { NSFWPolicyType } from '../../shared/models/videos/nsfw-policy.type' import * as bytes from 'bytes' import { VideoRedundancyConfigFilter } from '@shared/models/redundancy/video-redundancy-config-filter.type' +import { BroadcastMessageLevel } from '@shared/models/server' // Use a variable to reload the configuration if we need let config: IConfig = require('config') @@ -285,6 +286,12 @@ const CONFIG = { }, THEME: { get DEFAULT () { return config.get('theme.default') } + }, + BROADCAST_MESSAGE: { + get ENABLED () { return config.get('broadcast_message.enabled') }, + get MESSAGE () { return config.get('broadcast_message.message') }, + get LEVEL () { return config.get('broadcast_message.level') }, + get DISMISSABLE () { return config.get('broadcast_message.dismissable') } } } diff --git a/server/middlewares/validators/config.ts b/server/middlewares/validators/config.ts index dfa549e76..6905ac762 100644 --- a/server/middlewares/validators/config.ts +++ b/server/middlewares/validators/config.ts @@ -55,6 +55,11 @@ const customConfigUpdateValidator = [ body('theme.default').custom(v => isThemeNameValid(v) && isThemeRegistered(v)).withMessage('Should have a valid theme'), + body('broadcastMessage.enabled').isBoolean().withMessage('Should have a valid broadcast message enabled boolean'), + body('broadcastMessage.message').exists().withMessage('Should have a valid broadcast message'), + body('broadcastMessage.level').exists().withMessage('Should have a valid broadcast level'), + body('broadcastMessage.dismissable').exists().withMessage('Should have a valid broadcast dismissable boolean'), + (req: express.Request, res: express.Response, next: express.NextFunction) => { logger.debug('Checking customConfigUpdateValidator parameters', { parameters: req.body }) diff --git a/server/tests/api/check-params/config.ts b/server/tests/api/check-params/config.ts index f1a79806b..7c96fa762 100644 --- a/server/tests/api/check-params/config.ts +++ b/server/tests/api/check-params/config.ts @@ -133,6 +133,12 @@ describe('Test config API validators', function () { indexUrl: 'https://index.example.com' } } + }, + broadcastMessage: { + enabled: true, + dismissable: true, + message: 'super message', + level: 'warning' } } diff --git a/server/tests/api/server/config.ts b/server/tests/api/server/config.ts index 8580835d6..d18a93082 100644 --- a/server/tests/api/server/config.ts +++ b/server/tests/api/server/config.ts @@ -87,6 +87,11 @@ function checkInitialConfig (server: ServerInfo, data: CustomConfig) { expect(data.followings.instance.autoFollowBack.enabled).to.be.false expect(data.followings.instance.autoFollowIndex.enabled).to.be.false expect(data.followings.instance.autoFollowIndex.indexUrl).to.equal('') + + expect(data.broadcastMessage.enabled).to.be.false + expect(data.broadcastMessage.level).to.equal('info') + expect(data.broadcastMessage.message).to.equal('') + expect(data.broadcastMessage.dismissable).to.be.false } function checkUpdatedConfig (data: CustomConfig) { @@ -155,6 +160,11 @@ function checkUpdatedConfig (data: CustomConfig) { expect(data.followings.instance.autoFollowBack.enabled).to.be.true expect(data.followings.instance.autoFollowIndex.enabled).to.be.true expect(data.followings.instance.autoFollowIndex.indexUrl).to.equal('https://updated.example.com') + + expect(data.broadcastMessage.enabled).to.be.true + expect(data.broadcastMessage.level).to.equal('error') + expect(data.broadcastMessage.message).to.equal('super bad message') + expect(data.broadcastMessage.dismissable).to.be.true } describe('Test config', function () { @@ -324,6 +334,12 @@ describe('Test config', function () { indexUrl: 'https://updated.example.com' } } + }, + broadcastMessage: { + enabled: true, + level: 'error', + message: 'super bad message', + dismissable: true } } await updateCustomConfig(server.url, server.accessToken, newCustomConfig) -- cgit v1.2.3