diff --git a/packages/web/src/actions.ts b/packages/web/src/actions.ts index 3edfa4c2..15d709a7 100644 --- a/packages/web/src/actions.ts +++ b/packages/web/src/actions.ts @@ -287,6 +287,15 @@ export const createInvite = async (email: string, userId: string, domain: string withOrgMembership(session, domain, async (orgId) => { console.log("Creating invite for", email, userId, orgId); + if (email === session.user.email) { + console.error("User tried to invite themselves"); + return { + statusCode: StatusCodes.BAD_REQUEST, + errorCode: ErrorCode.SELF_INVITE, + message: "❌ You can't invite yourself to an org", + } satisfies ServiceError; + } + try { await prisma.invite.create({ data: { diff --git a/packages/web/src/app/[domain]/settings/components/memberInviteForm.tsx b/packages/web/src/app/[domain]/settings/components/memberInviteForm.tsx index cb5d47ed..5cdedf91 100644 --- a/packages/web/src/app/[domain]/settings/components/memberInviteForm.tsx +++ b/packages/web/src/app/[domain]/settings/components/memberInviteForm.tsx @@ -9,6 +9,7 @@ import { useToast } from "@/components/hooks/use-toast"; import { createInvite } from "@/actions" import { isServiceError } from "@/lib/utils"; import { useDomain } from "@/hooks/useDomain"; +import { ErrorCode } from "@/lib/errorCodes"; const formSchema = z.object({ email: z.string().min(2).max(40), @@ -29,7 +30,7 @@ export const MemberInviteForm = ({ userId }: { userId: string }) => { const res = await createInvite(values.email, userId, domain); if (isServiceError(res)) { toast({ - description: `❌ Failed to create invite` + description: res.errorCode == ErrorCode.SELF_INVITE ? res.message :`❌ Failed to create invite` }); return; } else { diff --git a/packages/web/src/lib/errorCodes.ts b/packages/web/src/lib/errorCodes.ts index 6b8c6eda..f608c6d2 100644 --- a/packages/web/src/lib/errorCodes.ts +++ b/packages/web/src/lib/errorCodes.ts @@ -5,6 +5,7 @@ export enum ErrorCode { REPOSITORY_NOT_FOUND = 'REPOSITORY_NOT_FOUND', FILE_NOT_FOUND = 'FILE_NOT_FOUND', INVALID_REQUEST_BODY = 'INVALID_REQUEST_BODY', + SELF_INVITE = 'SELF_INVITE', NOT_AUTHENTICATED = 'NOT_AUTHENTICATED', NOT_FOUND = 'NOT_FOUND', CONNECTION_SYNC_ALREADY_SCHEDULED = 'CONNECTION_SYNC_ALREADY_SCHEDULED',