CarddavTestClient.ktmain() и классом HTTP-клиента. Используется для ручного тестирования и отладки CardDAV-сервера. Поддерживает запросы OPTIONS/PROPFIND/GET/REPORT, коллекции sync-token, получение VCard с анализом PHOTO и пакетный экспорт всех контактов. Включает обширные закомментированные тестовые последовательности, показывающие итеративную разработку поддержки протокола CardDAV.Это инструмент отладки разработчика, а не модульный тест. Он имеет точку входа main() и работает как автономный CardDAV-клиент для тестирования реализации сервера. Файл содержит обширный закомментированный код, показывающий эволюцию тестирования протокола CardDAV.
| Импорт | Назначение |
|---|---|
org.apache.hc.client5.http.* | Apache HttpClient 5 для HTTP-взаимодействия (HttpGet, CloseableHttpClient, HttpClients, ClassicHttpResponse, ContentType, HttpEntity, HttpClientResponseHandler, StringEntity, ClassicRequestBuilder, HttpCoreContext) |
org.projectforge.common.extensions.abbreviate | Функция-расширение Kotlin для усечения длинных строк в выводе лога |
java.util.Base64 | Кодировщик Base64 JDK для заголовка HTTP Basic Authentication |
baseUrl: String — Базовый URL сервера (по умолчанию: http://localhost:8080/carddav)username: String — Имя пользователя CardDAV для Basic-аутентификацииpassword: String — Пароль CardDAV (DAV-токен)lastSyncToken: String? — Опциональный токен синхронизации для тестирования инкрементальной синхронизацииПростой класс данных, содержащий content: String, status: Int и headers: String из HTTP-ответов.
Использует HTTP Basic Authentication с заголовком Authorization: Basic {base64(username:password)}, формируемым один раз при инициализации.
Функциональный HttpClientResponseHandler, который читает сущность ответа как текст в кодировке UTF-8 и извлекает код статуса и заголовки.
Выполняет поток протокола CardDAV: OPTIONS → GET (VCard) → GET (фото). Большая часть исходного тестового кода (PROPFIND, REPORT, sync-collection) закомментирована, но примеры XML-тел запросов сохранены для справки.
Загружает все VCard с сервера с помощью запроса REPORT addressbook-query CardDAV, сохраняет каждую VCard в /tmp/carddav-vcards/ и анализирует записи PHOTO. Выводит статистику по:
Этот метод сыграл ключевую роль в отладке обработки фото в CardDAV (режимы URL и встроенных изображений).
Формирует и выполняет HTTP-запросы с настраиваемым методом, путём, телом, аутентификацией и логированием. Использует ClassicRequestBuilder из Apache HttpClient 5.
Анализирует данные VCard для определения режима кодирования фото:
PHOTO;VALUE=URI:https://... — фото предоставляется по URLPHOTO;ENCODING=b;TYPE=JPEG:base64data... или data:image/jpeg;base64,...Использование: CardDavTestClient <имя_пользователя> <dav-токен> [--fetch-all] --fetch-all: Загрузить все VCard с сервера и сохранить в /tmp/carddav-vcards/
Позиционные аргументы: имя пользователя, DAV-токен, опциональный базовый URL, опциональный токен синхронизации.
Запрос с методом=OPTIONS для Milton (uri=/users/username/, session-id=null) Ошибка базовой аутентификации, заголовок 'authorization' не найден. Обнаружен вызов PROPFIND: /users/username/ PROPFIND для Milton (uri=/users/username/addressBooks/default/ REPORT для Milton (uri=/users/username/addressBooks/default/Это показывает, что CardDAV-сервер изначально был построен на фреймворке WebDAV Milton, а текущая реализация реализует этот протокол нативно.
868d6abb7 2025 -> 2026 bbf6b792c VCard upload: специальная обработка поля формы. f2ceb72f1 CardDav: относительные photo-urls. 63081666f Заголовки исходных файлов: 2024 -> 2025. 943947aaa Адреса: поддержка gif и jpeg (также для carddav сервера). fc6301b43 WIP: CardDavServer. c4062ed97 WIP: Carddav 40e554cbe WIP: Carddav