diff --git a/packages/integrations/src/nextcloud/nextcloud-url.ts b/packages/integrations/src/nextcloud/nextcloud-url.ts index 7de9a5899..b276cb236 100644 --- a/packages/integrations/src/nextcloud/nextcloud-url.ts +++ b/packages/integrations/src/nextcloud/nextcloud-url.ts @@ -1,8 +1,11 @@ export const createNextcloudCalendarServerUrl = (integrationUrl: string) => { const calendarServerUrl = new URL(integrationUrl); const integrationPath = calendarServerUrl.pathname.replace(/\/+$/, ""); + const davPath = "/remote.php/dav"; - calendarServerUrl.pathname = `${integrationPath}/remote.php/dav/`; + calendarServerUrl.pathname = integrationPath.endsWith(davPath) + ? `${integrationPath}/` + : `${integrationPath}${davPath}/`; calendarServerUrl.search = ""; calendarServerUrl.hash = ""; diff --git a/packages/integrations/src/nextcloud/test/nextcloud-url.spec.ts b/packages/integrations/src/nextcloud/test/nextcloud-url.spec.ts index da5e9fe69..9546b5662 100644 --- a/packages/integrations/src/nextcloud/test/nextcloud-url.spec.ts +++ b/packages/integrations/src/nextcloud/test/nextcloud-url.spec.ts @@ -20,4 +20,10 @@ describe("createNextcloudCalendarServerUrl", () => { "https://example.com/nextcloud/remote.php/dav/", ); }); + + test("does not duplicate an existing DAV endpoint", () => { + expect(createNextcloudCalendarServerUrl("https://example.com/nextcloud/remote.php/dav")).toBe( + "https://example.com/nextcloud/remote.php/dav/", + ); + }); });