]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/middlewares/validators/oembed.ts
Playlist server API
[github/Chocobozzz/PeerTube.git] / server / middlewares / validators / oembed.ts
index 4b8c03fafcacc4ca779faf051073699d9939bfc0..cd9b27b164490e7a5d5e12724e2e4e810c0e4281 100644 (file)
@@ -1,12 +1,12 @@
-import { query } from 'express-validator/check'
 import * as express from 'express'
+import { query } from 'express-validator/check'
 import { join } from 'path'
-
-import { checkErrors } from './utils'
-import { CONFIG } from '../../initializers'
-import { logger } from '../../helpers'
-import { checkVideoExists, isVideoIdOrUUIDValid } from '../../helpers/custom-validators/videos'
 import { isTestInstance } from '../../helpers/core-utils'
+import { isIdOrUUIDValid } from '../../helpers/custom-validators/misc'
+import { isVideoExist } from '../../helpers/custom-validators/videos'
+import { logger } from '../../helpers/logger'
+import { CONFIG } from '../../initializers'
+import { areValidationErrors } from './utils'
 
 const urlShouldStartWith = CONFIG.WEBSERVER.SCHEME + '://' + join(CONFIG.WEBSERVER.HOST, 'videos', 'watch') + '/'
 const videoWatchRegex = new RegExp('([^/]+)$')
@@ -26,33 +26,35 @@ const oembedValidator = [
   query('maxheight').optional().isInt().withMessage('Should have a valid max height'),
   query('format').optional().isIn([ 'xml', 'json' ]).withMessage('Should have a valid format'),
 
-  (req: express.Request, res: express.Response, next: express.NextFunction) => {
+  async (req: express.Request, res: express.Response, next: express.NextFunction) => {
     logger.debug('Checking oembed parameters', { parameters: req.query })
 
-    checkErrors(req, res, () => {
-      if (req.query.format !== undefined && req.query.format !== 'json') {
-        return res.status(501)
-                  .json({ error: 'Requested format is not implemented on server.' })
-                  .end()
-      }
-
-      const startIsOk = req.query.url.startsWith(urlShouldStartWith)
-      const matches = videoWatchRegex.exec(req.query.url)
-      if (startIsOk === false || matches === null) {
-        return res.status(400)
-                  .json({ error: 'Invalid url.' })
-                  .end()
-      }
-
-      const videoId = matches[1]
-      if (isVideoIdOrUUIDValid(videoId) === false) {
-        return res.status(400)
-                  .json({ error: 'Invalid video id.' })
-                  .end()
-      }
-
-      checkVideoExists(videoId, res, next)
-    })
+    if (areValidationErrors(req, res)) return
+
+    if (req.query.format !== undefined && req.query.format !== 'json') {
+      return res.status(501)
+                .json({ error: 'Requested format is not implemented on server.' })
+                .end()
+    }
+
+    const startIsOk = req.query.url.startsWith(urlShouldStartWith)
+    const matches = videoWatchRegex.exec(req.query.url)
+    if (startIsOk === false || matches === null) {
+      return res.status(400)
+                .json({ error: 'Invalid url.' })
+                .end()
+    }
+
+    const videoId = matches[1]
+    if (isIdOrUUIDValid(videoId) === false) {
+      return res.status(400)
+                .json({ error: 'Invalid video id.' })
+                .end()
+    }
+
+    if (!await isVideoExist(videoId, res)) return
+
+    return next()
   }
 ]