aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/middlewares/validators/videos/video-files.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/middlewares/validators/videos/video-files.ts')
-rw-r--r--server/middlewares/validators/videos/video-files.ts104
1 files changed, 104 insertions, 0 deletions
diff --git a/server/middlewares/validators/videos/video-files.ts b/server/middlewares/validators/videos/video-files.ts
new file mode 100644
index 000000000..282594ab6
--- /dev/null
+++ b/server/middlewares/validators/videos/video-files.ts
@@ -0,0 +1,104 @@
1import express from 'express'
2import { MUser, MVideo } from '@server/types/models'
3import { HttpStatusCode, UserRight } from '../../../../shared'
4import { logger } from '../../../helpers/logger'
5import { areValidationErrors, doesVideoExist, isValidVideoIdParam } from '../shared'
6
7const videoFilesDeleteWebTorrentValidator = [
8 isValidVideoIdParam('id'),
9
10 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
11 logger.debug('Checking videoFilesDeleteWebTorrent parameters', { parameters: req.params })
12
13 if (areValidationErrors(req, res)) return
14 if (!await doesVideoExist(req.params.id, res)) return
15
16 const video = res.locals.videoAll
17 const user = res.locals.oauth.token.User
18
19 if (!checkUserCanDeleteFiles(user, res)) return
20 if (!checkLocalVideo(video, res)) return
21
22 if (!video.hasWebTorrentFiles()) {
23 return res.fail({
24 status: HttpStatusCode.BAD_REQUEST_400,
25 message: 'This video does not have WebTorrent files'
26 })
27 }
28
29 if (!video.getHLSPlaylist()) {
30 return res.fail({
31 status: HttpStatusCode.BAD_REQUEST_400,
32 message: 'Cannot delete WebTorrent files since this video does not have HLS playlist'
33 })
34 }
35
36 return next()
37 }
38]
39
40const videoFilesDeleteHLSValidator = [
41 isValidVideoIdParam('id'),
42
43 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
44 logger.debug('Checking videoFilesDeleteHLS parameters', { parameters: req.params })
45
46 if (areValidationErrors(req, res)) return
47 if (!await doesVideoExist(req.params.id, res)) return
48
49 const video = res.locals.videoAll
50 const user = res.locals.oauth.token.User
51
52 if (!checkUserCanDeleteFiles(user, res)) return
53 if (!checkLocalVideo(video, res)) return
54
55 if (!video.getHLSPlaylist()) {
56 return res.fail({
57 status: HttpStatusCode.BAD_REQUEST_400,
58 message: 'This video does not have HLS files'
59 })
60 }
61
62 if (!video.hasWebTorrentFiles()) {
63 return res.fail({
64 status: HttpStatusCode.BAD_REQUEST_400,
65 message: 'Cannot delete HLS playlist since this video does not have WebTorrent files'
66 })
67 }
68
69 return next()
70 }
71]
72
73export {
74 videoFilesDeleteWebTorrentValidator,
75 videoFilesDeleteHLSValidator
76}
77
78// ---------------------------------------------------------------------------
79
80function checkLocalVideo (video: MVideo, res: express.Response) {
81 if (video.remote) {
82 res.fail({
83 status: HttpStatusCode.BAD_REQUEST_400,
84 message: 'Cannot delete files of remote video'
85 })
86
87 return false
88 }
89
90 return true
91}
92
93function checkUserCanDeleteFiles (user: MUser, res: express.Response) {
94 if (user.hasRight(UserRight.MANAGE_VIDEO_FILES) !== true) {
95 res.fail({
96 status: HttpStatusCode.FORBIDDEN_403,
97 message: 'User cannot update video files'
98 })
99
100 return false
101 }
102
103 return true
104}