]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/middlewares/validators/videos/video-stats.ts
Improve viewer counter
[github/Chocobozzz/PeerTube.git] / server / middlewares / validators / videos / video-stats.ts
CommitLineData
b2111066
C
1import express from 'express'
2import { param } from 'express-validator'
3import { isValidStatTimeserieMetric } from '@server/helpers/custom-validators/video-stats'
4import { HttpStatusCode, UserRight } from '@shared/models'
5import { logger } from '../../../helpers/logger'
6import { areValidationErrors, checkUserCanManageVideo, doesVideoExist, isValidVideoIdParam } from '../shared'
7
8const videoOverallStatsValidator = [
9 isValidVideoIdParam('videoId'),
10
11 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
12 logger.debug('Checking videoOverallStatsValidator parameters', { parameters: req.body })
13
14 if (areValidationErrors(req, res)) return
15 if (!await commonStatsCheck(req, res)) return
16
17 return next()
18 }
19]
20
21const videoRetentionStatsValidator = [
22 isValidVideoIdParam('videoId'),
23
24 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
25 logger.debug('Checking videoRetentionStatsValidator parameters', { parameters: req.body })
26
27 if (areValidationErrors(req, res)) return
28 if (!await commonStatsCheck(req, res)) return
29
30 if (res.locals.videoAll.isLive) {
31 return res.fail({
32 status: HttpStatusCode.BAD_REQUEST_400,
33 message: 'Cannot get retention stats of live video'
34 })
35 }
36
37 return next()
38 }
39]
40
41const videoTimeserieStatsValidator = [
42 isValidVideoIdParam('videoId'),
43
44 param('metric')
45 .custom(isValidStatTimeserieMetric)
46 .withMessage('Should have a valid timeserie metric'),
47
48 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
49 logger.debug('Checking videoTimeserieStatsValidator parameters', { parameters: req.body })
50
51 if (areValidationErrors(req, res)) return
52 if (!await commonStatsCheck(req, res)) return
53
54 return next()
55 }
56]
57
58// ---------------------------------------------------------------------------
59
60export {
61 videoOverallStatsValidator,
62 videoTimeserieStatsValidator,
63 videoRetentionStatsValidator
64}
65
66// ---------------------------------------------------------------------------
67
68async function commonStatsCheck (req: express.Request, res: express.Response) {
69 if (!await doesVideoExist(req.params.videoId, res, 'all')) return false
70 if (!checkUserCanManageVideo(res.locals.oauth.token.User, res.locals.videoAll, UserRight.SEE_ALL_VIDEOS, res)) return false
71
72 return true
73}