ENbext.dev
DocumentationProtocoles

Traduction automatique depuis l’anglais. Consulter l’original.

Sur cette page

CalDAV (synchronisation du calendrier)

bext peut servir de serveur CalDAV (RFC 4791), permettant la synchronisation du calendrier avec n'importe quel client conforme aux normes : Apple Calendar, Thunderbird, GNOME Calendar, DAVx5 et autres.

Activation de CalDAV#

toml
[caldav]
enabled = true
storage = "memory"   # "memory" | "pg"

# For PostgreSQL storage
# storage = "pg"
# pg_url = "postgresql://user:pass@localhost/bext_dav"

Compilez avec l'indicateur de fonctionnalité caldav :

bash
bext build --features caldav

Fondation WebDAV#

CalDAV est construit sur WebDAV. bext implémente les méthodes HTTP requises :

Méthode But
PROPFIND Lisez les propriétés des calendriers et des événements.
PROPPATCH Modifier les propriétés du calendrier.
REPORT Exécutez des requêtes (plage de temps, multiget, synchronisation).
MKCALENDAR Créez une nouvelle collection de calendriers.
PUT Créez ou mettez à jour un événement de calendrier.
GET Récupérer un seul événement (.ics).
DELETE Supprimez un événement ou un calendrier.

Structure des URL#

Les collections de calendriers suivent une hiérarchie prévisible :

code
/calendars/{user}/                      # User's calendar home
/calendars/{user}/{calendar}/           # A specific calendar
/calendars/{user}/{calendar}/{uid}.ics  # A single event

Exemple:

code
/calendars/alice/work/
/calendars/alice/work/meeting-2026-04.ics
/calendars/alice/personal/

Format iCalendrier#

Les événements sont stockés sous forme de fichiers iCalendar (RFC 5545) .ics. bext les analyse et les valide sur PUT :

code
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//bext//CalDAV//EN
BEGIN:VEVENT
UID:meeting-2026-04@example.com
DTSTART:20260415T090000Z
DTEND:20260415T100000Z
SUMMARY:Team Standup
END:VEVENT
END:VCALENDAR

Types de composants pris en charge :

Composant Description
VEVENT Événements du calendrier.
VTODO Tâches/éléments à faire.
VJOURNAL Entrées de journal/notes.

Rapports CalDAV#

Les clients interrogent les calendriers à l'aide de requêtes REPORT avec des corps XML. bext prend en charge trois types de rapports :

requête de calendrier#

Filtrer les événements par propriété ou par plage horaire :

xml
<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav">
  <d:prop xmlns:d="DAV:">
    <d:getetag/>
    <c:calendar-data/>
  </d:prop>
  <c:filter>
    <c:comp-filter name="VCALENDAR">
      <c:comp-filter name="VEVENT">
        <c:time-range start="20260401T000000Z"
                      end="20260430T235959Z"/>
      </c:comp-filter>
    </c:comp-filter>
  </c:filter>
</c:calendar-query>

calendrier-multiget#

Récupérez des événements spécifiques par URL en une seule requête :

xml
<c:calendar-multiget xmlns:c="urn:ietf:params:xml:ns:caldav">
  <d:prop xmlns:d="DAV:">
    <d:getetag/>
    <c:calendar-data/>
  </d:prop>
  <d:href>/calendars/alice/work/meeting-2026-04.ics</d:href>
  <d:href>/calendars/alice/work/review-2026-04.ics</d:href>
</c:calendar-multiget>

collection de synchronisation#

Synchronisation incrémentielle efficace (RFC 6578). Le client envoie un jeton de synchronisation de la synchronisation précédente et bext renvoie uniquement les modifications apportées depuis :

xml
<d:sync-collection xmlns:d="DAV:">
  <d:sync-token>data:,12345</d:sync-token>
  <d:prop>
    <d:getetag/>
  </d:prop>
</d:sync-collection>

bext répond avec des ressources nouvelles/modifiées/supprimées et un nouveau jeton de synchronisation. Cela évite une nouvelle récupération complète à chaque cycle de synchronisation.

Découverte#

Les clients découvrent CalDAV à l'aide de la redirection .well-known (RFC 6764) :

code
GET /.well-known/caldav
→ 301 /calendars/

bext enregistre automatiquement cette redirection lorsque CalDAV est activé. Les applications clientes n'ont besoin que du nom d'hôte du serveur pour trouver l'accueil du calendrier.

Backends de stockage#

Back-end Description
memory Magasin en mémoire. Rapide, perdu au redémarrage.
pg PostgreSQL via @bext/infra-pg. Persistant.

Le backend PostgreSQL partage son schéma avec CardDAV (contacts), les deux fonctionnalités utilisent donc la même base de données.

Authentification#

Les points de terminaison CalDAV nécessitent une authentification. bext utilise le même middleware d'authentification que les routes HTTP : JWT, clés API ou OAuth :

toml
[[routes]]
path = "/calendars/*"
auth = "required"

Le {user} dans le chemin de l'URL est comparé à l'identité authentifiée. Les utilisateurs ne peuvent accéder qu'à leurs propres calendriers, à moins d'y avoir accès via le partage.

Référence de configuration#

toml
[caldav]
enabled = true
storage = "memory"
max_event_size_bytes = 65536
max_events_per_calendar = 50000
Champ Défaut Description
storage memory Back-end de stockage.
max_event_size_bytes 65536 Taille maximale d'un seul téléchargement.ics.
max_events_per_calendar 50000 Limite de sécurité par calendrier.

Indicateur de fonctionnalité#

CalDAV nécessite l'indicateur de fonctionnalité caldav :

bash
bext build --features caldav
Attention

Le backend de stockage memory perd toutes les données du calendrier au redémarrage. Utiliser storage = "pg" pour tout déploiement où la persistance des données est importante. Le backend PostgreSQL partage son schéma avec CardDAV, donc les deux fonctionnalités utilisent le même pg_url.

Conseil

Les applications clientes n'ont besoin que du nom d'hôte du serveur : la redirection .well-known/caldav gère automatiquement la découverte. Diriger les clients vers /calendars/ contourne directement cela et peut interrompre la configuration automatique dans certaines applications (Apple Calendar, DAVx5).

En rapport#

Modifier cette page ↗Besoin d’aide ? ↗
Rechercher dans la documentation

Saisissez un sujet, une commande ou une question.