utils.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import express from 'express'
  2. import { param, validationResult } from 'express-validator'
  3. import { isIdOrUUIDValid, toCompleteUUID } from '@server/helpers/custom-validators/misc'
  4. import { logger } from '../../../helpers/logger'
  5. function areValidationErrors (
  6. req: express.Request,
  7. res: express.Response,
  8. options: {
  9. omitLog?: boolean
  10. omitBodyLog?: boolean
  11. tags?: string[]
  12. } = {}) {
  13. const { omitLog = false, omitBodyLog = false, tags = [] } = options
  14. if (!omitLog) {
  15. logger.debug(
  16. 'Checking %s - %s parameters',
  17. req.method, req.originalUrl,
  18. {
  19. body: omitBodyLog
  20. ? 'omitted'
  21. : req.body,
  22. params: req.params,
  23. query: req.query,
  24. files: req.files,
  25. tags
  26. }
  27. )
  28. }
  29. const errors = validationResult(req)
  30. if (!errors.isEmpty()) {
  31. logger.warn('Incorrect request parameters', { path: req.originalUrl, err: errors.mapped() })
  32. res.fail({
  33. message: 'Incorrect request parameters: ' + Object.keys(errors.mapped()).join(', '),
  34. instance: req.originalUrl,
  35. data: {
  36. 'invalid-params': errors.mapped()
  37. }
  38. })
  39. return true
  40. }
  41. return false
  42. }
  43. function isValidVideoIdParam (paramName: string) {
  44. return param(paramName)
  45. .customSanitizer(toCompleteUUID)
  46. .custom(isIdOrUUIDValid).withMessage('Should have a valid video id (id, short UUID or UUID)')
  47. }
  48. function isValidPlaylistIdParam (paramName: string) {
  49. return param(paramName)
  50. .customSanitizer(toCompleteUUID)
  51. .custom(isIdOrUUIDValid).withMessage('Should have a valid playlist id (id, short UUID or UUID)')
  52. }
  53. // ---------------------------------------------------------------------------
  54. export {
  55. areValidationErrors,
  56. isValidVideoIdParam,
  57. isValidPlaylistIdParam
  58. }