Внедрение клиента Card- и CalDAV

Меня попросили разработать веб-приложение, которое может взаимодействовать с Card-/CalDAV-Server моей компании (Kerio Connect). Я провел последние часы, пытаясь найти подходящую библиотеку, но, похоже, нет такой, которая бы функционировала и все еще обслуживалась. Milton выглядит великолепно, но он написан на языке JAVA, с которым ни я, ни мои коллеги не работали.

Вместо этого мне, вероятно, придется что-то написать самому, предпочтительно на PHP или JavaScript. Мой вопрос; как? Мне очень нравится, что все это основано на http, но, кроме RFC, очень мало документации. Хотя мне удалось получить ответы на несколько моих запросов на завитки, другие потерпели неудачу, и я не понял, почему:

curl -X PROPFIND -u [email protected]:password -H "Content-Type: text/xml" -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop><displayname /></prop></propfind>" http://webmail.domain.tld/carddav/users/domain.tld/.public

Это работает. Я получаю ответ, содержащий «Общие папки (domain.tld)», что, в общем, то, о чем я просил.

curl -X PROPFIND -u [email protected]:password -H "Content-Type: text/xml" -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop><addressbook-home-set xmlns="urn:ietf:params:xml:ns:carddav"/></prop></propfind>" http://webmail.domain.tld/carddav/users/domain.tld/.public

Этот, с другой стороны, возвращает 403 - Запрещено.

Оба запроса, вероятно, в чем-то неверны - это просто то, что мне удалось собрать воедино.

Итак, как я могу подойти к этому? Не лучше ли просто прочитать RFC сверху вниз? Пока они не очень помогли.

Изменить:

Я прочитал обе статьи на sabre.io. Они мне в какой-то степени помогли. Однако я все еще не могу получить фактические контактные данные. Мне удалось получить сводку, содержащую UUID для нашей общей адресной книги, но как использовать эти UUID, я понятия не имею.

Кроме того, ни одна из статей не содержит подробностей о том, как все должно работать. Например, сначала в статье, связанной с CardDAV, говорится, что ctag должен быть сохранен для последующих запросов, затем, всего несколькими строками позже, упоминается, что сервер может не поддерживать это вообще. Далее я узнаю, что ctag предположительно является тегом, который позволяет мне узнать, если что-то изменилось на сервере; Это цель ctag. Каждый раз, когда в адресной книге что-то меняется, должен меняться и ctag. Итак... что происходит, когда мой сервер не поддерживает это? Как я узнаю, что это так? Запрос просто дает 403 - запрещено.

Это запрос, который я использую;

curl -X PROPFIND -u [email protected]:password -H "Content-Type: text/xml" --data "<d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/"><d:prop><cs:getctag /></d:prop></d:propfind>" https://domain.tld/carddav/users/domain.tld/.public/

Чтобы получить вышеупомянутое резюме нашей публичной адресной книги, я использовал;

curl -X REPORT -u [email protected]:password -H "Content-Type: text/xml" --data "<c:addressbook-query xmlns:d='DAV:' xmlns:c='urn:ietf:params:xml:ns:carddav'><d:prop><c:address-data></c:address-data></d:prop></c:addressbook-query>" https://domain.tld/public-contacts/domain.tld/

person F. Engels    schedule 18.06.2015    source источник
comment
Ваша --data строка недействительна (неправильные кавычки)   -  person Gerald Schneider    schedule 18.06.2015
comment
Чтобы получить фактические данные карты: Вы пробовали GET, используя один из ответов на PROPFIND в uri адресной книги?   -  person AgRizzo    schedule 26.06.2015


Ответы (1)


На веб-сайте SabreDAV есть довольно хорошая статья о том, как писать клиенты CalDAV и CardDAV: Создание CalDAV клиент.

Кроме того, в SabreDAV, скорее всего, есть много кода, который вам понадобится для реализации клиента DAV на PHP. Другие реализации библиотек перечислены на веб-сайте CalConnect CalDAV.

person hnh    schedule 18.06.2015