feat: Added option to select the exchange server version (#7908)

* Added option to select the exchange server version

* Fixed linting issues

* Removed yarn changes

* Update packages/app-store/exchangecalendar/lib/CalendarService.ts

Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>

* Removed requested change

---------

Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
This commit is contained in:
copoer
2023-04-17 10:21:14 -04:00
committed by GitHub
co-authored by Joe Au-Yeung Peer Richelsen
parent 7dc3266133
commit 06d13e0f6e
5 changed files with 55 additions and 4 deletions
@@ -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",
@@ -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();
@@ -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,
}
@@ -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) {
@@ -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<IFormData>({
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 (
<>
<div className="bg-emphasis flex h-screen">
@@ -111,6 +127,21 @@ export default function ExchangeSetup() {
/>
)}
/>
<Controller
name="exchangeVersion"
control={form.control}
render={({ field: { onChange } }) => (
<SelectField
label={t("exchange_version")}
options={exchangeVersions}
defaultValue={exchangeVersions[7]}
onChange={async (version) => {
onChange(version?.value);
form.setValue("exchangeVersion", version!.value);
}}
/>
)}
/>
<Switch
label={t("exchange_compression")}
name="useCompression"