+ body('services.twitter.username').exists(),
+ body('services.twitter.whitelisted').isBoolean(),
+
+ body('cache.previews.size').isInt(),
+ body('cache.captions.size').isInt(),
+ body('cache.torrents.size').isInt(),
+
+ body('signup.enabled').isBoolean(),
+ body('signup.limit').isInt(),
+ body('signup.requiresEmailVerification').isBoolean(),
+ body('signup.minimumAge').isInt(),
+
+ body('admin.email').isEmail(),
+ body('contactForm.enabled').isBoolean(),
+
+ body('user.videoQuota').custom(isUserVideoQuotaValid),
+ body('user.videoQuotaDaily').custom(isUserVideoQuotaDailyValid),
+
+ body('videoChannels.maxPerUser').isInt(),
+
+ body('transcoding.enabled').isBoolean(),
+ body('transcoding.allowAdditionalExtensions').isBoolean(),
+ body('transcoding.threads').isInt(),
+ body('transcoding.concurrency').isInt({ min: 1 }),
+ body('transcoding.resolutions.0p').isBoolean(),
+ body('transcoding.resolutions.144p').isBoolean(),
+ body('transcoding.resolutions.240p').isBoolean(),
+ body('transcoding.resolutions.360p').isBoolean(),
+ body('transcoding.resolutions.480p').isBoolean(),
+ body('transcoding.resolutions.720p').isBoolean(),
+ body('transcoding.resolutions.1080p').isBoolean(),
+ body('transcoding.resolutions.1440p').isBoolean(),
+ body('transcoding.resolutions.2160p').isBoolean(),
+
+ body('transcoding.alwaysTranscodeOriginalResolution').isBoolean(),
+
+ body('transcoding.webtorrent.enabled').isBoolean(),
+ body('transcoding.hls.enabled').isBoolean(),
+
+ body('videoStudio.enabled').isBoolean(),
+
+ body('import.videos.concurrency').isInt({ min: 0 }),
+ body('import.videos.http.enabled').isBoolean(),
+ body('import.videos.torrent.enabled').isBoolean(),
+
+ body('import.videoChannelSynchronization.enabled').isBoolean(),
+
+ body('trending.videos.algorithms.default').exists(),
+ body('trending.videos.algorithms.enabled').exists(),
+
+ body('followers.instance.enabled').isBoolean(),
+ body('followers.instance.manualApproval').isBoolean(),
+
+ body('theme.default').custom(v => isThemeNameValid(v) && isThemeRegistered(v)),
+
+ body('broadcastMessage.enabled').isBoolean(),
+ body('broadcastMessage.message').exists(),
+ body('broadcastMessage.level').exists(),
+ body('broadcastMessage.dismissable').isBoolean(),
+
+ body('live.enabled').isBoolean(),
+ body('live.allowReplay').isBoolean(),
+ body('live.maxDuration').isInt(),
+ body('live.maxInstanceLives').custom(isIntOrNull),
+ body('live.maxUserLives').custom(isIntOrNull),
+ body('live.transcoding.enabled').isBoolean(),
+ body('live.transcoding.threads').isInt(),
+ body('live.transcoding.resolutions.144p').isBoolean(),
+ body('live.transcoding.resolutions.240p').isBoolean(),
+ body('live.transcoding.resolutions.360p').isBoolean(),
+ body('live.transcoding.resolutions.480p').isBoolean(),
+ body('live.transcoding.resolutions.720p').isBoolean(),
+ body('live.transcoding.resolutions.1080p').isBoolean(),
+ body('live.transcoding.resolutions.1440p').isBoolean(),
+ body('live.transcoding.resolutions.2160p').isBoolean(),
+ body('live.transcoding.alwaysTranscodeOriginalResolution').isBoolean(),
+
+ body('search.remoteUri.users').isBoolean(),
+ body('search.remoteUri.anonymous').isBoolean(),
+ body('search.searchIndex.enabled').isBoolean(),
+ body('search.searchIndex.url').exists(),
+ body('search.searchIndex.disableLocalSearch').isBoolean(),
+ body('search.searchIndex.isDefaultSearch').isBoolean(),
+
+ (req: express.Request, res: express.Response, next: express.NextFunction) => {