feat: basic caldav support (#14372)

fix #13531 

#### PR Dependency Tree


* **PR #14372** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* CalDAV calendar integration: link and sync CalDAV-compatible calendars
(discovery, listing, event sync).
* New UI flow and dialog to link CalDAV accounts with provider
selection, credentials, and display name.

* **API / Config**
* Server exposes CalDAV provider presets in config and new GraphQL
mutation to link CalDAV accounts.
  * New calendar config section for CalDAV with validation and defaults.

* **Tests**
  * Comprehensive CalDAV integration test suite added.

* **Chores**
* Removed analytics tokens from build configuration and reduced Cloud
E2E test shards.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2026-02-05 03:04:21 +08:00
committed by GitHub
parent 403f16b404
commit a655b79166
34 changed files with 2995 additions and 217 deletions
+16
View File
@@ -206,6 +206,13 @@ type CalendarAccountObjectType {
updatedAt: DateTime!
}
type CalendarCalDAVProviderPresetObjectType {
docsUrl: String
id: String!
label: String!
requiresAppPassword: Boolean
}
type CalendarEventObjectType {
allDay: Boolean!
description: String
@@ -1274,6 +1281,13 @@ type LimitedUserType {
hasPassword: Boolean
}
input LinkCalDAVAccountInput {
displayName: String
password: String!
providerPresetId: String!
username: String!
}
input LinkCalendarAccountInput {
provider: CalendarProviderType!
redirectUri: String
@@ -1462,6 +1476,7 @@ type Mutation {
installLicense(license: Upload!, workspaceId: String!): License!
inviteMembers(emails: [String!]!, workspaceId: String!): [InviteResult!]!
leaveWorkspace(sendLeaveMail: Boolean @deprecated(reason: "no used anymore"), workspaceId: String!, workspaceName: String @deprecated(reason: "no longer used")): Boolean!
linkCalDAVAccount(input: LinkCalDAVAccountInput!): CalendarAccountObjectType!
linkCalendarAccount(input: LinkCalendarAccountInput!): String!
"""mention user in a doc"""
@@ -2039,6 +2054,7 @@ type ServerConfigType {
"""server base url"""
baseUrl: String!
calendarCalDAVProviders: [CalendarCalDAVProviderPresetObjectType!]!
calendarProviders: [CalendarProviderType!]!
"""credentials requirement"""