EN · DE · RU · FR · ES

#1865: CarddavTestClient.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CarddavTestClient.kt Utilidad de prueba / herramienta de desarrollo — paquete org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CarddavTestClient.kt 468 líneas · 372 código · 60 comentarios · 36 en blanco
Cliente de prueba CardDAV independiente con una función main() 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.

Arquitectura

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.

Importaciones y dependencias

ImportaciónPropó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.abbreviateFunción de extensión de Kotlin para truncar cadenas largas en la salida de registro
java.util.Base64Codificador Base64 de JDK para el encabezado de Autenticación Básica HTTP

Estructura de la clase: CardDavTestClient

Parámetros del constructor

Clase interna: ResponseData

Clase de datos simple que contiene content: String, status: Int y headers: String de las respuestas HTTP.

Autenticación

Utiliza Autenticación Básica HTTP con el encabezado Authorization: Basic {base64(usuario:contraseña)}, construido una vez al inicializar.

Manejador de respuestas

Un HttpClientResponseHandler funcional que lee la entidad de respuesta como texto UTF-8 y extrae el código de estado y los encabezados.

Métodos clave

run() — Secuencia de prueba predeterminada

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.

fetchAllVCards() — Exportación por lotes de VCard

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).

sendRequest() — Solicitud HTTP genérica

Construye y ejecuta solicitudes HTTP con método, ruta, cuerpo, autenticación y registro configurables. Utiliza ClassicRequestBuilder de Apache HttpClient 5.

analyzePhoto(vcard) — Analizador de propiedad PHOTO

Analiza datos VCard para determinar el modo de codificación de la foto:

Maneja el plegado de líneas VCard (líneas de continuación que comienzan con espacios en blanco).

Función principal — Interfaz de línea de comandos

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.

El archivo contiene datos de referencia comentados que muestran respuestas reales del servidor CardDAV:
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.
El archivo sirve tanto como cliente de prueba como documentación viva de la implementación del protocolo CardDAV. Los cuerpos de solicitud PROPFIND/REPORT comentados son XML CardDAV válido que documentan el comportamiento esperado del servidor.

Historial de Git

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