From 0b09b6eb3d361639aa6caf35ff3ba798206f37a5 Mon Sep 17 00:00:00 2001 From: creations Date: Wed, 19 Mar 2025 18:44:21 -0400 Subject: [PATCH] add register require invite --- src/routes/auth/register.ts | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/routes/auth/register.ts b/src/routes/auth/register.ts index 072f127..36f7325 100644 --- a/src/routes/auth/register.ts +++ b/src/routes/auth/register.ts @@ -1,5 +1,8 @@ import { getSetting } from "@config/sql/settings"; import { renderEjsTemplate } from "@helpers/ejs"; +import { type ReservedSQL, sql } from "bun"; + +import { logger } from "@/helpers/logger"; const routeDef: RouteDef = { method: "GET", @@ -10,15 +13,30 @@ const routeDef: RouteDef = { async function handler(request: ExtendedRequest): Promise { if (request.session) return Response.redirect("/"); - const instanceName: string = - (await getSetting("instance_name")) || "Unnamed Instance"; + const reservation: ReservedSQL = await sql.reserve(); + try { + const [firstUser] = await sql`SELECT COUNT(*) FROM users`; - const ejsTemplateData: EjsTemplateData = { - title: `Register - ${instanceName}`, - instance_name: instanceName, - }; + const instanceName: string = + (await getSetting("instance_name", reservation)) || + "Unnamed Instance"; + const requiresInvite: boolean = + (await getSetting("enable_invitations", reservation)) === "true" && + firstUser.count !== "0"; - return await renderEjsTemplate("auth/register", ejsTemplateData); + const ejsTemplateData: EjsTemplateData = { + title: `Register - ${instanceName}`, + instance_name: instanceName, + requires_invite: requiresInvite, + }; + + return await renderEjsTemplate("auth/register", ejsTemplateData); + } catch (error) { + logger.error(["Error rendering register page", error as Error]); + return Response.redirect("/"); + } finally { + reservation.release(); + } } export { handler, routeDef };