diff options
Diffstat (limited to 'server/middlewares/validators/videos/videos.ts')
-rw-r--r-- | server/middlewares/validators/videos/videos.ts | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/server/middlewares/validators/videos/videos.ts b/server/middlewares/validators/videos/videos.ts index 794e1d4f1..7f1f39b11 100644 --- a/server/middlewares/validators/videos/videos.ts +++ b/server/middlewares/validators/videos/videos.ts | |||
@@ -23,6 +23,7 @@ import { isBooleanBothQueryValid, isNumberArray, isStringArray } from '../../../ | |||
23 | import { | 23 | import { |
24 | areVideoTagsValid, | 24 | areVideoTagsValid, |
25 | isScheduleVideoUpdatePrivacyValid, | 25 | isScheduleVideoUpdatePrivacyValid, |
26 | isValidPasswordProtectedPrivacy, | ||
26 | isVideoCategoryValid, | 27 | isVideoCategoryValid, |
27 | isVideoDescriptionValid, | 28 | isVideoDescriptionValid, |
28 | isVideoFileMimeTypeValid, | 29 | isVideoFileMimeTypeValid, |
@@ -55,7 +56,8 @@ import { | |||
55 | doesVideoChannelOfAccountExist, | 56 | doesVideoChannelOfAccountExist, |
56 | doesVideoExist, | 57 | doesVideoExist, |
57 | doesVideoFileOfVideoExist, | 58 | doesVideoFileOfVideoExist, |
58 | isValidVideoIdParam | 59 | isValidVideoIdParam, |
60 | isValidVideoPasswordHeader | ||
59 | } from '../shared' | 61 | } from '../shared' |
60 | 62 | ||
61 | const videosAddLegacyValidator = getCommonVideoEditAttributes().concat([ | 63 | const videosAddLegacyValidator = getCommonVideoEditAttributes().concat([ |
@@ -70,6 +72,10 @@ const videosAddLegacyValidator = getCommonVideoEditAttributes().concat([ | |||
70 | body('channelId') | 72 | body('channelId') |
71 | .customSanitizer(toIntOrNull) | 73 | .customSanitizer(toIntOrNull) |
72 | .custom(isIdValid), | 74 | .custom(isIdValid), |
75 | body('videoPasswords') | ||
76 | .optional() | ||
77 | .isArray() | ||
78 | .withMessage('Video passwords should be an array.'), | ||
73 | 79 | ||
74 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { | 80 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { |
75 | if (areValidationErrors(req, res)) return cleanUpReqFiles(req) | 81 | if (areValidationErrors(req, res)) return cleanUpReqFiles(req) |
@@ -81,6 +87,8 @@ const videosAddLegacyValidator = getCommonVideoEditAttributes().concat([ | |||
81 | return cleanUpReqFiles(req) | 87 | return cleanUpReqFiles(req) |
82 | } | 88 | } |
83 | 89 | ||
90 | if (!isValidPasswordProtectedPrivacy(req, res)) return cleanUpReqFiles(req) | ||
91 | |||
84 | try { | 92 | try { |
85 | if (!videoFile.duration) await addDurationToVideo(videoFile) | 93 | if (!videoFile.duration) await addDurationToVideo(videoFile) |
86 | } catch (err) { | 94 | } catch (err) { |
@@ -174,6 +182,10 @@ const videosAddResumableInitValidator = getCommonVideoEditAttributes().concat([ | |||
174 | body('channelId') | 182 | body('channelId') |
175 | .customSanitizer(toIntOrNull) | 183 | .customSanitizer(toIntOrNull) |
176 | .custom(isIdValid), | 184 | .custom(isIdValid), |
185 | body('videoPasswords') | ||
186 | .optional() | ||
187 | .isArray() | ||
188 | .withMessage('Video passwords should be an array.'), | ||
177 | 189 | ||
178 | header('x-upload-content-length') | 190 | header('x-upload-content-length') |
179 | .isNumeric() | 191 | .isNumeric() |
@@ -205,6 +217,8 @@ const videosAddResumableInitValidator = getCommonVideoEditAttributes().concat([ | |||
205 | const files = { videofile: [ videoFileMetadata ] } | 217 | const files = { videofile: [ videoFileMetadata ] } |
206 | if (!await commonVideoChecksPass({ req, res, user, videoFileSize: videoFileMetadata.size, files })) return cleanup() | 218 | if (!await commonVideoChecksPass({ req, res, user, videoFileSize: videoFileMetadata.size, files })) return cleanup() |
207 | 219 | ||
220 | if (!isValidPasswordProtectedPrivacy(req, res)) return cleanup() | ||
221 | |||
208 | // multer required unsetting the Content-Type, now we can set it for node-uploadx | 222 | // multer required unsetting the Content-Type, now we can set it for node-uploadx |
209 | req.headers['content-type'] = 'application/json; charset=utf-8' | 223 | req.headers['content-type'] = 'application/json; charset=utf-8' |
210 | // place previewfile in metadata so that uploadx saves it in .META | 224 | // place previewfile in metadata so that uploadx saves it in .META |
@@ -227,12 +241,18 @@ const videosUpdateValidator = getCommonVideoEditAttributes().concat([ | |||
227 | .optional() | 241 | .optional() |
228 | .customSanitizer(toIntOrNull) | 242 | .customSanitizer(toIntOrNull) |
229 | .custom(isIdValid), | 243 | .custom(isIdValid), |
244 | body('videoPasswords') | ||
245 | .optional() | ||
246 | .isArray() | ||
247 | .withMessage('Video passwords should be an array.'), | ||
230 | 248 | ||
231 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { | 249 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { |
232 | if (areValidationErrors(req, res)) return cleanUpReqFiles(req) | 250 | if (areValidationErrors(req, res)) return cleanUpReqFiles(req) |
233 | if (areErrorsInScheduleUpdate(req, res)) return cleanUpReqFiles(req) | 251 | if (areErrorsInScheduleUpdate(req, res)) return cleanUpReqFiles(req) |
234 | if (!await doesVideoExist(req.params.id, res)) return cleanUpReqFiles(req) | 252 | if (!await doesVideoExist(req.params.id, res)) return cleanUpReqFiles(req) |
235 | 253 | ||
254 | if (!isValidPasswordProtectedPrivacy(req, res)) return cleanUpReqFiles(req) | ||
255 | |||
236 | const video = getVideoWithAttributes(res) | 256 | const video = getVideoWithAttributes(res) |
237 | if (video.isLive && video.privacy !== req.body.privacy && video.state !== VideoState.WAITING_FOR_LIVE) { | 257 | if (video.isLive && video.privacy !== req.body.privacy && video.state !== VideoState.WAITING_FOR_LIVE) { |
238 | return res.fail({ message: 'Cannot update privacy of a live that has already started' }) | 258 | return res.fail({ message: 'Cannot update privacy of a live that has already started' }) |
@@ -281,6 +301,8 @@ const videosCustomGetValidator = (fetchType: 'for-api' | 'all' | 'only-video' | | |||
281 | return [ | 301 | return [ |
282 | isValidVideoIdParam('id'), | 302 | isValidVideoIdParam('id'), |
283 | 303 | ||
304 | isValidVideoPasswordHeader(), | ||
305 | |||
284 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { | 306 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { |
285 | if (areValidationErrors(req, res)) return | 307 | if (areValidationErrors(req, res)) return |
286 | if (!await doesVideoExist(req.params.id, res, fetchType)) return | 308 | if (!await doesVideoExist(req.params.id, res, fetchType)) return |