diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index 50651d2c9b..5ac31a6345 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -1319,6 +1319,15 @@ "exchange_authentication_standard": "Basic authentication", "exchange_authentication_ntlm": "NTLM authentication", "exchange_compression": "GZip compression", + "exchange_version": "Exchange Version", + "exchange_version_2007_SP1": "2007 SP1", + "exchange_version_2010": "2010", + "exchange_version_2010_SP1": "2010 SP1", + "exchange_version_2010_SP2": "2010 SP2", + "exchange_version_2013": "2013", + "exchange_version_2013_SP1": "2013 SP1", + "exchange_version_2015": "2015", + "exchange_version_2016": "2016", "routing_forms_description": "Create forms to direct attendees to the correct destinations", "routing_forms_send_email_owner": "Send Email to Owner", "routing_forms_send_email_owner_description": "Sends an email to the owner when the form is submitted", diff --git a/packages/app-store/exchangecalendar/api/_postAdd.ts b/packages/app-store/exchangecalendar/api/_postAdd.ts index 769a484620..017a0837de 100644 --- a/packages/app-store/exchangecalendar/api/_postAdd.ts +++ b/packages/app-store/exchangecalendar/api/_postAdd.ts @@ -8,7 +8,7 @@ import { defaultResponder } from "@calcom/lib/server"; import prisma from "@calcom/prisma"; import checkSession from "../../_utils/auth"; -import { ExchangeAuthentication } from "../enums"; +import { ExchangeAuthentication, ExchangeVersion } from "../enums"; import { CalendarService } from "../lib"; const formSchema = z @@ -17,6 +17,7 @@ const formSchema = z username: z.string().email(), password: z.string(), authenticationMethod: z.number().default(ExchangeAuthentication.STANDARD), + exchangeVersion: z.number().default(ExchangeVersion.Exchange2016), useCompression: z.boolean().default(false), }) .strict(); diff --git a/packages/app-store/exchangecalendar/enums.ts b/packages/app-store/exchangecalendar/enums.ts index 795f264163..b77e328885 100644 --- a/packages/app-store/exchangecalendar/enums.ts +++ b/packages/app-store/exchangecalendar/enums.ts @@ -2,3 +2,13 @@ export enum ExchangeAuthentication { STANDARD = 0, NTLM = 1, } +export enum ExchangeVersion { + Exchange2007_SP1 = 0, + Exchange2010 = 1, + Exchange2010_SP1 = 2, + Exchange2010_SP2 = 3, + Exchange2013 = 4, + Exchange2013_SP1 = 5, + Exchange2015 = 6, + Exchange2016 = 7, +} diff --git a/packages/app-store/exchangecalendar/lib/CalendarService.ts b/packages/app-store/exchangecalendar/lib/CalendarService.ts index 3b4e71f171..9ba5823457 100644 --- a/packages/app-store/exchangecalendar/lib/CalendarService.ts +++ b/packages/app-store/exchangecalendar/lib/CalendarService.ts @@ -198,7 +198,7 @@ export default class ExchangeCalendarService implements Calendar { } private getExchangeService(): ExchangeService { - const service: ExchangeService = new ExchangeService(); + const service: ExchangeService = new ExchangeService(this.payload.exchangeVersion); service.Credentials = new WebCredentials(this.payload.username, this.payload.password); service.Url = new Uri(this.payload.url); if (this.payload.authenticationMethod === ExchangeAuthentication.NTLM) { diff --git a/packages/app-store/exchangecalendar/pages/setup/index.tsx b/packages/app-store/exchangecalendar/pages/setup/index.tsx index 3ca0370241..128dbd73bb 100644 --- a/packages/app-store/exchangecalendar/pages/setup/index.tsx +++ b/packages/app-store/exchangecalendar/pages/setup/index.tsx @@ -8,13 +8,14 @@ import z from "zod"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { Alert, Button, EmailField, Form, PasswordField, SelectField, Switch, TextField } from "@calcom/ui"; -import { ExchangeAuthentication } from "../../enums"; +import { ExchangeAuthentication, ExchangeVersion } from "../../enums"; interface IFormData { url: string; username: string; password: string; authenticationMethod: ExchangeAuthentication; + exchangeVersion: ExchangeVersion; useCompression: boolean; } @@ -24,6 +25,7 @@ const schema = z username: z.string().email(), password: z.string(), authenticationMethod: z.number().default(ExchangeAuthentication.STANDARD), + exchangeVersion: z.number().default(ExchangeVersion.Exchange2016), useCompression: z.boolean().default(false), }) .strict(); @@ -33,13 +35,27 @@ export default function ExchangeSetup() { const router = useRouter(); const [errorMessage, setErrorMessage] = useState(""); const form = useForm({ - defaultValues: { authenticationMethod: ExchangeAuthentication.STANDARD }, + defaultValues: { + authenticationMethod: ExchangeAuthentication.STANDARD, + exchangeVersion: ExchangeVersion.Exchange2016, + }, resolver: zodResolver(schema), }); const authenticationMethods = [ { value: ExchangeAuthentication.STANDARD, label: t("exchange_authentication_standard") }, { value: ExchangeAuthentication.NTLM, label: t("exchange_authentication_ntlm") }, ]; + const exchangeVersions = [ + { value: ExchangeVersion.Exchange2007_SP1, label: t("exchange_version_2007_SP1") }, + { value: ExchangeVersion.Exchange2010, label: t("exchange_version_2010") }, + { value: ExchangeVersion.Exchange2010_SP1, label: t("exchange_version_2010_SP1") }, + { value: ExchangeVersion.Exchange2010_SP2, label: t("exchange_version_2010_SP2") }, + { value: ExchangeVersion.Exchange2013, label: t("exchange_version_2013") }, + { value: ExchangeVersion.Exchange2013_SP1, label: t("exchange_version_2013_SP1") }, + { value: ExchangeVersion.Exchange2015, label: t("exchange_version_2015") }, + { value: ExchangeVersion.Exchange2016, label: t("exchange_version_2016") }, + ]; + return ( <>
@@ -111,6 +127,21 @@ export default function ExchangeSetup() { /> )} /> + ( + { + onChange(version?.value); + form.setValue("exchangeVersion", version!.value); + }} + /> + )} + />