| Importation | Objectif |
org.apache.hc.client5.http.* | Apache HttpClient 5 pour la communication HTTP (HttpGet, CloseableHttpClient, HttpClients, ClassicHttpResponse, ContentType, HttpEntity, HttpClientResponseHandler, StringEntity, ClassicRequestBuilder, HttpCoreContext) |
org.projectforge.common.extensions.abbreviate | Fonction d'extension Kotlin pour tronquer les longues chaînes dans la sortie des logs |
java.util.Base64 | Encodeur Base64 JDK pour l'en-tête d'authentification HTTP Basic |
Structure de la classe : CardDavTestClient
Paramètres du constructeur
baseUrl: String — URL de base du serveur (par défaut : http://localhost:8080/carddav)
username: String — Nom d'utilisateur CardDAV pour l'authentification Basic
password: String — Mot de passe CardDAV (jeton DAV)
lastSyncToken: String? — Jeton de synchronisation optionnel pour les tests de synchronisation incrémentielle
Classe interne : ResponseData
Classe de données simple contenant content: String, status: Int et headers: String provenant des réponses HTTP.
Authentification
Utilise l'authentification HTTP Basic avec l'en-tête Authorization: Basic {base64(utilisateur:motdepasse)}, construit une fois à l'initialisation.
Gestionnaire de réponse
Un HttpClientResponseHandler fonctionnel qui lit l'entité de réponse sous forme de texte UTF-8 et extrait le code de statut et les en-têtes.
Méthodes clés
run() — Séquence de test par défaut
Exécute un flux de protocole CardDAV : OPTIONS → GET (VCard) → GET (photo). La plupart du code de test original (PROPFIND, REPORT, sync-collection) est commenté, avec des exemples de corps de requête XML conservés pour référence.
fetchAllVCards() — Exportation par lots de VCards
Récupère toutes les VCards du serveur en utilisant une requête REPORT CardDAV addressbook-query, sauvegarde chaque VCard dans /tmp/carddav-vcards/ et analyse les entrées PHOTO. Rapporte des statistiques sur :
- Références URL JPEG/PNG/GIF vs images base64 intégrées
- Contacts sans photo
- Nombre d'erreurs
Cette méthode a été déterminante pour déboguer la gestion des photos CardDAV (modes URL vs intégré).
sendRequest() — Requête HTTP générique
Construit et exécute des requêtes HTTP avec une méthode, un chemin, un corps, une authentification et une journalisation configurables. Utilise ClassicRequestBuilder d'Apache HttpClient 5.
analyzePhoto(vcard) — Analyseur de propriété PHOTO
Analyse les données VCard pour déterminer le mode d'encodage de la photo :
- Mode URL :
PHOTO;VALUE=URI:https://... — photo servie via URL
- Mode intégré :
PHOTO;ENCODING=b;TYPE=JPEG:donnéesbase64... ou data:image/jpeg;base64,...
Gère le repliement des lignes VCard (lignes de continuation commençant par un espace).
Fonction principale — Interface en ligne de commande
Utilisation : CardDavTestClient <nom_utilisateur> <jeton-dav> [--fetch-all]
--fetch-all : Récupère toutes les VCards du serveur et les sauvegarde dans /tmp/carddav-vcards/
Arguments positionnels : nom d'utilisateur, jeton DAV, URL de base optionnelle, jeton de synchronisation optionnel.
Le fichier contient des données de référence commentées montrant les réponses réelles du serveur CardDAV :
Requête avec méthode=OPTIONS pour Milton (uri=/users/username/, session-id=null)
Échec de l'authentification de base, en-tête 'authorization' non trouvé.
Appel PROPFIND détecté : /users/username/
PROPFIND pour Milton (uri=/users/username/addressBooks/default/
REPORT pour Milton (uri=/users/username/addressBooks/default/
Cela révèle que le serveur CardDAV a été initialement construit sur le framework WebDAV
Milton, et que l'implémentation actuelle réimplémente ce protocole de manière native.
Le fichier sert à la fois de client de test et de documentation vivante de l'implémentation du protocole CardDAV. Les corps de requêtes PROPFIND/REPORT commentés sont du XML CardDAV valide qui documente le comportement attendu du serveur.
Historique Git
868d6abb7 2025 -> 2026
bbf6b792c Téléchargement VCard : traitement spécial du champ de formulaire.
f2ceb72f1 CardDav : URLs de photos relatives.
63081666f En-têtes des fichiers sources : 2024 -> 2025.
943947aaa Adresses : prise en charge de gif et jpeg (également pour le serveur carddav).
fc6301b43 WIP : CardDavServer.
c4062ed97 WIP : Carddav
40e554cbe WIP : Carddav