fix: add blacklist email logic in backend (#15270)
* fix: add blacklist email logic in backedn * chore: type err * Update packages/features/bookings/lib/handleNewBooking.ts * Update packages/features/bookings/lib/handleNewBooking.ts --------- Co-authored-by: Keith Williams <keithwillcode@gmail.com>
This commit is contained in:
co-authored by
Keith Williams
parent
b905de435d
commit
3e2caa9e1e
@@ -915,6 +915,65 @@ type BookingDataSchemaGetter =
|
||||
| typeof getBookingDataSchema
|
||||
| typeof import("@calcom/features/bookings/lib/getBookingDataSchemaForApi").default;
|
||||
|
||||
const checkIfBookerEmailIsBlocked = async ({
|
||||
bookerEmail,
|
||||
loggedInUserId,
|
||||
}: {
|
||||
bookerEmail: string;
|
||||
loggedInUserId?: number;
|
||||
}) => {
|
||||
const baseEmail = extractBaseEmail(bookerEmail);
|
||||
const blacklistedGuestEmails = process.env.BLACKLISTED_GUEST_EMAILS
|
||||
? process.env.BLACKLISTED_GUEST_EMAILS.split(",")
|
||||
: [];
|
||||
|
||||
const blacklistedEmail = blacklistedGuestEmails.find(
|
||||
(guestEmail: string) => guestEmail.toLowerCase() === baseEmail.toLowerCase()
|
||||
);
|
||||
|
||||
if (!blacklistedEmail) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const user = await prisma.user.findFirst({
|
||||
where: {
|
||||
OR: [
|
||||
{
|
||||
email: baseEmail,
|
||||
emailVerified: {
|
||||
not: null,
|
||||
},
|
||||
},
|
||||
{
|
||||
secondaryEmails: {
|
||||
some: {
|
||||
email: baseEmail,
|
||||
emailVerified: {
|
||||
not: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
email: true,
|
||||
},
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
throw new HttpError({ statusCode: 403, message: "Cannot use this email to create the booking." });
|
||||
}
|
||||
|
||||
if (user.id !== loggedInUserId) {
|
||||
throw new HttpError({
|
||||
statusCode: 403,
|
||||
message: `Attendee email has been blocked. Make sure to login as ${bookerEmail} to use this email for creating a booking.`,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
async function handler(
|
||||
req: NextApiRequest & {
|
||||
userId?: number | undefined;
|
||||
@@ -977,6 +1036,8 @@ async function handler(
|
||||
|
||||
const loggerWithEventDetails = createLoggerWithEventDetails(eventTypeId, reqBody.user, eventTypeSlug);
|
||||
|
||||
await checkIfBookerEmailIsBlocked({ loggedInUserId: userId, bookerEmail });
|
||||
|
||||
if (isEventTypeLoggingEnabled({ eventTypeId, usernameOrTeamName: reqBody.user })) {
|
||||
logger.settings.minLevel = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user