X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmiddlewares%2Fvalidators%2Fvideos%2Fvideo-stats.ts;h=ddbf2a564545fc9ff5d67778869cd6e3a5bd5076;hb=396f6f0140b0f76162e2378fd5a61e2f888673ed;hp=358b6b473a4e14f399aff4dc01f389a25b069437;hpb=b211106695bb82f6c32e53306081b5262c3d109d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/middlewares/validators/videos/video-stats.ts b/server/middlewares/validators/videos/video-stats.ts index 358b6b473..ddbf2a564 100644 --- a/server/middlewares/validators/videos/video-stats.ts +++ b/server/middlewares/validators/videos/video-stats.ts @@ -1,13 +1,23 @@ import express from 'express' -import { param } from 'express-validator' +import { param, query } from 'express-validator' +import { isDateValid } from '@server/helpers/custom-validators/misc' import { isValidStatTimeserieMetric } from '@server/helpers/custom-validators/video-stats' -import { HttpStatusCode, UserRight } from '@shared/models' +import { STATS_TIMESERIE } from '@server/initializers/constants' +import { HttpStatusCode, UserRight, VideoStatsTimeserieQuery } from '@shared/models' import { logger } from '../../../helpers/logger' import { areValidationErrors, checkUserCanManageVideo, doesVideoExist, isValidVideoIdParam } from '../shared' const videoOverallStatsValidator = [ isValidVideoIdParam('videoId'), + query('startDate') + .optional() + .custom(isDateValid), + + query('endDate') + .optional() + .custom(isDateValid), + async (req: express.Request, res: express.Response, next: express.NextFunction) => { logger.debug('Checking videoOverallStatsValidator parameters', { parameters: req.body }) @@ -42,8 +52,15 @@ const videoTimeserieStatsValidator = [ isValidVideoIdParam('videoId'), param('metric') - .custom(isValidStatTimeserieMetric) - .withMessage('Should have a valid timeserie metric'), + .custom(isValidStatTimeserieMetric), + + query('startDate') + .optional() + .custom(isDateValid), + + query('endDate') + .optional() + .custom(isDateValid), async (req: express.Request, res: express.Response, next: express.NextFunction) => { logger.debug('Checking videoTimeserieStatsValidator parameters', { parameters: req.body }) @@ -51,6 +68,24 @@ const videoTimeserieStatsValidator = [ if (areValidationErrors(req, res)) return if (!await commonStatsCheck(req, res)) return + const query: VideoStatsTimeserieQuery = req.query + if ( + (query.startDate && !query.endDate) || + (!query.startDate && query.endDate) + ) { + return res.fail({ + status: HttpStatusCode.BAD_REQUEST_400, + message: 'Both start date and end date should be defined if one of them is specified' + }) + } + + if (query.startDate && getIntervalByDays(query.startDate, query.endDate) > STATS_TIMESERIE.MAX_DAYS) { + return res.fail({ + status: HttpStatusCode.BAD_REQUEST_400, + message: 'Star date and end date interval is too big' + }) + } + return next() } ] @@ -71,3 +106,10 @@ async function commonStatsCheck (req: express.Request, res: express.Response) { return true } + +function getIntervalByDays (startDateString: string, endDateString: string) { + const startDate = new Date(startDateString) + const endDate = new Date(endDateString) + + return (endDate.getTime() - startDate.getTime()) / 1000 / 86400 +}