Skip to content

Commit

Permalink
chore(patch): inclusão de rate lmit de 600 requests a cada 30 segundos
Browse files Browse the repository at this point in the history
  • Loading branch information
PauloGoncalvesBH committed May 29, 2024
1 parent 6aed7d0 commit b2e1973
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 1 deletion.
6 changes: 6 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"morgan": "^1.10.0",
"nedb-promises": "^5.0.0",
"open": "^8.0.6",
"rate-limiter-flexible": "^5.0.3",
"swagger-ui-express": "^4.1.4",
"yargs": "^16.2.0"
},
Expand Down
2 changes: 2 additions & 0 deletions src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const errorHandler = require('./middlewares/error-handler')
const moesifMiddleware = require('./middlewares/moesif-monitor-middleware')
const { version } = require('../package.json')
const swaggerDocument = require('../docs/swagger.json')
const rateLimiter = require('./middlewares/rate-limiter')
const packageJson = require('../package.json')

const app = express()
Expand All @@ -48,6 +49,7 @@ app.use(queryParser())
app.use(timeout())
app.use(cors())
app.use(moesifMiddleware)
app.use(rateLimiter)

app.disable('etag')

Expand Down
28 changes: 28 additions & 0 deletions src/middlewares/rate-limiter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/* istanbul ignore file */

const { RateLimiterMemory } = require('rate-limiter-flexible')

const {
aplicacaoExecutandoLocalmente,
ehAmbienteDeTestes
} = require('../utils/ambiente')
const { LOAD_TEST_DETECTED } = require('../utils/constants')

const rateLimiter = new RateLimiterMemory({
points: 600, // requests
duration: 30 // segundo por IP
})

module.exports = async (req, res, next) => {
if (aplicacaoExecutandoLocalmente() || ehAmbienteDeTestes) {
return next()
}

await rateLimiter.consume(req.ip)
.then(() => next())
.catch(() => {
return res.status(429).send({
message: LOAD_TEST_DETECTED
})
})
}
3 changes: 2 additions & 1 deletion src/utils/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ module.exports = {
REPLENISHED_STOCK: 'Estoque dos produtos reabastecido',
USER_NOT_FOUND: 'Usuário não encontrado',
CART_NOT_FOUND: 'Carrinho não encontrado',
PRODUCT_NOT_FOUND: 'Produto não encontrado'
PRODUCT_NOT_FOUND: 'Produto não encontrado',
LOAD_TEST_DETECTED: 'Foi detectado comportamento equivalente a teste de carga, não execute teste de carga nesse ambiente. Leia a documentação: https://github.com/ServeRest/ServeRest#teste-de-carga'
}

0 comments on commit b2e1973

Please sign in to comment.