* --init * -- * replace old structure with new DI * fix type * -- * moving stuff around * moving stuff around again * minor clean up * -- * resolve conflict * clea up * old schema clean up * further clean up * removing unwanted merged responsibilities * -- * improve DI and SOLID * some type fixes * --1 * clean up --cont * fix DI in facade for test * more fix * fix * checking * o.o * fix import * fix failing test --2 * fix failing test --3 * fix failing test --4 * normalization use * introduce facade container injection * uniform async telemetry spans * further improvements * replace prismock with repo mocks * ensure we don't pass prisma outside of repo * fix import * remove try catch from repo calls * async await fixes * using deps pattern * more clean up and fixes * more clean up * address feedback --1 * separation of concern * clean up * test clean up * feedback --2 * remove extra fetch * remove await * migrate _post test from prismock * fix type * -- * fix tokens path * rename AuditRepo * test --1 * update _post to integration test * fix test * fix test * test fix maybe? * -- * feedback * feedback * fixes * more feedback * NIT * use sentry and logger imports as planned * assertion in test * add missing test case * add tests for controllers and services * NITs * fix domain normalisation
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { getWatchlistFeature } from "@calcom/features/di/watchlist/containers/watchlist";
|
|
import type logger from "@calcom/lib/logger";
|
|
|
|
import { extractDomainFromEmail } from "../utils/normalization";
|
|
|
|
interface CheckFreeEmailDomainParams {
|
|
email: string;
|
|
logger?: ReturnType<typeof logger.getSubLogger>;
|
|
}
|
|
|
|
export const checkIfFreeEmailDomain = async (params: CheckFreeEmailDomainParams): Promise<boolean> => {
|
|
const { email, logger: log } = params;
|
|
|
|
try {
|
|
const emailDomain = extractDomainFromEmail(email);
|
|
const domainWithoutAt = emailDomain.slice(1);
|
|
|
|
// If there's no email domain return as if it was a free email domain
|
|
if (!domainWithoutAt) return true;
|
|
|
|
// Gmail and Outlook are one of the most common email domains so we don't need to check the domains list
|
|
if (domainWithoutAt === "gmail.com" || domainWithoutAt === "outlook.com") return true;
|
|
|
|
const watchlist = await getWatchlistFeature();
|
|
return await watchlist.globalBlocking.isFreeEmailDomain(domainWithoutAt);
|
|
} catch (err) {
|
|
log?.error(err);
|
|
// If normalization fails, treat as free email domain for safety
|
|
return true;
|
|
}
|
|
};
|