fix: Anonymize host email in ics (#21544)
* add virta check for anonymizing host * move to env var * move env var to constants * fix: filter empty string * fix test * fix test --------- Co-authored-by: Udit Takkar <udit222001@gmail.com>
This commit is contained in:
1 parent
d41dcc69ad
commit
14592de6c4
4 files changed
+26
-6
No files matched your search
@@ -1,5 +1,6 @@
|
||||
import { describe, expect } from "vitest";
|
||||
|
||||
import { ORGANIZER_EMAIL_EXEMPT_DOMAINS } from "@calcom/lib/constants";
|
||||
import { buildCalendarEvent, buildPerson } from "@calcom/lib/test/builder";
|
||||
import { buildVideoCallData } from "@calcom/lib/test/builder";
|
||||
import type { CalendarEvent } from "@calcom/types/Calendar";
|
||||
@@ -26,14 +27,21 @@ const testIcsStringContains = ({
|
||||
}) => {
|
||||
const DTSTART = `${event.startTime.split(".")[0].split(":").slice(0, 2).join(":").replace(/[-:]/g, "")}00Z`;
|
||||
const DTEND = `${event.endTime.split(".")[0].split(":").slice(0, 2).join(":").replace(/[-:]/g, "")}00Z`;
|
||||
|
||||
const isOrganizerExempt = ORGANIZER_EMAIL_EXEMPT_DOMAINS?.split(",")
|
||||
.filter((domain) => domain.trim() !== "")
|
||||
.some((domain) => event.organizer.email.toLowerCase().endsWith(domain.toLowerCase()));
|
||||
expect(icsString).toEqual(expect.stringContaining(`UID:${event.iCalUID}`));
|
||||
// Sometimes the deeply equal stringMatching error appears. Don't want to add flakey tests
|
||||
// expect(icsString).toEqual(expect.stringContaining(`SUMMARY:${event.title}`));
|
||||
expect(icsString).toEqual(expect.stringContaining(`DTSTART:${DTSTART}`));
|
||||
expect(icsString).toEqual(
|
||||
expect.stringContaining(`ORGANIZER;CN=${event.organizer.name}:mailto:${event.organizer.email}`)
|
||||
);
|
||||
if (event.hideOrganizerEmail && !isOrganizerExempt) {
|
||||
expect(icsString).toEqual(expect.stringContaining(`ORGANIZER;CN=${event.organizer.name}`));
|
||||
expect(icsString).not.toEqual(expect.stringContaining(`mailto:${event.organizer.email}`));
|
||||
} else {
|
||||
expect(icsString).toEqual(
|
||||
expect.stringContaining(`ORGANIZER;CN=${event.organizer.name}:mailto:${event.organizer.email}`)
|
||||
);
|
||||
}
|
||||
expect(icsString).toEqual(expect.stringContaining(`DTEND:${DTEND}`));
|
||||
expect(icsString).toEqual(expect.stringContaining(`STATUS:${status}`));
|
||||
// Getting an error expected icsString to deeply equal stringMatching
|
||||
|
||||
@@ -5,6 +5,7 @@ import { RRule } from "rrule";
|
||||
|
||||
import { getRichDescription } from "@calcom/lib/CalEventParser";
|
||||
import { getVideoCallUrlFromCalEvent } from "@calcom/lib/CalEventParser";
|
||||
import { ORGANIZER_EMAIL_EXEMPT_DOMAINS } from "@calcom/lib/constants";
|
||||
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
|
||||
|
||||
export enum BookingAction {
|
||||
@@ -65,6 +66,10 @@ const generateIcsString = ({
|
||||
recurrenceRule = new RRule(event.recurringEvent).toString().replace("RRULE:", "");
|
||||
}
|
||||
|
||||
const isOrganizerExempt = ORGANIZER_EMAIL_EXEMPT_DOMAINS?.split(",")
|
||||
.filter((domain) => domain.trim() !== "")
|
||||
.some((domain) => event.organizer.email.toLowerCase().endsWith(domain.toLowerCase()));
|
||||
|
||||
const icsEvent = createEvent({
|
||||
uid: event.iCalUID || event.uid!,
|
||||
sequence: event.iCalSequence || 0,
|
||||
@@ -74,7 +79,12 @@ const generateIcsString = ({
|
||||
productId: "calcom/ics",
|
||||
title: event.title,
|
||||
description: getRichDescription(event, t),
|
||||
organizer: { name: event.organizer.name, email: event.organizer.email },
|
||||
organizer: {
|
||||
name: event.organizer.name,
|
||||
...(event.hideOrganizerEmail && !isOrganizerExempt
|
||||
? { email: "no-reply@cal.com" }
|
||||
: { email: event.organizer.email }),
|
||||
},
|
||||
...{ recurrenceRule },
|
||||
attendees: [
|
||||
...event.attendees.map((attendee: Person) => ({
|
||||
|
||||
@@ -5,6 +5,7 @@ const RENDER_URL = process.env.RENDER_EXTERNAL_URL ? `https://${process.env.REND
|
||||
export const CALCOM_ENV = process.env.CALCOM_ENV || process.env.NODE_ENV;
|
||||
export const IS_PRODUCTION = CALCOM_ENV === "production";
|
||||
export const IS_PRODUCTION_BUILD = process.env.NODE_ENV === "production";
|
||||
export const ORGANIZER_EMAIL_EXEMPT_DOMAINS = process.env.ORGANIZER_EMAIL_EXEMPT_DOMAINS || "";
|
||||
const IS_DEV = CALCOM_ENV === "development";
|
||||
|
||||
/** https://app.cal.com */
|
||||
|
||||
+2
-1
@@ -484,6 +484,7 @@
|
||||
"CALCOM_ADMIN_API_KEY",
|
||||
"NEXT_PUBLIC_SINGLE_ORG_MODE_ENABLED",
|
||||
"CALCOM_SERVICE_ACCOUNT_ENCRYPTION_KEY",
|
||||
"CAL_VIDEO_RECORDING_TOKEN_SECRET"
|
||||
"CAL_VIDEO_RECORDING_TOKEN_SECRET",
|
||||
"ORGANIZER_EMAIL_EXEMPT_DOMAINS"
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user