Skip to content
Snippets Groups Projects
Commit 905ee349 authored by lordjbs's avatar lordjbs
Browse files

wew, its 1.2alpha now

parent b850abb0
No related branches found
No related tags found
No related merge requests found
{
"port":3001,
"db": "tdb.db",
"devLog":true
"db": "test/tdb.db",
"devLog":true,
"requestThroughProxy": false,
"ratelimit": {
"enabled":true,
"requests":5,
"interval":10000
}
}
......@@ -17,6 +17,7 @@ const bodyParser = require("body-parser");
const config = require("./conf.json");
const database = require("./db/db.js");
const startup = require("./lib/ascii.js");
const ratelimit = require("./lib/ratelimit.js");
const app = express();
......@@ -26,10 +27,16 @@ if(config.devLog) {
app.use(logger("default"));
}
app.use(express.static(path.join(__dirname, "public")));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(function(req,res,next) {
console.log("req!!");
ratelimit.request(req,res,next);
});
app.use("/", require("./routes/index.js"));
app.use("/shorten", require("./routes/shorten.js"));
app.use("/jquery.min.js", require("./routes/handlerroute.js"));
......@@ -51,6 +58,7 @@ app.use(function(err, req, res, next) {
const port = process.env.PORT || config.port || 8080;
app.listen(port, function () {
ratelimit.start();
startup(port, database);
});
......
/**
* Ratelimites. Greetings go to ratelimited.me!
*/
var ips = {};
const conf = require("../conf.json");
const util = require("./util.js");
const modules = {
request: function(req, res, next) {
if(!conf.ratelimit.enabled) {
next();
}
var ip;
if(!conf.requestThroughProxy) {
ip = req.connection.remoteAddress;
} else {
ip = request.headers['x-forwarded-for'];
}
if(!ips[ip]) {
ips[ip] = 1;
} else {
ips[ip] += 1;
}
if(ips[ip] > conf.ratelimit.requests) {
console.log("WARNING! " + ip + " is sending more requests than allowed. Requests send in interval \"" + conf.ratelimit.interval + "\": " + ips[ip]);
res.status(429);
return res.send({error:429, message:"You have been ratelimited."});
} else {
next();
}
},
start: function() {
setInterval(function() {
ips = {};
}, conf.ratelimit.interval);
}
}
module.exports = modules;
module.exports = {
isEmpty: function(obj) {
return !Object.keys(obj).length;
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment