From 2db31cda35c4343d7abb692b8d3453c732379647 Mon Sep 17 00:00:00 2001 From: KMKoushik Date: Sun, 20 Oct 2024 08:25:48 +1100 Subject: [PATCH] disable multiple team creation for self-hosters --- .env.example | 1 - apps/web/src/components/team/CreateTeam.tsx | 4 ++++ .../components/team/TeamCreationDisabled.tsx | 19 ------------------- apps/web/src/env.js | 6 ------ apps/web/src/providers/dashboard-provider.tsx | 9 --------- apps/web/src/server/api/routers/team.ts | 12 ++++++++++++ turbo.json | 3 ++- 7 files changed, 18 insertions(+), 36 deletions(-) delete mode 100644 apps/web/src/components/team/TeamCreationDisabled.tsx diff --git a/.env.example b/.env.example index 351a5f7..3b9f12d 100644 --- a/.env.example +++ b/.env.example @@ -18,4 +18,3 @@ NEXTAUTH_SECRET="" API_RATE_LIMIT=2 NEXT_PUBLIC_IS_CLOUD=false -NEXT_PUBLIC_SELF_HOSTED_ALLOW_NEW_USERS=false \ No newline at end of file diff --git a/apps/web/src/components/team/CreateTeam.tsx b/apps/web/src/components/team/CreateTeam.tsx index 504a894..f28942c 100644 --- a/apps/web/src/components/team/CreateTeam.tsx +++ b/apps/web/src/components/team/CreateTeam.tsx @@ -17,6 +17,7 @@ import { Input } from "@unsend/ui/src/input"; import { Spinner } from "@unsend/ui/src/spinner"; import { api } from "~/trpc/react"; import { useRouter } from "next/navigation"; +import { toast } from "@unsend/ui/src/toaster"; const FormSchema = z.object({ name: z.string().min(2, { @@ -43,6 +44,9 @@ export default function CreateTeam() { utils.team.invalidate(); router.replace("/dashboard"); }, + onError: (e) => { + toast.error(e.message); + }, }); } diff --git a/apps/web/src/components/team/TeamCreationDisabled.tsx b/apps/web/src/components/team/TeamCreationDisabled.tsx deleted file mode 100644 index a61d821..0000000 --- a/apps/web/src/components/team/TeamCreationDisabled.tsx +++ /dev/null @@ -1,19 +0,0 @@ -"use client"; - -export default function TeamCreationDisabled() { - - return ( -
-
-
-

Cannot sign up

-
-
-

- Team creation is disabled. Please contact your administrator. -

-
-
-
- ); -} diff --git a/apps/web/src/env.js b/apps/web/src/env.js index 59fd4b8..116538a 100644 --- a/apps/web/src/env.js +++ b/apps/web/src/env.js @@ -66,10 +66,6 @@ export const env = createEnv({ .string() .default("false") .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, API_RATE_LIMIT: process.env.API_RATE_LIMIT, 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, DISCORD_WEBHOOK_URL: process.env.DISCORD_WEBHOOK_URL, REDIS_URL: process.env.REDIS_URL, diff --git a/apps/web/src/providers/dashboard-provider.tsx b/apps/web/src/providers/dashboard-provider.tsx index 933fb70..00f93cd 100644 --- a/apps/web/src/providers/dashboard-provider.tsx +++ b/apps/web/src/providers/dashboard-provider.tsx @@ -4,7 +4,6 @@ import { useSession } from "next-auth/react"; import { FullScreenLoading } from "~/components/FullScreenLoading"; import { AddSesSettings } from "~/components/settings/AddSesSettings"; import CreateTeam from "~/components/team/CreateTeam"; -import TeamCreationDisabled from "~/components/team/TeamCreationDisabled"; import { env } from "~/env"; import { api } from "~/trpc/react"; @@ -27,14 +26,6 @@ export const DashboardProvider = ({ return ; } - if ( - !env.NEXT_PUBLIC_IS_CLOUD && - !env.NEXT_PUBLIC_SELF_HOSTED_ALLOW_NEW_USERS && - (!teams || teams.length === 0) - ) { - return ; - } - if ( settings?.length === 0 && (!env.NEXT_PUBLIC_IS_CLOUD || session?.user.isAdmin) diff --git a/apps/web/src/server/api/routers/team.ts b/apps/web/src/server/api/routers/team.ts index 3c35e78..afcf4c6 100644 --- a/apps/web/src/server/api/routers/team.ts +++ b/apps/web/src/server/api/routers/team.ts @@ -1,4 +1,6 @@ +import { TRPCError } from "@trpc/server"; import { z } from "zod"; +import { env } from "~/env"; import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc"; @@ -21,6 +23,16 @@ export const teamRouter = createTRPCRouter({ 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({ data: { name: input.name, diff --git a/turbo.json b/turbo.json index 6cdea22..0b9bccf 100644 --- a/turbo.json +++ b/turbo.json @@ -37,7 +37,8 @@ "S3_COMPATIBLE_ACCESS_KEY", "S3_COMPATIBLE_SECRET_KEY", "S3_COMPATIBLE_API_URL", - "S3_COMPATIBLE_PUBLIC_URL" + "S3_COMPATIBLE_PUBLIC_URL", + "ENABLE_PRISMA_CLIENT" ] }, "lint": {