ENbext.dev
DocumentationProtocoles

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

Sur cette page

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 :

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

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 :

code
/addressbooks/{user}/                       # User's address book home
/addressbooks/{user}/{book}/                # A specific address book
/addressbooks/{user}/{book}/{uid}.vcf       # A single contact

Exemple:

code
/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 :

code
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é :

xml
<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 :

xml
<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 :

xml
<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) :

code
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 :

toml
[[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 :

toml
[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 ) :

bash
bext build --features caldav
Conseil

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.

Attention

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#

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

Saisissez un sujet, une commande ou une question.