video-imports.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import 'multer'
  2. import validator from 'validator'
  3. import { CONSTRAINTS_FIELDS, MIMETYPES, VIDEO_IMPORT_STATES } from '../../initializers/constants'
  4. import { exists, isFileValid } from './misc'
  5. import * as express from 'express'
  6. import { VideoImportModel } from '../../models/video/video-import'
  7. import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
  8. function isVideoImportTargetUrlValid (url: string) {
  9. const isURLOptions = {
  10. require_host: true,
  11. require_tld: true,
  12. require_protocol: true,
  13. require_valid_protocol: true,
  14. protocols: [ 'http', 'https' ]
  15. }
  16. return exists(url) &&
  17. validator.isURL('' + url, isURLOptions) &&
  18. validator.isLength('' + url, CONSTRAINTS_FIELDS.VIDEO_IMPORTS.URL)
  19. }
  20. function isVideoImportStateValid (value: any) {
  21. return exists(value) && VIDEO_IMPORT_STATES[value] !== undefined
  22. }
  23. const videoTorrentImportRegex = Object.keys(MIMETYPES.TORRENT.MIMETYPE_EXT)
  24. .concat([ 'application/octet-stream' ]) // MacOS sends application/octet-stream
  25. .map(m => `(${m})`)
  26. .join('|')
  27. function isVideoImportTorrentFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) {
  28. return isFileValid(files, videoTorrentImportRegex, 'torrentfile', CONSTRAINTS_FIELDS.VIDEO_IMPORTS.TORRENT_FILE.FILE_SIZE.max, true)
  29. }
  30. async function doesVideoImportExist (id: number, res: express.Response) {
  31. const videoImport = await VideoImportModel.loadAndPopulateVideo(id)
  32. if (!videoImport) {
  33. res.status(HttpStatusCode.NOT_FOUND_404)
  34. .json({ error: 'Video import not found' })
  35. .end()
  36. return false
  37. }
  38. res.locals.videoImport = videoImport
  39. return true
  40. }
  41. // ---------------------------------------------------------------------------
  42. export {
  43. isVideoImportStateValid,
  44. isVideoImportTargetUrlValid,
  45. doesVideoImportExist,
  46. isVideoImportTorrentFile
  47. }