]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/middlewares/error.ts
Prevent object storage mock conflicts
[github/Chocobozzz/PeerTube.git] / server / middlewares / error.ts
index e3eb1c8f54b8bc94d5943e692d9f9cfb503f980d..94762e35542bb779b6487d5d91f71d51151a6a2d 100644 (file)
@@ -1,10 +1,11 @@
-import * as express from 'express'
+import express from 'express'
 import { ProblemDocument, ProblemDocumentExtension } from 'http-problem-details'
-import { HttpStatusCode } from '@shared/core-utils'
+import { logger } from '@server/helpers/logger'
+import { HttpStatusCode } from '@shared/models'
 
 function apiFailMiddleware (req: express.Request, res: express.Response, next: express.NextFunction) {
   res.fail = options => {
-    const { status = HttpStatusCode.BAD_REQUEST_400, message, title, type, data, instance } = options
+    const { status = HttpStatusCode.BAD_REQUEST_400, message, title, type, data, instance, tags } = options
 
     const extension = new ProblemDocumentExtension({
       ...data,
@@ -17,8 +18,12 @@ function apiFailMiddleware (req: express.Request, res: express.Response, next: e
     })
 
     res.status(status)
-    res.setHeader('Content-Type', 'application/problem+json')
-    res.json(new ProblemDocument({
+
+    if (!res.headersSent) {
+      res.setHeader('Content-Type', 'application/problem+json')
+    }
+
+    const json = new ProblemDocument({
       status,
       title,
       instance,
@@ -28,12 +33,31 @@ function apiFailMiddleware (req: express.Request, res: express.Response, next: e
       type: type
         ? `https://docs.joinpeertube.org/api-rest-reference.html#section/Errors/${type}`
         : undefined
-    }, extension))
+    }, extension)
+
+    logger.debug('Bad HTTP request.', { json, tags })
+
+    res.json(json)
   }
 
   if (next) next()
 }
 
+function handleStaticError (err: any, req: express.Request, res: express.Response, next: express.NextFunction) {
+  const message = err.message || ''
+
+  if (message.includes('ENOENT')) {
+    return res.fail({
+      status: err.status || HttpStatusCode.INTERNAL_SERVER_ERROR_500,
+      message: err.message,
+      type: err.name
+    })
+  }
+
+  return next(err)
+}
+
 export {
-  apiFailMiddleware
+  apiFailMiddleware,
+  handleStaticError
 }