CardDAV (synchronisation des contacts)
bext peut servir de serveur CardDAV (RFC 6352), permettant la synchronisation des contacts avec des clients conformes aux normes : Apple Contacts, Thunderbird, GNOME Contacts, DAVx5 et autres. Il partage la même fondation WebDAV et le même backend de stockage que CalDAV.
Activation de CardDAV#
CardDAV est activé via la même section de configuration [caldav], puisque les deux protocoles partagent la pile et le stockage WebDAV :
[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 :
bext build --features caldav
Lorsque [caldav] est activé, les points de terminaison CalDAV et CardDAV sont actifs.
Fondation WebDAV#
CardDAV utilise les mêmes méthodes WebDAV que CalDAV :
| Méthode | But |
|---|---|
PROPFIND |
Lire les propriétés des carnets d'adresses et des contacts. |
PROPPATCH |
Modifier les propriétés du carnet d'adresses. |
REPORT |
Exécutez des requêtes (recherche de texte, multiget, synchronisation). |
MKCOL |
Créez une nouvelle collection de carnets d'adresses. |
PUT |
Créez ou mettez à jour un contact. |
GET |
Récupérer un seul contact (.vcf). |
DELETE |
Supprimez un contact ou un carnet d'adresses. |
Structure des URL#
Les collections de carnets d'adresses suivent une hiérarchie prévisible :
/addressbooks/{user}/ # User's address book home
/addressbooks/{user}/{book}/ # A specific address book
/addressbooks/{user}/{book}/{uid}.vcf # A single contact
Exemple:
/addressbooks/alice/contacts/
/addressbooks/alice/contacts/bob-smith.vcf
/addressbooks/alice/team/
Format de carte virtuelle#
Les contacts sont stockés sous forme de fichiers vCard 4.0 (RFC 6350) .vcf. bext les analyse et les valide sur PUT :
BEGIN:VCARD
VERSION:4.0
FN:Bob Smith
N:Smith;Bob;;;
EMAIL;TYPE=work:bob@example.com
TEL;TYPE=cell:+1-555-0123
ADR;TYPE=home:;;123 Main St;Springfield;IL;62701;US
ORG:Acme Corp
END:VCARD
Les propriétés vCard prises en charge incluent :
| Propriété | Description |
|---|---|
FN |
Nom (à afficher) formaté. |
N |
Composants de nom structurés. |
EMAIL |
Adresses e-mail avec étiquettes de type. |
TEL |
Numéros de téléphone avec étiquettes de type. |
ADR |
Adresses postales avec étiquettes de type. |
ORG |
Nom de l'organisation. |
PHOTO |
Photo du contact (URI ou base64 en ligne). |
BDAY |
Anniversaire. |
NOTE |
Notes en texte libre. |
Rapports CardDAV#
Les clients interrogent les carnets d'adresses à l'aide de requêtes REPORT. bext prend en charge trois types de rapports :
requête de carnet d'adresses#
Rechercher des contacts par valeur de propriété :
<card:addressbook-query xmlns:card="urn:ietf:params:xml:ns:carddav">
<d:prop xmlns:d="DAV:">
<d:getetag/>
<card:address-data/>
</d:prop>
<card:filter>
<card:prop-filter name="EMAIL">
<card:text-match collation="i;unicode-casemap"
match-type="contains">example.com</card:text-match>
</card:prop-filter>
</card:filter>
</card:addressbook-query>
carnet d'adresses-multiget#
Récupérez des contacts spécifiques par URL en une seule requête :
<card:addressbook-multiget xmlns:card="urn:ietf:params:xml:ns:carddav">
<d:prop xmlns:d="DAV:">
<d:getetag/>
<card:address-data/>
</d:prop>
<d:href>/addressbooks/alice/contacts/bob-smith.vcf</d:href>
<d:href>/addressbooks/alice/contacts/carol-jones.vcf</d:href>
</card:addressbook-multiget>
collection de synchronisation#
Synchronisation incrémentielle efficace (RFC 6578), identique au mécanisme de synchronisation de CalDAV. Le client envoie un jeton de synchronisation et reçoit uniquement les modifications :
<d:sync-collection xmlns:d="DAV:">
<d:sync-token>data:,67890</d:sync-token>
<d:prop>
<d:getetag/>
</d:prop>
</d:sync-collection>
Découverte#
Les clients découvrent CardDAV à l'aide de la redirection .well-known (RFC 6764) :
GET /.well-known/carddav
→ 301 /addressbooks/
bext enregistre automatiquement cette redirection lorsque CardDAV est activé. Les applications clientes n'ont besoin que du nom d'hôte du serveur pour trouver le répertoire d'accueil du carnet d'adresses.
Back-end de stockage partagé#
CardDAV partage son backend de stockage avec CalDAV : tous deux utilisent la section de configuration [caldav] et les mêmes tables de base de données. Consultez le Documents CalDAV pour plus de détails sur le backend de stockage.
Authentification#
Les points de terminaison CardDAV nécessitent une authentification, en utilisant le même middleware que toutes les autres routes bext :
[[routes]]
path = "/addressbooks/*"
auth = "required"
Le {user} dans le chemin de l'URL est comparé à l'identité authentifiée. Les utilisateurs ne peuvent accéder à leurs propres carnets d'adresses que s'ils disposent d'autorisations de partage explicites.
Configuration#
CardDAV utilise la section de configuration [caldav]. Limites spécifiques aux contacts :
[caldav]
enabled = true
storage = "pg"
pg_url = "postgresql://user:pass@localhost/bext_dav"
max_contact_size_bytes = 65536
max_contacts_per_book = 100000
| Champ | Défaut | Description |
|---|---|---|
max_contact_size_bytes |
65536 | Taille maximale d'un seul téléchargement.vcf. |
max_contacts_per_book |
100000 | Limite de sécurité par carnet d'adresses. |
Indicateur de fonctionnalité#
CardDAV nécessite l'indicateur de fonctionnalité caldav (partagé avec CalDAV ) :
bext build --features caldav
CardDAV est activé automatiquement chaque fois que [caldav] est activé — il n'y a pas d'indicateur de fonctionnalité distinct ni de bascule de configuration. La désactivation des contacts tout en conservant les calendriers n'est actuellement pas prise en charge ; les deux partagent la même pile WebDAV et sont toujours activés ensemble.
Le backend de stockage memory perd toutes les données de contact au redémarrage. Utiliser
storage = "pg" dans tout déploiement de production. Le schéma de base de données est partagé avec CalDAV : une seule instance PostgreSQL et pg_url couvre les deux protocoles.
En rapport#
- CalDAV (synchronisation du calendrier) — protocole compagnon partageant la même pile WebDAV et le même backend de stockage
- Capacité d'authentification — middleware d'authentification appliqué aux routes
/addressbooks/* - Construire des drapeaux — indicateurs de fonctionnalités au moment de la compilation ;
caldavactive à la fois CalDAV et CardDAV - Référence de configuration — référence complète du champ
bext.config.toml
Links#
- RFC 6352 — CardDAV : extensions vCard vers WebDAV — la spécification du protocole CardDAV
- RFC 6350 — Spécification du format vCard — le format vCard 4.0 utilisé pour les fichiers de contacts
.vcf