Inital commit

This commit is contained in:
2022-03-06 18:36:36 +01:00
commit bedd69436b
175 changed files with 9965 additions and 0 deletions

View File

@ -0,0 +1,86 @@
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();
}
});
};

View File

@ -0,0 +1,142 @@
module.exports = function (app, con, config) {
const uuid = require("uuid");
const Eta = require("eta");
const fs = require("fs");
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) {
res.locals.valid = true;
if (
req.path.includes("/api/") ||
req.path.includes("favicon") ||
req.path.includes("/betaLogin") ||
req.path.includes("/redirectUrl") ||
req.path.includes("/beta/Invite")
) {
next();
} else {
if (config.env == "DEV") {
console.log("[beta.middleware.js]", req.path);
}
if (uuid.validate(req.signedCookies.betaToken)) {
next();
} else {
// res.cookie('betaToken', uuid.v4(), { signed: true })
const data = fs.readFileSync("templates/redr.eta.html", "utf8");
res.locals.valid = false;
res.send(
Eta.render(data, {
siteTitel: "Pointsight - BetaLogin",
redirectUrl: "/betaLogin",
})
);
}
}
});
app.post("/betaLogin", function (req, res) {
const sql = "SELECT * FROM betatokens WHERE token LIKE ? LIMIT 1";
con.query(sql, [req.body.betatoken], 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 {
if (isFutureDate(result[0].expire)) {
// Has the key expired?
res.status(200);
res.cookie("betaToken", uuid.v4(), { signed: true });
res.redirect("/");
} else {
// Yes? Then no passing!
res.status(401);
res.setHeader("Content-Type", "application/json");
res.send(
JSON.stringify({ state: "Failed", message: "Expires API key" })
);
}
}
});
console.log(req.body);
});
app.get("/beta/Invite", function (req, res) {
const myInv = req.query.invite; // Invite code
let invtee = req.query.invitee; // Used for personalized invites
if(invtee == undefined){
invtee = "Someone"; // Fallback if none is given
}
if (myInv == undefined) {
const data = fs.readFileSync("templates/redr.eta.html", "utf8");
res.locals.valid = false;
res.send(
Eta.render(data, {
siteTitel: "Pointsight",
redirectUrl: "/",
})
);
} else {
const data = fs.readFileSync("templates/beta/invitePage.eta.html", "utf8");
res.send(
Eta.render(data, {
siteTitel: "Pointsight - BetaToken - Invite",
invite: myInv,
invitee: invtee
})
);
}
});
app.get("/betaLogin", function (req, res) {
if (req.query.betaKey != undefined) {
console.log(req.query.betaKey);
const sql = "SELECT * FROM betatokens WHERE token LIKE ? LIMIT 1";
con.query(sql, [req.query.betaKey], 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 {
if (isFutureDate(result[0].expire)) {
// Has the key expired?
res.status(200);
res.cookie("betaToken", uuid.v4(), { signed: true });
res.redirect("/");
} else {
// Yes? Then no passing!
res.status(401);
res.setHeader("Content-Type", "application/json");
res.send(
JSON.stringify({ state: "Failed", message: "Expires API key" })
);
}
}
});
} else {
const data = fs.readFileSync("templates/betaLogin.eta.html", "utf8");
res.send(
Eta.render(data, {
siteTitel: "Pointsight - BetaLogin",
})
);
}
});
};

View File

@ -0,0 +1,19 @@
module.exports = function (app, jsonConfigGlobal, metaGlobals) {
const fs = require("fs");
const Eta = require("eta");
app.use(function (req, res, next) {
if(jsonConfigGlobal.maint){
const data = fs.readFileSync("templates/error/maint.eta", "utf8");
res.send(
Eta.render(data, {
desc: metaGlobals.desc,
siteTitel: metaGlobals.titlePrefx + "Maintanance work",
debug: {},
fontawesomeKey: jsonConfigGlobal.fontAwesome
})
);
}else{
next()
}
});
}