87 lines
3.1 KiB
JavaScript
87 lines
3.1 KiB
JavaScript
module.exports = function (app, con, apiTaxonomyCache) {
|
|
const _ = require("underscore");
|
|
function isFutureDate(value) {
|
|
const d_now = new Date();
|
|
const d_inp = new Date(value);
|
|
return d_now.getTime() <= d_inp.getTime();
|
|
}
|
|
app.use(function (req, res, next) {
|
|
// API key handling middleware
|
|
if (req.path.includes("/api/")) {
|
|
if (req.query.key != undefined) {
|
|
const sql = "SELECT * FROM apikeys WHERE apikey LIKE ? LIMIT 1";
|
|
con.query(sql, [req.query.key], function (err, result) {
|
|
if (err) {
|
|
throw err;
|
|
}
|
|
if (result.length == 0) {
|
|
// There is atleast one result
|
|
res.status(401);
|
|
res.setHeader("Content-Type", "application/json");
|
|
res.send(
|
|
JSON.stringify({ state: "Failed", message: "Invalid API key" })
|
|
);
|
|
} else {
|
|
// console.log(req.headers);
|
|
if (
|
|
JSON.parse(result[0].hosts).includes(req.hostname) ||
|
|
JSON.parse(result[0].hosts).includes("*")
|
|
) {
|
|
// Is the key even allowed for this host?
|
|
if (isFutureDate(result[0].expire)) { // Has the key expired?
|
|
next(); // Allow it to pass
|
|
if(!_.isFinite(apiTaxonomyCache[req.query.key])){
|
|
apiTaxonomyCache[req.query.key] = 0;
|
|
}
|
|
apiTaxonomyCache[req.query.key] = apiTaxonomyCache[req.query.key]+1;
|
|
// console.log(apiTaxonomyCache)
|
|
/*const updateSql = "UPDATE apitaxonomy SET calls = calls+1 WHERE apikey LIKE ? AND DATE(date) = CURDATE()";
|
|
const insertSql = "INSERT INTO apitaxonomy (apikey, calls) VALUES(?, ?);"
|
|
con.query(updateSql, [req.query.key], function (err, result) {
|
|
if (err) {
|
|
console.error(err);
|
|
}
|
|
if(result.affectedRows == 0) {
|
|
con.query(insertSql, [req.query.key, 1], function (err, result) {
|
|
if (err) {
|
|
console.error(err);
|
|
}
|
|
});
|
|
}
|
|
});*/
|
|
} else {
|
|
// Yes? Then no passing!
|
|
res.status(401);
|
|
res.setHeader("Content-Type", "application/json");
|
|
res.send(
|
|
JSON.stringify({
|
|
state: "Failed",
|
|
message: "Expired API key",
|
|
})
|
|
);
|
|
}
|
|
} else {
|
|
res.status(401);
|
|
res.setHeader("Content-Type", "application/json");
|
|
res.send(
|
|
JSON.stringify({
|
|
state: "Failed",
|
|
message: "Invalid Hostname for API key",
|
|
})
|
|
);
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
res.status(401);
|
|
res.setHeader("Content-Type", "application/json");
|
|
res.send(
|
|
JSON.stringify({ state: "Failed", message: "Missing API key" })
|
|
);
|
|
}
|
|
} else {
|
|
next();
|
|
}
|
|
});
|
|
};
|