CarddavTestClient.ktmain() y una clase de cliente HTTP. Se utiliza para pruebas manuales y depuración del servidor CardDAV. Soporta solicitudes OPTIONS/PROPFIND/GET/REPORT, colección de tokens de sincronización, obtención de VCard con análisis de PHOTO y exportación por lotes de todos los contactos. Incluye extensas secuencias de prueba comentadas que muestran el desarrollo iterativo del soporte del protocolo CardDAV.Esta es una herramienta de depuración de desarrollo, no una prueba unitaria. Tiene un punto de entrada main() y actúa como un cliente CardDAV independiente para probar la implementación del servidor. El archivo contiene código extensamente comentado que muestra la evolución de las pruebas del protocolo CardDAV.
| Importación | Propósito |
|---|---|
org.apache.hc.client5.http.* | Apache HttpClient 5 para comunicación HTTP (HttpGet, CloseableHttpClient, HttpClients, ClassicHttpResponse, ContentType, HttpEntity, HttpClientResponseHandler, StringEntity, ClassicRequestBuilder, HttpCoreContext) |
org.projectforge.common.extensions.abbreviate | Función de extensión de Kotlin para truncar cadenas largas en la salida de registro |
java.util.Base64 | Codificador Base64 de JDK para el encabezado de Autenticación Básica HTTP |
baseUrl: String — URL base del servidor (predeterminado: http://localhost:8080/carddav)username: String — Nombre de usuario CardDAV para autenticación básicapassword: String — Contraseña CardDAV (token DAV)lastSyncToken: String? — Token de sincronización opcional para pruebas de sincronización incrementalClase de datos simple que contiene content: String, status: Int y headers: String de las respuestas HTTP.
Utiliza Autenticación Básica HTTP con el encabezado Authorization: Basic {base64(usuario:contraseña)}, construido una vez al inicializar.
Un HttpClientResponseHandler funcional que lee la entidad de respuesta como texto UTF-8 y extrae el código de estado y los encabezados.
Ejecuta un flujo de protocolo CardDAV: OPTIONS → GET (VCard) → GET (foto). La mayor parte del código de prueba original (PROPFIND, REPORT, sync-collection) está comentado, con ejemplos del cuerpo de la solicitud XML conservados como referencia.
Obtiene todas las VCard del servidor utilizando una solicitud REPORT de addressbook-query de CardDAV, guarda cada VCard en /tmp/carddav-vcards/ y analiza las entradas PHOTO. Reporta estadísticas sobre:
Este método fue fundamental para depurar el manejo de fotos CardDAV (modos URL vs incrustado).
Construye y ejecuta solicitudes HTTP con método, ruta, cuerpo, autenticación y registro configurables. Utiliza ClassicRequestBuilder de Apache HttpClient 5.
Analiza datos VCard para determinar el modo de codificación de la foto:
PHOTO;VALUE=URI:https://... — foto servida a través de URLPHOTO;ENCODING=b;TYPE=JPEG:datosbase64... o data:image/jpeg;base64,...Uso: CardDavTestClient <usuario> <token-dav> [--fetch-all] --fetch-all: Obtener todas las VCard del servidor y guardarlas en /tmp/carddav-vcards/
Argumentos posicionales: usuario, token DAV, URL base opcional, token de sincronización opcional.
Solicitud con method=OPTIONS para Milton (uri=/users/usuario/, session-id=null) Autenticación básica fallida, encabezado 'authorization' no encontrado. Llamada PROPFIND detectada: /users/usuario/ PROPFIND para Milton (uri=/users/usuario/addressBooks/default/ REPORT para Milton (uri=/users/usuario/addressBooks/default/Esto revela que el servidor CardDAV fue construido originalmente sobre el framework WebDAV Milton, y la implementación actual reimplementa ese protocolo de forma nativa.
868d6abb7 2025 -> 2026 bbf6b792c Carga de VCard: manejo especial del campo de formulario. f2ceb72f1 CardDav: URLs de foto relativas. 63081666f Encabezados de archivos fuente: 2024 -> 2025. 943947aaa Direcciones: soporte de gif y jpeg (también para servidor carddav). fc6301b43 WIP: CardDavServer. c4062ed97 WIP: Carddav 40e554cbe WIP: Carddav