aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/middlewares/validators/videos/video-playlists.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/middlewares/validators/videos/video-playlists.ts')
-rw-r--r--server/middlewares/validators/videos/video-playlists.ts41
1 files changed, 24 insertions, 17 deletions
diff --git a/server/middlewares/validators/videos/video-playlists.ts b/server/middlewares/validators/videos/video-playlists.ts
index 0d2e6e90c..5ee7ee0ce 100644
--- a/server/middlewares/validators/videos/video-playlists.ts
+++ b/server/middlewares/validators/videos/video-playlists.ts
@@ -11,6 +11,7 @@ import {
11 isIdOrUUIDValid, 11 isIdOrUUIDValid,
12 isIdValid, 12 isIdValid,
13 isUUIDValid, 13 isUUIDValid,
14 toCompleteUUID,
14 toIntArray, 15 toIntArray,
15 toIntOrNull, 16 toIntOrNull,
16 toValueOrNull 17 toValueOrNull
@@ -29,7 +30,14 @@ import { CONSTRAINTS_FIELDS } from '../../../initializers/constants'
29import { VideoPlaylistElementModel } from '../../../models/video/video-playlist-element' 30import { VideoPlaylistElementModel } from '../../../models/video/video-playlist-element'
30import { MVideoPlaylist } from '../../../types/models/video/video-playlist' 31import { MVideoPlaylist } from '../../../types/models/video/video-playlist'
31import { authenticatePromiseIfNeeded } from '../../auth' 32import { authenticatePromiseIfNeeded } from '../../auth'
32import { areValidationErrors, doesVideoChannelIdExist, doesVideoExist, doesVideoPlaylistExist, VideoPlaylistFetchType } from '../shared' 33import {
34 areValidationErrors,
35 doesVideoChannelIdExist,
36 doesVideoExist,
37 doesVideoPlaylistExist,
38 isValidPlaylistIdParam,
39 VideoPlaylistFetchType
40} from '../shared'
33 41
34const videoPlaylistsAddValidator = getCommonPlaylistEditAttributes().concat([ 42const videoPlaylistsAddValidator = getCommonPlaylistEditAttributes().concat([
35 body('displayName') 43 body('displayName')
@@ -43,10 +51,13 @@ const videoPlaylistsAddValidator = getCommonPlaylistEditAttributes().concat([
43 const body: VideoPlaylistCreate = req.body 51 const body: VideoPlaylistCreate = req.body
44 if (body.videoChannelId && !await doesVideoChannelIdExist(body.videoChannelId, res)) return cleanUpReqFiles(req) 52 if (body.videoChannelId && !await doesVideoChannelIdExist(body.videoChannelId, res)) return cleanUpReqFiles(req)
45 53
46 if (body.privacy === VideoPlaylistPrivacy.PUBLIC && !body.videoChannelId) { 54 if (
55 !body.videoChannelId &&
56 (body.privacy === VideoPlaylistPrivacy.PUBLIC || body.privacy === VideoPlaylistPrivacy.UNLISTED)
57 ) {
47 cleanUpReqFiles(req) 58 cleanUpReqFiles(req)
48 59
49 return res.fail({ message: 'Cannot set "public" a playlist that is not assigned to a channel.' }) 60 return res.fail({ message: 'Cannot set "public" or "unlisted" a playlist that is not assigned to a channel.' })
50 } 61 }
51 62
52 return next() 63 return next()
@@ -54,8 +65,7 @@ const videoPlaylistsAddValidator = getCommonPlaylistEditAttributes().concat([
54]) 65])
55 66
56const videoPlaylistsUpdateValidator = getCommonPlaylistEditAttributes().concat([ 67const videoPlaylistsUpdateValidator = getCommonPlaylistEditAttributes().concat([
57 param('playlistId') 68 isValidPlaylistIdParam('playlistId'),
58 .custom(isIdOrUUIDValid).withMessage('Should have a valid playlist id/uuid'),
59 69
60 body('displayName') 70 body('displayName')
61 .optional() 71 .optional()
@@ -101,8 +111,7 @@ const videoPlaylistsUpdateValidator = getCommonPlaylistEditAttributes().concat([
101]) 111])
102 112
103const videoPlaylistsDeleteValidator = [ 113const videoPlaylistsDeleteValidator = [
104 param('playlistId') 114 isValidPlaylistIdParam('playlistId'),
105 .custom(isIdOrUUIDValid).withMessage('Should have a valid playlist id/uuid'),
106 115
107 async (req: express.Request, res: express.Response, next: express.NextFunction) => { 116 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
108 logger.debug('Checking videoPlaylistsDeleteValidator parameters', { parameters: req.params }) 117 logger.debug('Checking videoPlaylistsDeleteValidator parameters', { parameters: req.params })
@@ -126,8 +135,7 @@ const videoPlaylistsDeleteValidator = [
126 135
127const videoPlaylistsGetValidator = (fetchType: VideoPlaylistFetchType) => { 136const videoPlaylistsGetValidator = (fetchType: VideoPlaylistFetchType) => {
128 return [ 137 return [
129 param('playlistId') 138 isValidPlaylistIdParam('playlistId'),
130 .custom(isIdOrUUIDValid).withMessage('Should have a valid playlist id/uuid'),
131 139
132 async (req: express.Request, res: express.Response, next: express.NextFunction) => { 140 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
133 logger.debug('Checking videoPlaylistsGetValidator parameters', { parameters: req.params }) 141 logger.debug('Checking videoPlaylistsGetValidator parameters', { parameters: req.params })
@@ -184,9 +192,10 @@ const videoPlaylistsSearchValidator = [
184] 192]
185 193
186const videoPlaylistsAddVideoValidator = [ 194const videoPlaylistsAddVideoValidator = [
187 param('playlistId') 195 isValidPlaylistIdParam('playlistId'),
188 .custom(isIdOrUUIDValid).withMessage('Should have a valid playlist id/uuid'), 196
189 body('videoId') 197 body('videoId')
198 .customSanitizer(toCompleteUUID)
190 .custom(isIdOrUUIDValid).withMessage('Should have a valid video id/uuid'), 199 .custom(isIdOrUUIDValid).withMessage('Should have a valid video id/uuid'),
191 body('startTimestamp') 200 body('startTimestamp')
192 .optional() 201 .optional()
@@ -214,9 +223,9 @@ const videoPlaylistsAddVideoValidator = [
214] 223]
215 224
216const videoPlaylistsUpdateOrRemoveVideoValidator = [ 225const videoPlaylistsUpdateOrRemoveVideoValidator = [
217 param('playlistId') 226 isValidPlaylistIdParam('playlistId'),
218 .custom(isIdOrUUIDValid).withMessage('Should have a valid playlist id/uuid'),
219 param('playlistElementId') 227 param('playlistElementId')
228 .customSanitizer(toCompleteUUID)
220 .custom(isIdValid).withMessage('Should have an element id/uuid'), 229 .custom(isIdValid).withMessage('Should have an element id/uuid'),
221 body('startTimestamp') 230 body('startTimestamp')
222 .optional() 231 .optional()
@@ -251,8 +260,7 @@ const videoPlaylistsUpdateOrRemoveVideoValidator = [
251] 260]
252 261
253const videoPlaylistElementAPGetValidator = [ 262const videoPlaylistElementAPGetValidator = [
254 param('playlistId') 263 isValidPlaylistIdParam('playlistId'),
255 .custom(isIdOrUUIDValid).withMessage('Should have a valid playlist id/uuid'),
256 param('playlistElementId') 264 param('playlistElementId')
257 .custom(isIdValid).withMessage('Should have an playlist element id'), 265 .custom(isIdValid).withMessage('Should have an playlist element id'),
258 266
@@ -287,8 +295,7 @@ const videoPlaylistElementAPGetValidator = [
287] 295]
288 296
289const videoPlaylistsReorderVideosValidator = [ 297const videoPlaylistsReorderVideosValidator = [
290 param('playlistId') 298 isValidPlaylistIdParam('playlistId'),
291 .custom(isIdOrUUIDValid).withMessage('Should have a valid playlist id/uuid'),
292 body('startPosition') 299 body('startPosition')
293 .isInt({ min: 1 }).withMessage('Should have a valid start position'), 300 .isInt({ min: 1 }).withMessage('Should have a valid start position'),
294 body('insertAfterPosition') 301 body('insertAfterPosition')