Browse Source

refactor middleware

yuken 3 years ago
parent
commit
9a3a04f034

+ 4 - 4
packages/app/src/server/middlewares/api-rate-limiter.ts

@@ -23,15 +23,15 @@ const consumePoints = async(rateLimiter: RateLimiterMemory, key: string, points:
     });
 };
 
-module.exports = (rateLimiter: RateLimiterMemory, defaultPoints: number, envVarDic: {[key: string]: string}) => {
+module.exports = (rateLimiter: RateLimiterMemory, defaultPoints: number, envVarDicForApiRateLimiter: {[key: string]: string}) => {
 
   return async(req: Request, res: Response, next: NextFunction) => {
 
     const endpoint = req.path;
     const key = req.ip + req.url;
 
-    const matchedEndpointKeys = apiRateEndpointKeys.filter((key) => {
-      return envVarDic[key] === endpoint;
+    const matchedEndpointKeys = Object.keys(envVarDicForApiRateLimiter).filter((key) => {
+      return envVarDicForApiRateLimiter[key] === endpoint;
     });
 
     if (matchedEndpointKeys.length === 0) {
@@ -39,7 +39,7 @@ module.exports = (rateLimiter: RateLimiterMemory, defaultPoints: number, envVarD
       return;
     }
 
-    const customizedConsumePoints = getCustomApiRateLimit(matchedEndpointKeys, req.method, envVarDic);
+    const customizedConsumePoints = getCustomApiRateLimit(matchedEndpointKeys, req.method, envVarDicForApiRateLimiter);
 
     await consumePoints(rateLimiter, key, customizedConsumePoints ?? defaultPoints, next);
     return;

+ 1 - 1
packages/app/src/server/routes/index.js

@@ -29,7 +29,7 @@ const opts = {
 };
 const rateLimiter = new RateLimiterMemory(opts);
 
-// generate EnvVarDic For
+// generate EnvVarDic for api rate limiter
 const envVarDicForApiRateLimiter = generateEnvVarDicForApiRateLimiter();
 
 autoReap.options.reapOnError = true; // continue reaping the file even if an error occurs

+ 5 - 2
packages/app/src/server/util/generateEnvVarDicForApiRateLimiter.ts

@@ -7,9 +7,12 @@ const generateEnvVarDicForApiRateLimiter = (): {[key: string]: string} => {
     return endpointRegExp.test(key);
   });
 
-  let apiRateEndpointDic;
+  const apiRateEndpointDic: {[key: string]: string} = {};
   apiRateEndpointKeys.forEach((key) => {
-    apiRateEndpointDic[key] = envVarDic[key];
+    const value = envVarDic[key];
+    if (value != null) {
+      apiRateEndpointDic[key] = value;
+    }
   });
 
   // default setting e.g. healthchack