47 lines
No EOL
1.3 KiB
JavaScript
47 lines
No EOL
1.3 KiB
JavaScript
import express from "express";
|
|
import mustache from "mustache";
|
|
import bodyParse from "body-parser";
|
|
import cookieSession from "cookie-session";
|
|
import { readdirSync, readFileSync } from "fs";
|
|
import { randomUUID } from "crypto";
|
|
|
|
const app = express();
|
|
app.use(express.static("./static"));
|
|
app.use(bodyParse.urlencoded({ extended: true }));
|
|
app.use(bodyParse.json());
|
|
app.use(cookieSession({
|
|
name: "session",
|
|
keys: ["-JX$9fGF#S6qSzJn"],
|
|
maxAge: 31 * 24 * 60 * 60 * 1000
|
|
}));
|
|
const port = 9999;
|
|
|
|
const templates = new Map(readdirSync("./templates").map(fn => [fn, readFileSync(`./templates/${fn}`, "utf-8")]));
|
|
|
|
app.get("/", (req, res) => {
|
|
if (!req.session.isPopulated && !req.session.nonce) {
|
|
return res.redirect("/login");
|
|
}
|
|
|
|
const nonce = req.session.nonce;
|
|
res.send(mustache.render(templates.get("mainPage.html"), {nonce}));
|
|
});
|
|
|
|
app.get("/login", (req, res) => {
|
|
const nonce = randomUUID();
|
|
req.session = {
|
|
nonce
|
|
};
|
|
res.send(mustache.render(templates.get("loginPage.html"), {nonce}));
|
|
});
|
|
|
|
app.get("/authCallback", (req, res) => {
|
|
const nonce = req.session.nonce;
|
|
if (req.query.tg_passport) {
|
|
res.redirect("/");
|
|
} else {
|
|
res.send({error: true});
|
|
}
|
|
});
|
|
|
|
app.listen(port, () => console.log(`⚡️ Serving on port ${port}`)); |