Merge branch 'release/beta-10' into develop
[oweals/peertube.git] / server / helpers / custom-validators / video-imports.ts
1 import 'express-validator'
2 import 'multer'
3 import * as validator from 'validator'
4 import { CONSTRAINTS_FIELDS, VIDEO_IMPORT_STATES } from '../../initializers'
5 import { exists } from './misc'
6 import * as express from 'express'
7 import { VideoChannelModel } from '../../models/video/video-channel'
8 import { VideoImportModel } from '../../models/video/video-import'
9
10 function isVideoImportTargetUrlValid (url: string) {
11   const isURLOptions = {
12     require_host: true,
13     require_tld: true,
14     require_protocol: true,
15     require_valid_protocol: true,
16     protocols: [ 'http', 'https' ]
17   }
18
19   return exists(url) &&
20     validator.isURL('' + url, isURLOptions) &&
21     validator.isLength('' + url, CONSTRAINTS_FIELDS.VIDEO_IMPORTS.URL)
22 }
23
24 function isVideoImportStateValid (value: any) {
25   return exists(value) && VIDEO_IMPORT_STATES[ value ] !== undefined
26 }
27
28 async function isVideoImportExist (id: number, res: express.Response) {
29   const videoImport = await VideoImportModel.loadAndPopulateVideo(id)
30
31   if (!videoImport) {
32     res.status(404)
33        .json({ error: 'Video import not found' })
34        .end()
35
36     return false
37   }
38
39   res.locals.videoImport = videoImport
40   return true
41 }
42
43 // ---------------------------------------------------------------------------
44
45 export {
46   isVideoImportStateValid,
47   isVideoImportTargetUrlValid,
48   isVideoImportExist
49 }