diff --git a/apps/web/lib/team/[slug]/[type]/getServerSideProps.tsx b/apps/web/lib/team/[slug]/[type]/getServerSideProps.tsx index 84b8ab0ed9f7af..0e3445ba162f82 100644 --- a/apps/web/lib/team/[slug]/[type]/getServerSideProps.tsx +++ b/apps/web/lib/team/[slug]/[type]/getServerSideProps.tsx @@ -5,8 +5,8 @@ import { getServerSession } from "@calcom/features/auth/lib/getServerSession"; import type { GetBookingType } from "@calcom/features/bookings/lib/get-booking"; import { getBookingForReschedule } from "@calcom/features/bookings/lib/get-booking"; import { getSlugOrRequestedSlug, orgDomainConfig } from "@calcom/features/ee/organizations/lib/orgDomains"; +import { getOrganizationSEOSettings } from "@calcom/features/ee/organizations/lib/orgSettings"; import { getPlaceholderAvatar } from "@calcom/lib/defaultAvatarImage"; -import { OrganizationRepository } from "@calcom/lib/server/repository/organization"; import slugify from "@calcom/lib/slugify"; import prisma from "@calcom/prisma"; import { RedirectType } from "@calcom/prisma/client"; @@ -179,7 +179,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => eventData, }); - const organizationSettings = OrganizationRepository.utils.getOrganizationSEOSettings(team); + const organizationSettings = getOrganizationSEOSettings(team); const allowSEOIndexing = organizationSettings?.allowSEOIndexing ?? false; if (!eventData) { diff --git a/apps/web/lib/team/[slug]/getServerSideProps.tsx b/apps/web/lib/team/[slug]/getServerSideProps.tsx index 4369bba85c44a5..082230fd8c4ecf 100644 --- a/apps/web/lib/team/[slug]/getServerSideProps.tsx +++ b/apps/web/lib/team/[slug]/getServerSideProps.tsx @@ -1,13 +1,17 @@ import type { GetServerSidePropsContext } from "next"; import { orgDomainConfig } from "@calcom/features/ee/organizations/lib/orgDomains"; +import { + getOrganizationSettings, + getVerifiedDomain, +} from "@calcom/features/ee/organizations/lib/orgSettings"; import { getFeatureFlag } from "@calcom/features/flags/server/utils"; +import { IS_CALCOM } from "@calcom/lib/constants"; import { getUserAvatarUrl } from "@calcom/lib/getAvatarUrl"; import { getBookerBaseUrlSync } from "@calcom/lib/getBookerUrl/client"; import logger from "@calcom/lib/logger"; import { markdownToSafeHTML } from "@calcom/lib/markdownToSafeHTML"; import { getTeamWithMembers } from "@calcom/lib/server/queries/teams"; -import { OrganizationRepository } from "@calcom/lib/server/repository/organization"; import slugify from "@calcom/lib/slugify"; import { stripMarkdown } from "@calcom/lib/stripMarkdown"; import prisma from "@calcom/prisma"; @@ -30,8 +34,13 @@ function getOrgProfileRedirectToVerifiedDomain( if (!team.isOrganization) { return null; } + // when this is not on a Cal.com page we don't auto redirect - + // good for diagnosis purposes. + if (!IS_CALCOM) { + return null; + } - const verifiedDomain = OrganizationRepository.utils.getVerifiedDomain(settings); + const verifiedDomain = getVerifiedDomain(settings); if (!settings.orgProfileRedirectsToVerifiedDomain || !verifiedDomain) { return null; @@ -145,7 +154,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => } as const; } - const organizationSettings = OrganizationRepository.utils.getOrganizationSettings(team); + const organizationSettings = getOrganizationSettings(team); const allowSEOIndexing = organizationSettings?.allowSEOIndexing ?? false; const redirectToVerifiedDomain = organizationSettings diff --git a/packages/features/ee/organizations/lib/orgSettings.ts b/packages/features/ee/organizations/lib/orgSettings.ts new file mode 100644 index 00000000000000..f1ee186cee6923 --- /dev/null +++ b/packages/features/ee/organizations/lib/orgSettings.ts @@ -0,0 +1,38 @@ +import type { OrganizationSettings } from "@calcom/prisma/client"; + +type MinimumOrganizationSettings = Pick< + OrganizationSettings, + "orgAutoAcceptEmail" | "orgProfileRedirectsToVerifiedDomain" | "allowSEOIndexing" +>; + +type SEOOrganizationSettings = Pick; + +export const getOrganizationSettings = (team: { + isOrganization: boolean; + organizationSettings: MinimumOrganizationSettings | null; + parent: { + organizationSettings: MinimumOrganizationSettings | null; + } | null; +}) => { + if (!team) return null; + if (team.isOrganization) return team.organizationSettings ?? null; + if (!team.parent) return null; + return team.parent.organizationSettings ?? null; +}; + +export const getOrganizationSEOSettings = (team: { + isOrganization: boolean; + organizationSettings: SEOOrganizationSettings | null; + parent: { + organizationSettings: SEOOrganizationSettings | null; + } | null; +}) => { + if (!team) return null; + if (team.isOrganization) return team.organizationSettings ?? null; + if (!team.parent) return null; + return team.parent.organizationSettings ?? null; +}; + +export const getVerifiedDomain = (settings: Pick) => { + return settings.orgAutoAcceptEmail; +}; diff --git a/packages/lib/server/repository/organization.ts b/packages/lib/server/repository/organization.ts index dabe5d49ee5559..23b63b2fedd455 100644 --- a/packages/lib/server/repository/organization.ts +++ b/packages/lib/server/repository/organization.ts @@ -3,7 +3,6 @@ import { IS_TEAM_BILLING_ENABLED } from "@calcom/lib/constants"; import logger from "@calcom/lib/logger"; import { safeStringify } from "@calcom/lib/safeStringify"; import { prisma } from "@calcom/prisma"; -import type { OrganizationSettings } from "@calcom/prisma/client"; import { MembershipRole } from "@calcom/prisma/enums"; import { teamMetadataSchema } from "@calcom/prisma/zod-utils"; @@ -11,11 +10,6 @@ import { createAProfileForAnExistingUser } from "../../createAProfileForAnExisti import { getParsedTeam } from "./teamUtils"; import { UserRepository } from "./user"; -type MinimumOrganizationSettings = Pick< - OrganizationSettings, - "orgAutoAcceptEmail" | "orgProfileRedirectsToVerifiedDomain" | "allowSEOIndexing" ->; -type SEOOrganizationSettings = Pick; const orgSelect = { id: true, name: true, @@ -356,38 +350,4 @@ export class OrganizationRepository { return org?.calVideoLogo; } - - static utils = { - /** - * Gets the organization setting if the team is an organization. - * If not, it gets the organization setting of the parent organization. - */ - getOrganizationSettings: (team: { - isOrganization: boolean; - organizationSettings: MinimumOrganizationSettings | null; - parent: { - organizationSettings: MinimumOrganizationSettings | null; - } | null; - }) => { - if (!team) return null; - if (team.isOrganization) return team.organizationSettings ?? null; - if (!team.parent) return null; - return team.parent.organizationSettings ?? null; - }, - getOrganizationSEOSettings: (team: { - isOrganization: boolean; - organizationSettings: SEOOrganizationSettings | null; - parent: { - organizationSettings: SEOOrganizationSettings | null; - } | null; - }) => { - if (!team) return null; - if (team.isOrganization) return team.organizationSettings ?? null; - if (!team.parent) return null; - return team.parent.organizationSettings ?? null; - }, - getVerifiedDomain(settings: Pick) { - return settings.orgAutoAcceptEmail; - }, - }; }