disable multiple team creation for self-hosters

This commit is contained in:
KMKoushik
2024-10-20 08:25:48 +11:00
parent 2391d1c306
commit 2db31cda35
7 changed files with 18 additions and 36 deletions

View File

@@ -18,4 +18,3 @@ NEXTAUTH_SECRET=""
API_RATE_LIMIT=2 API_RATE_LIMIT=2
NEXT_PUBLIC_IS_CLOUD=false NEXT_PUBLIC_IS_CLOUD=false
NEXT_PUBLIC_SELF_HOSTED_ALLOW_NEW_USERS=false

View File

@@ -17,6 +17,7 @@ import { Input } from "@unsend/ui/src/input";
import { Spinner } from "@unsend/ui/src/spinner"; import { Spinner } from "@unsend/ui/src/spinner";
import { api } from "~/trpc/react"; import { api } from "~/trpc/react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { toast } from "@unsend/ui/src/toaster";
const FormSchema = z.object({ const FormSchema = z.object({
name: z.string().min(2, { name: z.string().min(2, {
@@ -43,6 +44,9 @@ export default function CreateTeam() {
utils.team.invalidate(); utils.team.invalidate();
router.replace("/dashboard"); router.replace("/dashboard");
}, },
onError: (e) => {
toast.error(e.message);
},
}); });
} }

View File

@@ -1,19 +0,0 @@
"use client";
export default function TeamCreationDisabled() {
return (
<div className="flex items-center justify-center min-h-screen ">
<div className=" w-[300px] flex flex-col gap-8">
<div>
<h1 className="text-2xl font-semibold text-center">Cannot sign up</h1>
</div>
<div>
<p className="text-center">
Team creation is disabled. Please contact your administrator.
</p>
</div>
</div>
</div>
);
}

View File

@@ -66,10 +66,6 @@ export const env = createEnv({
.string() .string()
.default("false") .default("false")
.transform((str) => str === "true"), .transform((str) => str === "true"),
NEXT_PUBLIC_SELF_HOSTED_ALLOW_NEW_USERS: z
.string()
.default("false")
.transform((str) => str === "true"),
}, },
/** /**
@@ -91,8 +87,6 @@ export const env = createEnv({
AWS_DEFAULT_REGION: process.env.AWS_DEFAULT_REGION, AWS_DEFAULT_REGION: process.env.AWS_DEFAULT_REGION,
API_RATE_LIMIT: process.env.API_RATE_LIMIT, API_RATE_LIMIT: process.env.API_RATE_LIMIT,
NEXT_PUBLIC_IS_CLOUD: process.env.NEXT_PUBLIC_IS_CLOUD, NEXT_PUBLIC_IS_CLOUD: process.env.NEXT_PUBLIC_IS_CLOUD,
NEXT_PUBLIC_SELF_HOSTED_ALLOW_NEW_USERS:
process.env.NEXT_PUBLIC_SELF_HOSTED_ALLOW_NEW_USERS,
ADMIN_EMAIL: process.env.ADMIN_EMAIL, ADMIN_EMAIL: process.env.ADMIN_EMAIL,
DISCORD_WEBHOOK_URL: process.env.DISCORD_WEBHOOK_URL, DISCORD_WEBHOOK_URL: process.env.DISCORD_WEBHOOK_URL,
REDIS_URL: process.env.REDIS_URL, REDIS_URL: process.env.REDIS_URL,

View File

@@ -4,7 +4,6 @@ import { useSession } from "next-auth/react";
import { FullScreenLoading } from "~/components/FullScreenLoading"; import { FullScreenLoading } from "~/components/FullScreenLoading";
import { AddSesSettings } from "~/components/settings/AddSesSettings"; import { AddSesSettings } from "~/components/settings/AddSesSettings";
import CreateTeam from "~/components/team/CreateTeam"; import CreateTeam from "~/components/team/CreateTeam";
import TeamCreationDisabled from "~/components/team/TeamCreationDisabled";
import { env } from "~/env"; import { env } from "~/env";
import { api } from "~/trpc/react"; import { api } from "~/trpc/react";
@@ -27,14 +26,6 @@ export const DashboardProvider = ({
return <FullScreenLoading />; return <FullScreenLoading />;
} }
if (
!env.NEXT_PUBLIC_IS_CLOUD &&
!env.NEXT_PUBLIC_SELF_HOSTED_ALLOW_NEW_USERS &&
(!teams || teams.length === 0)
) {
return <TeamCreationDisabled />;
}
if ( if (
settings?.length === 0 && settings?.length === 0 &&
(!env.NEXT_PUBLIC_IS_CLOUD || session?.user.isAdmin) (!env.NEXT_PUBLIC_IS_CLOUD || session?.user.isAdmin)

View File

@@ -1,4 +1,6 @@
import { TRPCError } from "@trpc/server";
import { z } from "zod"; import { z } from "zod";
import { env } from "~/env";
import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc"; import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc";
@@ -21,6 +23,16 @@ export const teamRouter = createTRPCRouter({
return; return;
} }
if (!env.NEXT_PUBLIC_IS_CLOUD) {
const _team = await ctx.db.team.findFirst();
if (_team) {
throw new TRPCError({
message: "Can't have multiple teams in self hosted version",
code: "UNAUTHORIZED",
});
}
}
return ctx.db.team.create({ return ctx.db.team.create({
data: { data: {
name: input.name, name: input.name,

View File

@@ -37,7 +37,8 @@
"S3_COMPATIBLE_ACCESS_KEY", "S3_COMPATIBLE_ACCESS_KEY",
"S3_COMPATIBLE_SECRET_KEY", "S3_COMPATIBLE_SECRET_KEY",
"S3_COMPATIBLE_API_URL", "S3_COMPATIBLE_API_URL",
"S3_COMPATIBLE_PUBLIC_URL" "S3_COMPATIBLE_PUBLIC_URL",
"ENABLE_PRISMA_CLIENT"
] ]
}, },
"lint": { "lint": {