import Prisma from "@prisma/client"; const prisma = new Prisma.PrismaClient(); import { log } from "../logs.js"; export class Auth { constructor() {} login = async (req, res) => { if (!req.body.password) { res.redirect("/login"); return; } else { if (req.body.password == process.env.AUTH_PASSWORD) { const session = await prisma.session.create({ data: { validUntil: new Date(Date.now() + 1000 * 60 * 60 * 24 * 14), // Expires after 14 days }, }); res.cookie("session", session.token, { httpOnly: true, expires: new Date(253402300000000), }); log("API / Auth", `New session: ${session.token}`); res.redirect("/"); } else { res.redirect("/login"); return; } } }; checkLogin = async (req, res, next) => { if (!process.env.AUTH_PASSWORD) { next(); return; } if (!req.cookies.session) { res.sendStatus(401); return; } else { const session = await prisma.session.findUnique({ where: { token: req.cookies.session, }, }); if (!session) { res.sendStatus(401); return; } // Renew session expiration date await prisma.session.update({ where: { token: session.token, }, data: { validUntil: new Date(Date.now() + 1000 * 60 * 60 * 24 * 14), }, }); } next(); }; } // Check for expired sessions every hour setInterval(async () => { const sessions = await prisma.session.findMany(); for (const session of sessions) { if (session.validUntil < new Date()) { log("API / Auth", `Removed expired session: ${session.token}`); await prisma.session.delete({ where: { token: session.token, }, }); } } }, 1000 * 60 * 60);