diff --git a/deploy/saneUrl/index.js b/deploy/saneUrl/index.js index fe9c71302c361b5776206f6a14d3a4bde40311d3..9f732525722a4f7d21c8475748f1db3874230ce4 100644 --- a/deploy/saneUrl/index.js +++ b/deploy/saneUrl/index.js @@ -4,7 +4,7 @@ const { GitlabSnippetStore: Store, NotFoundError } = require('./store') const { Store: DepcStore } = require('./depcObjStore') const RateLimit = require('express-rate-limit') const RedisStore = require('rate-limit-redis') -const { redisURL } = require('../lruStore') +const lruStore = require('../lruStore') const { ProxyStore, NotExactlyPromiseAny } = require('./util') let store @@ -23,12 +23,22 @@ const { DISABLE_LIMITER, } = process.env -const limiter = new RateLimit({ - windowMs: 1e3 * 5, - max: 5, - ...( redisURL ? { store: new RedisStore({ redisURL }) } : {} ) -}) -const passthrough = (_, __, next) => next() +function limiterMiddleware(){ + let limiter + return async (req, res, next) => { + if (DISABLE_LIMITER) return next() + if (limiter) return limiter(req, res, next) + await lruStore._initPr + const { redisURL } = lruStore + limiter = new RateLimit({ + windowMs: 1e3 * 5, + max: 5, + store: redisURL ? new RedisStore({ redisURL }) : null + }) + return limiter(req, res, next) + } +} + const acceptHtmlProg = /text\/html/i @@ -85,7 +95,7 @@ router.get('/:name', async (req, res) => { }) router.post('/:name', - DISABLE_LIMITER ? passthrough : limiter, + limiterMiddleware(), express.json(), async (req, res) => { if (req.headers['x-noop']) return res.status(200).end() diff --git a/docs/releases/v2.6.5.md b/docs/releases/v2.6.5.md index 22e5eb683fbb4909a53b298a42f1fc6469af0655..0026d7165ff104c7f0a47389cf9b61a2a867c43d 100644 --- a/docs/releases/v2.6.5.md +++ b/docs/releases/v2.6.5.md @@ -5,3 +5,7 @@ - Re-enabled autoradiographs for receptor datasets - Added how-to-cite as a part of quick tour (#1085) - Added VIP routes + +## Bugfix + +- saneUrl store now properly uses redis