1
0
Fork 0
mirror of https://git.sr.ht/~roxwize/mipilin synced 2025-05-10 23:33:07 +00:00

uhhh yeah

Signed-off-by: roxwize <rae@roxwize.xyz>
This commit is contained in:
Rae 5e 2024-12-25 18:44:29 -05:00
parent 5abe0b5fad
commit afc634b0d2
Signed by: rae
GPG key ID: 5B1A0FAB9BAB81EE
43 changed files with 573 additions and 3792 deletions

View file

@ -1,13 +1,18 @@
import { NodePgDatabase } from "drizzle-orm/node-postgres";
import { Express } from "express";
import { createInviteCode, render } from "./util.js";
import { createInviteCode, render, UserStatus } from "./util.js";
import { inviteCodes, users } from "../db/schema.js";
import { desc, eq } from "drizzle-orm";
import { and, count, desc, eq, sql } from "drizzle-orm";
import dayjs from "dayjs";
const USER_REFERRAL_EXPIRATION = 7 * 24 * 60 * 60 * 1000
export default function (app: Express, db: NodePgDatabase) {
app.get("/mod", async (req, res) => {
if (!req.session["loggedIn"] || !req.session["moderator"]) {
if (
!req.session["loggedIn"] ||
!(req.session["status"] & UserStatus.MODERATOR)
) {
res.redirect("/");
return;
}
@ -15,7 +20,11 @@ export default function (app: Express, db: NodePgDatabase) {
const now = dayjs();
const codes = (
await db
.select({ expires: inviteCodes.expires, token: inviteCodes.token, uname: users.name })
.select({
expires: inviteCodes.expires,
token: inviteCodes.token,
uname: users.name
})
.from(inviteCodes)
.leftJoin(users, eq(inviteCodes.user, users.id))
.orderBy(desc(inviteCodes.granted))
@ -30,8 +39,11 @@ export default function (app: Express, db: NodePgDatabase) {
render(db, "admin", "Admin Panel", res, req, { codes });
});
app.post("/mod/codes/delete", async (req, res) => {
if (!req.session["loggedIn"] || !req.session["moderator"]) {
app.post("/codes/delete", async (req, res) => {
if (
!req.session["loggedIn"] ||
!(req.session["status"] & UserStatus.MODERATOR)
) {
res.redirect("/");
return;
}
@ -39,10 +51,38 @@ export default function (app: Express, db: NodePgDatabase) {
await db.delete(inviteCodes).where(eq(inviteCodes.token, req.body.token));
req.flash("success", "Deleted.");
res.redirect("/mod");
})
app.post("/mod/codes/create", async (req, res) => {
if (!req.session["loggedIn"] || !req.session["moderator"]) {
res.redirect("/");
});
app.post("/codes/create", async (req, res) => {
if (
!req.session["loggedIn"]
) {
res.redirect("/login");
return;
}
if (!(req.session["status"] & UserStatus.MODERATOR)) {
const { codesUsed } = (
await db
.select({ codesUsed: count() })
.from(inviteCodes)
.where(
and(
eq(inviteCodes.user, req.session["uid"]),
eq(
sql`extract(month from granted)`,
sql`extract(month from current_date)`
)
)
)
)[0];
if (codesUsed >= 5) {
req.flash("error", "You've generated the maximum of five codes this week. Your counter will reset next month.");
res.redirect("/dashboard");
return;
}
const code = await createInviteCode(db, req.session["uid"], new Date(Date.now() + USER_REFERRAL_EXPIRATION));
req.flash("success", `Your code has been created as <b>${code}</b>. It expires in a week so use it ASAP!!!`);
res.redirect("/dashboard");
return;
}