Browse Source

fix(server/video-view): log invalid currentTime req (#6288)

* fix(server/video-view): log invalid currentTime req

relates to #6285

* Styling

---------

Co-authored-by: Chocobozzz <me@florianbigard.com>
kontrollanten 1 month ago
parent
commit
26de1467e2

+ 4 - 4
server/core/middlewares/error.ts

@@ -1,11 +1,11 @@
+import { HttpStatusCode } from '@peertube/peertube-models'
+import { logger } from '@server/helpers/logger.js'
 import express from 'express'
 import { ProblemDocument, ProblemDocumentExtension } from 'http-problem-details'
-import { logger } from '@server/helpers/logger.js'
-import { HttpStatusCode } from '@peertube/peertube-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, tags } = options
+    const { status = HttpStatusCode.BAD_REQUEST_400, message, title, type, data, instance, tags, logLevel = 'debug' } = options
 
     const extension = new ProblemDocumentExtension({
       ...data,
@@ -29,7 +29,7 @@ function apiFailMiddleware (req: express.Request, res: express.Response, next: e
         : undefined
     }, extension)
 
-    logger.debug('Bad HTTP request.', { json, tags })
+    logger.log(logLevel, 'Bad HTTP request.', { json, tags })
 
     res.status(status)
 

+ 8 - 6
server/core/middlewares/validators/videos/video-view.ts

@@ -1,9 +1,9 @@
-import express from 'express'
-import { body, param } from 'express-validator'
 import { HttpStatusCode } from '@peertube/peertube-models'
 import { isVideoTimeValid } from '@server/helpers/custom-validators/video-view.js'
 import { getCachedVideoDuration } from '@server/lib/video.js'
 import { LocalVideoViewerModel } from '@server/models/view/local-video-viewer.js'
+import express from 'express'
+import { body, param } from 'express-validator'
 import { isIdValid, toIntOrNull } from '../../../helpers/custom-validators/misc.js'
 import { areValidationErrors, doesVideoExist, isValidVideoIdParam } from '../shared/index.js'
 
@@ -42,10 +42,12 @@ const videoViewValidator = [
     const video = res.locals.onlyImmutableVideo
     const { duration } = await getCachedVideoDuration(video.id)
 
-    if (!isVideoTimeValid(req.body.currentTime, duration)) {
+    const currentTime = req.body.currentTime
+    if (!isVideoTimeValid(currentTime, duration)) {
       return res.fail({
         status: HttpStatusCode.BAD_REQUEST_400,
-        message: 'Current time is invalid'
+        message: `Current time ${currentTime} is invalid (video ${video.uuid} duration: ${duration})`,
+        logLevel: 'warn'
       })
     }
 
@@ -56,6 +58,6 @@ const videoViewValidator = [
 // ---------------------------------------------------------------------------
 
 export {
-  videoViewValidator,
-  getVideoLocalViewerValidator
+  getVideoLocalViewerValidator, videoViewValidator
 }
+

+ 2 - 1
server/core/types/express.d.ts

@@ -1,4 +1,4 @@
-import { HttpMethodType, PeerTubeProblemDocumentData, VideoCreate } from '@peertube/peertube-models'
+import { HttpMethodType, PeerTubeProblemDocumentData, ServerLogLevel, VideoCreate } from '@peertube/peertube-models'
 import { RegisterServerAuthExternalOptions } from '@server/types/index.js'
 import {
   MAbuseMessage,
@@ -109,6 +109,7 @@ declare module 'express' {
 
       data?: PeerTubeProblemDocumentData
 
+      logLevel?: ServerLogLevel // Default debug
       tags?: string[]
     }) => void