Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
surelle-ha committed Jun 15, 2024
2 parents afb984b + 41982df commit 6de3abb
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 875 deletions.
34 changes: 22 additions & 12 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
/* _____________________________________
ZENTINEL JS
_____________________________________
*/
require('module-alias/register')

/* Import Server Modules */
const express = require("express");
const serveIndex = require('serve-index');

/* Import Configurations */
const { connectDB: sql_setup, sequelize } = require("./config/sql.js");
const { connectDB: nosql_setup } = require("./config/nosql.js");
const { RateLimit } = require("./config/ratelimiter.js");
const { cors, cors_options } = require("./config/cors");
const { helmet } = require("./config/helmet");
const { loggerPino } = require("./config/logger");
const { connectDB: sql_setup, sequelize } = require("@config/sql.js");
const { connectDB: nosql_setup } = require("@config/nosql.js");
const { RateLimit } = require("@config/ratelimiter.js");
const { cors, cors_options } = require("@config/cors");
const { helmet } = require("@config/helmet");
const { loggerPino } = require("@config/logger");

/* Setup Express Application */
const app = express();
Expand All @@ -30,12 +37,15 @@ app.use("/", express.static("public"));
app.use('/storage', express.static('storage'), serveIndex('storage', {'icons': true }));
app.use('/orm-builder', express.static('storage/sequelize-ui'));

app.config = {};
app.config.RateLimit = RateLimit;

/* Routes: Web, API */
require("./app/utilities/__i.js")(app);
require("./app/services/__i.js")(app);
require("./app/models/__i.js")(app, sequelize);
require("./app/middlewares/__i.js")(app);
require("./app/controllers/__i.js")(app);
require("./app/routes/__i.js")(app);
require("@app/utilities/__i.js")(app);
require("@app/services/__i.js")(app);
require("@app/models/__i.js")(app, sequelize);
require("@app/middlewares/__i.js")(app);
require("@app/controllers/__i.js")(app);
require("@app/routes/__i.js")(app);

module.exports = app;
14 changes: 14 additions & 0 deletions app/controllers/Webhook.Controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module.exports = function (app) {
var Controller = {
name: "Webhook",
};

// Reset Rate Limit
// @/webhook/ratelimit/reset
Controller.ratelimit_reset = async (req, res) => {
app.config.RateLimit.resetKey(req.ip);
res.json({ message: 'Rate limit is reset!' });
}

return Controller;
};
4 changes: 4 additions & 0 deletions app/routes/v1/Webhook.Route.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = function (app) {
var WebhookController = app.controllers.Webhook;
app.post("/webhook/ratelimit/reset", [], WebhookController.ratelimit_reset);
};
39 changes: 34 additions & 5 deletions config/ratelimiter.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,46 @@
const rateLimit = require('express-rate-limit');

/* Rate Limit Reset in minutes */
const windowM = 15;

const exemptedEndpoints = [
'/webhook/ratelimit/reset'
];

const RateLimit = rateLimit({
/* Exempt endpoint from Rate Limiter */
skip: (req) => exemptedEndpoints.includes(req.url),

/* 15 minutes */
windowMs: 15 * 60 * 1000,
windowMs: windowM * 60 * 1000,

/* Request Limit Per IP Per Window */
limit: 10000,
limit: 10,

/* draft-6: `RateLimit-*` headers; draft-7: combined `RateLimit` header */
standardHeaders: 'draft-7',
standardHeaders: 'draft-7',

/* Disable the `X-RateLimit-*` headers */
legacyHeaders: false,
legacyHeaders: false,

/* 429 status = Too Many Requests (RFC 6585) */
statusCode: 429,

/* Send custom rate limit header with limit and remaining */
headers: true,

/* Do not count failed requests (status >= 400) */
skipFailedRequests: false,

/* Do not count successful requests (status < 400) */
skipSuccessfulRequests: false,

message: {
status: 429,
message: 'Too many requests, please try again later.'
},

onLimitReached: function (/*req, res, optionsUsed*/) { }
})

module.exports = { RateLimit };
module.exports = { RateLimit };
8 changes: 7 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,5 +67,11 @@
"mocha": "^10.4.0",
"sequelize-cli": "^6.6.2",
"supertest": "^7.0.0"
},
"_moduleAliases": {
"@": ".",
"@root": ".",
"@app": "./app",
"@config": "./config"
}
}
}
Loading

0 comments on commit 6de3abb

Please sign in to comment.