Преглед изворни кода

add validation for express :content_id parameter

Brian Gough пре 5 година
родитељ
комит
ff2175e727

+ 21 - 0
services/clsi/app.js

@@ -29,6 +29,7 @@ Metrics.memory.monitor(logger)
 
 
 const ProjectPersistenceManager = require('./app/js/ProjectPersistenceManager')
 const ProjectPersistenceManager = require('./app/js/ProjectPersistenceManager')
 const OutputCacheManager = require('./app/js/OutputCacheManager')
 const OutputCacheManager = require('./app/js/OutputCacheManager')
+const ContentCacheManager = require('./app/js/ContentCacheManager')
 
 
 require('./app/js/db').sync()
 require('./app/js/db').sync()
 
 
@@ -76,6 +77,26 @@ app.param('build_id', function (req, res, next, buildId) {
   }
   }
 })
 })
 
 
+app.param('contentId', function (req, res, next, contentId) {
+  if (
+    contentId != null
+      ? contentId.match(OutputCacheManager.CONTENT_REGEX)
+      : undefined
+  ) {
+    return next()
+  } else {
+    return next(new Error(`invalid content id ${contentId}`))
+  }
+})
+
+app.param('hash', function (req, res, next, hash) {
+  if (hash != null ? hash.match(ContentCacheManager.HASH_REGEX) : undefined) {
+    return next()
+  } else {
+    return next(new Error(`invalid hash ${hash}`))
+  }
+})
+
 app.post(
 app.post(
   '/project/:project_id/compile',
   '/project/:project_id/compile',
   bodyParser.json({ limit: Settings.compileSizeLimit }),
   bodyParser.json({ limit: Settings.compileSizeLimit }),

+ 4 - 1
services/clsi/app/js/ContentCacheManager.js

@@ -115,4 +115,7 @@ async function writePdfStream(dir, hash, buffers) {
   return true
   return true
 }
 }
 
 
-module.exports = { update: callbackify(update) }
+module.exports = {
+  HASH_REGEX: /^[0-9a-f]{64}$/,
+  update: callbackify(update)
+}

+ 1 - 0
services/clsi/app/js/OutputCacheManager.js

@@ -34,6 +34,7 @@ module.exports = OutputCacheManager = {
   // build id is HEXDATE-HEXRANDOM from Date.now()and RandomBytes
   // build id is HEXDATE-HEXRANDOM from Date.now()and RandomBytes
   // for backwards compatibility, make the randombytes part optional
   // for backwards compatibility, make the randombytes part optional
   BUILD_REGEX: /^[0-9a-f]+(-[0-9a-f]+)?$/,
   BUILD_REGEX: /^[0-9a-f]+(-[0-9a-f]+)?$/,
+  CONTENT_REGEX: /^[0-9a-f]+(-[0-9a-f]+)?$/,
   CACHE_LIMIT: 2, // maximum number of cache directories
   CACHE_LIMIT: 2, // maximum number of cache directories
   CACHE_AGE: 60 * 60 * 1000, // up to one hour old
   CACHE_AGE: 60 * 60 * 1000, // up to one hour old