From 63f2f6edbace035aa03dd941d004f6c106c4f7e6 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Mon, 13 Nov 2023 13:45:46 +0000 Subject: [PATCH] fix: getTeamOrThrow ran on every request (#12337) * fix: getTeamOrThrow ran on every request This creates unnecessary strain on the DB when someone is hitting the endpoint a lot. * Add rate limit * Update packages/trpc/server/routers/viewer/teams/inviteMember/inviteMember.handler.ts --------- Co-authored-by: Sean Brydon Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com> --- .../viewer/teams/inviteMember/inviteMember.handler.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/trpc/server/routers/viewer/teams/inviteMember/inviteMember.handler.ts b/packages/trpc/server/routers/viewer/teams/inviteMember/inviteMember.handler.ts index b9d2a5c805..79d560050a 100644 --- a/packages/trpc/server/routers/viewer/teams/inviteMember/inviteMember.handler.ts +++ b/packages/trpc/server/routers/viewer/teams/inviteMember/inviteMember.handler.ts @@ -2,6 +2,7 @@ import { randomBytes } from "crypto"; import { sendTeamInviteEmail } from "@calcom/emails"; import { updateQuantitySubscriptionFromStripe } from "@calcom/features/ee/teams/lib/payments"; +import { checkRateLimitAndThrowError } from "@calcom/lib/checkRateLimitAndThrowError"; import { IS_TEAM_BILLING_ENABLED, WEBAPP_URL } from "@calcom/lib/constants"; import { getTranslation } from "@calcom/lib/server/i18n"; import { prisma } from "@calcom/prisma"; @@ -32,8 +33,9 @@ type InviteMemberOptions = { }; export const inviteMemberHandler = async ({ ctx, input }: InviteMemberOptions) => { - const team = await getTeamOrThrow(input.teamId, input.isOrg); - const { autoAcceptEmailDomain, orgVerified } = getIsOrgVerified(input.isOrg, team); + await checkRateLimitAndThrowError({ + identifier: `invitedBy:${ctx.user.id}`, + }); await checkPermissions({ userId: ctx.user.id, @@ -42,6 +44,9 @@ export const inviteMemberHandler = async ({ ctx, input }: InviteMemberOptions) = isOrg: input.isOrg, }); + const team = await getTeamOrThrow(input.teamId, input.isOrg); + const { autoAcceptEmailDomain, orgVerified } = getIsOrgVerified(input.isOrg, team); + const translation = await getTranslation(input.language ?? "en", "common"); const emailsToInvite = await getEmailsToInvite(input.usernameOrEmail);