X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fcustom-validators%2Fvideo-comments.ts;h=8d3ce580e744d3382d81bd0d370d36c29532e765;hb=1dae95d7e2405c7b819daa24acde8ac5a754baf5;hp=2b3f6606348799e5590de04eb49357896330ea14;hpb=bf1f650817dadfd5eeee9e5e0b6b6938c136e25d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/custom-validators/video-comments.ts b/server/helpers/custom-validators/video-comments.ts index 2b3f66063..8d3ce580e 100644 --- a/server/helpers/custom-validators/video-comments.ts +++ b/server/helpers/custom-validators/video-comments.ts @@ -1,7 +1,9 @@ -import 'express-validator' -import 'multer' -import * as validator from 'validator' -import { CONSTRAINTS_FIELDS } from '../../initializers' +import * as express from 'express' +import validator from 'validator' +import { VideoCommentModel } from '@server/models/video/video-comment' +import { CONSTRAINTS_FIELDS } from '../../initializers/constants' +import { MVideoId } from '@server/types/models' +import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes' const VIDEO_COMMENTS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_COMMENTS @@ -9,8 +11,83 @@ function isValidVideoCommentText (value: string) { return value === null || validator.isLength(value, VIDEO_COMMENTS_CONSTRAINTS_FIELDS.TEXT) } +async function doesVideoCommentThreadExist (idArg: number | string, video: MVideoId, res: express.Response) { + const id = parseInt(idArg + '', 10) + const videoComment = await VideoCommentModel.loadById(id) + + if (!videoComment) { + res.status(HttpStatusCode.NOT_FOUND_404) + .json({ error: 'Video comment thread not found' }) + .end() + + return false + } + + if (videoComment.videoId !== video.id) { + res.status(HttpStatusCode.BAD_REQUEST_400) + .json({ error: 'Video comment is not associated to this video.' }) + .end() + + return false + } + + if (videoComment.inReplyToCommentId !== null) { + res.status(HttpStatusCode.BAD_REQUEST_400) + .json({ error: 'Video comment is not a thread.' }) + .end() + + return false + } + + res.locals.videoCommentThread = videoComment + return true +} + +async function doesVideoCommentExist (idArg: number | string, video: MVideoId, res: express.Response) { + const id = parseInt(idArg + '', 10) + const videoComment = await VideoCommentModel.loadByIdAndPopulateVideoAndAccountAndReply(id) + + if (!videoComment) { + res.status(HttpStatusCode.NOT_FOUND_404) + .json({ error: 'Video comment thread not found' }) + .end() + + return false + } + + if (videoComment.videoId !== video.id) { + res.status(HttpStatusCode.BAD_REQUEST_400) + .json({ error: 'Video comment is not associated to this video.' }) + .end() + + return false + } + + res.locals.videoCommentFull = videoComment + return true +} + +async function doesCommentIdExist (idArg: number | string, res: express.Response) { + const id = parseInt(idArg + '', 10) + const videoComment = await VideoCommentModel.loadByIdAndPopulateVideoAndAccountAndReply(id) + + if (!videoComment) { + res.status(HttpStatusCode.NOT_FOUND_404) + .json({ error: 'Video comment thread not found' }) + + return false + } + + res.locals.videoCommentFull = videoComment + + return true +} + // --------------------------------------------------------------------------- export { - isValidVideoCommentText + isValidVideoCommentText, + doesVideoCommentThreadExist, + doesVideoCommentExist, + doesCommentIdExist }