X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fcustom-validators%2Fvideos.ts;h=4e441fe5f9481954ab28748c17102478f458832b;hb=72c7248b6fdcdb2175e726ff51b42e7555f2bd84;hp=2eb021ae7ba4e096ee0a0fcc60c57f9275b9f6f0;hpb=b60e5f38daf77e720a27aa86d3b482c58906a03a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/custom-validators/videos.ts b/server/helpers/custom-validators/videos.ts index 2eb021ae7..4e441fe5f 100644 --- a/server/helpers/custom-validators/videos.ts +++ b/server/helpers/custom-validators/videos.ts @@ -1,5 +1,7 @@ import { values } from 'lodash' import * as validator from 'validator' +import * as Promise from 'bluebird' +import * as express from 'express' import 'express-validator' import 'multer' @@ -9,28 +11,18 @@ import { VIDEO_LICENCES, VIDEO_LANGUAGES, VIDEO_RATE_TYPES, - VIDEO_FILE_RESOLUTIONS + database as db } from '../../initializers' import { isUserUsernameValid } from './users' import { isArray, exists } from './misc' +import { VideoInstance } from '../../models' +import { logger } from '../../helpers' import { VideoRateType } from '../../../shared' const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS const VIDEO_ABUSES_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_ABUSES const VIDEO_EVENTS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_EVENTS -function isVideoIdOrUUIDValid (value: string) { - return validator.isInt(value) || isVideoUUIDValid(value) -} - -function isVideoAuthorValid (value: string) { - return isUserUsernameValid(value) -} - -function isVideoDateValid (value: string) { - return exists(value) && validator.isISO8601(value) -} - function isVideoCategoryValid (value: number) { return VIDEO_CATEGORIES[value] !== undefined } @@ -75,10 +67,6 @@ function isVideoThumbnailDataValid (value: string) { return exists(value) && validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL_DATA) } -function isVideoUUIDValid (value: string) { - return exists(value) && validator.isUUID('' + value, 4) -} - function isVideoAbuseReasonValid (value: string) { return exists(value) && validator.isLength(value, VIDEO_ABUSES_CONSTRAINTS_FIELDS.REASON) } @@ -128,7 +116,7 @@ function isVideoFileSizeValid (value: string) { } function isVideoFileResolutionValid (value: string) { - return VIDEO_FILE_RESOLUTIONS[value] !== undefined + return exists(value) && validator.isInt(value + '') } function isVideoFileExtnameValid (value: string) { @@ -139,12 +127,33 @@ function isVideoFileInfoHashValid (value: string) { return exists(value) && validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.INFO_HASH) } +function checkVideoExists (id: string, res: express.Response, callback: () => void) { + let promise: Promise + if (validator.isInt(id)) { + promise = db.Video.loadAndPopulateAuthorAndPodAndTags(+id) + } else { // UUID + promise = db.Video.loadByUUIDAndPopulateAuthorAndPodAndTags(id) + } + + promise.then(video => { + if (!video) { + return res.status(404) + .json({ error: 'Video not found' }) + .end() + } + + res.locals.video = video + callback() + }) + .catch(err => { + logger.error('Error in video request validator.', err) + return res.sendStatus(500) + }) +} + // --------------------------------------------------------------------------- export { - isVideoIdOrUUIDValid, - isVideoAuthorValid, - isVideoDateValid, isVideoCategoryValid, isVideoLicenceValid, isVideoLanguageValid, @@ -157,7 +166,6 @@ export { isVideoThumbnailValid, isVideoThumbnailDataValid, isVideoFileExtnameValid, - isVideoUUIDValid, isVideoAbuseReasonValid, isVideoAbuseReporterUsernameValid, isVideoFile, @@ -167,5 +175,6 @@ export { isVideoDislikesValid, isVideoEventCountValid, isVideoFileSizeValid, - isVideoFileResolutionValid + isVideoFileResolutionValid, + checkVideoExists }