From c48e82b5e0478434de30626d14594a97f2402e7c Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 11 Sep 2018 16:27:07 +0200 Subject: Basic video redundancy implementation --- server/middlewares/validators/redundancy.ts | 80 +++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 server/middlewares/validators/redundancy.ts (limited to 'server/middlewares') diff --git a/server/middlewares/validators/redundancy.ts b/server/middlewares/validators/redundancy.ts new file mode 100644 index 000000000..d91b47574 --- /dev/null +++ b/server/middlewares/validators/redundancy.ts @@ -0,0 +1,80 @@ +import * as express from 'express' +import 'express-validator' +import { param, body } from 'express-validator/check' +import { exists, isBooleanValid, isIdOrUUIDValid, toIntOrNull } from '../../helpers/custom-validators/misc' +import { isVideoExist } from '../../helpers/custom-validators/videos' +import { logger } from '../../helpers/logger' +import { areValidationErrors } from './utils' +import { VideoModel } from '../../models/video/video' +import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy' +import { isHostValid } from '../../helpers/custom-validators/servers' +import { getServerActor } from '../../helpers/utils' +import { ActorFollowModel } from '../../models/activitypub/actor-follow' +import { SERVER_ACTOR_NAME } from '../../initializers' +import { ServerModel } from '../../models/server/server' + +const videoRedundancyGetValidator = [ + param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid video id'), + param('resolution') + .customSanitizer(toIntOrNull) + .custom(exists).withMessage('Should have a valid resolution'), + param('fps') + .optional() + .customSanitizer(toIntOrNull) + .custom(exists).withMessage('Should have a valid fps'), + + async (req: express.Request, res: express.Response, next: express.NextFunction) => { + logger.debug('Checking videoRedundancyGetValidator parameters', { parameters: req.params }) + + if (areValidationErrors(req, res)) return + if (!await isVideoExist(req.params.videoId, res)) return + + const video: VideoModel = res.locals.video + const videoFile = video.VideoFiles.find(f => { + return f.resolution === req.params.resolution && (!req.params.fps || f.fps === req.params.fps) + }) + + if (!videoFile) return res.status(404).json({ error: 'Video file not found.' }) + res.locals.videoFile = videoFile + + const videoRedundancy = await VideoRedundancyModel.loadByFileId(videoFile.id) + if (!videoRedundancy)return res.status(404).json({ error: 'Video redundancy not found.' }) + res.locals.videoRedundancy = videoRedundancy + + return next() + } +] + +const updateServerRedundancyValidator = [ + param('host').custom(isHostValid).withMessage('Should have a valid host'), + body('redundancyAllowed') + .toBoolean() + .custom(isBooleanValid).withMessage('Should have a valid redundancyAllowed attribute'), + + async (req: express.Request, res: express.Response, next: express.NextFunction) => { + logger.debug('Checking updateServerRedundancy parameters', { parameters: req.params }) + + if (areValidationErrors(req, res)) return + + const server = await ServerModel.loadByHost(req.params.host) + + if (!server) { + return res + .status(404) + .json({ + error: `Server ${req.params.host} not found.` + }) + .end() + } + + res.locals.server = server + return next() + } +] + +// --------------------------------------------------------------------------- + +export { + videoRedundancyGetValidator, + updateServerRedundancyValidator +} -- cgit v1.2.3