mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
* --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
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { getWatchlistFeature } from "@calcom/features/di/watchlist/containers/watchlist";
|
|
import type { SpanFn } from "@calcom/features/watchlist/lib/telemetry";
|
|
import { normalizeEmail } from "@calcom/features/watchlist/lib/utils/normalization";
|
|
|
|
function presenter(containsBlockedUser: boolean, span?: SpanFn): Promise<boolean> {
|
|
const result = !!containsBlockedUser;
|
|
if (!span) {
|
|
return Promise.resolve(result);
|
|
}
|
|
return span({ name: "checkIfUsersAreBlocked Presenter", op: "serialize" }, () => result);
|
|
}
|
|
|
|
interface CheckUsersBlockedParams {
|
|
users: { email: string; username: string | null; locked: boolean }[];
|
|
organizationId?: number | null;
|
|
span?: SpanFn;
|
|
}
|
|
|
|
export async function checkIfUsersAreBlocked(params: CheckUsersBlockedParams): Promise<boolean> {
|
|
const { users, organizationId, span } = params;
|
|
const execute = async () => {
|
|
if (users.some((user) => user.locked)) {
|
|
return presenter(true, span);
|
|
}
|
|
|
|
const watchlist = await getWatchlistFeature();
|
|
|
|
for (const user of users) {
|
|
if (!user.email) continue;
|
|
const normalizedEmail = normalizeEmail(user.email);
|
|
|
|
const globalResult = await watchlist.globalBlocking.isBlocked(normalizedEmail);
|
|
if (globalResult.isBlocked) {
|
|
return presenter(true, span);
|
|
}
|
|
|
|
if (organizationId) {
|
|
const orgResult = await watchlist.orgBlocking.isBlocked(normalizedEmail, organizationId);
|
|
if (orgResult.isBlocked) {
|
|
return presenter(true, span);
|
|
}
|
|
}
|
|
}
|
|
|
|
return presenter(false, span);
|
|
};
|
|
|
|
if (!span) {
|
|
return execute();
|
|
}
|
|
|
|
return span({ name: "checkIfUsersAreBlocked Controller" }, execute);
|
|
}
|