@@ -2,6 +2,7 @@ if (process.env.NODE_ENV !== "production") {
22 require ( "dotenv" ) . config ( ) ;
33}
44const express = require ( "express" ) ;
5+ const rateLimit = require ( "express-rate-limit" ) ;
56const expressLayouts = require ( "express-ejs-layouts" ) ;
67const bodyParser = require ( "body-parser" ) ;
78
@@ -20,6 +21,17 @@ db.once("open", () => {
2021
2122const app = express ( ) ;
2223
24+ const limiter = rateLimit ( {
25+ max : process . env . RATE_LIMIT || 50 ,
26+ windowMs : process . env . RATE_LIMIT_WINDOW || 10 * 1000 ,
27+ message : "Too many requests, please try again later." ,
28+ } ) ;
29+ app . enable ( "trust proxy" ) ;
30+ app . use ( limiter ) ;
31+
32+ // body limit
33+ app . use ( express . json ( { limit : "10kb" } ) ) ;
34+
2335// background
2436if ( process . env . BACKGROUND == true ) {
2537 const { bullBoardServerAdapter } = require ( "./background" ) ;
@@ -43,6 +55,15 @@ if (process.env.WEB == true) {
4355
4456// api
4557if ( ! process . env . API_DISABLED ) {
58+ const apiLimiter = rateLimit ( {
59+ max : process . env . API_RATE_LIMIT || 20 ,
60+ windowMs : process . env . API_RATE_LIMIT_WINDOW || 10 * 1000 ,
61+ message : "Too many requests, please try again later." ,
62+ // keyGenerator: function (req) {
63+ // return req.ip;
64+ // },
65+ } ) ;
66+ app . use ( "/api/" , apiLimiter ) ;
4667 const apiRoutes = require ( "./routes/api" ) ;
4768 app . use ( "/api/v1/" , apiRoutes ) ;
4869 console . info ( "API is up." ) ;
0 commit comments