Регистрация...

Eserv Forum / E3 / Eserv 3 Web and FTP Servers Support / acWeb & WebDav

imported // (v1)
Продукты и услуги Скачать Документация Купить Поддержка Форумы Партнёрам Статьи О компании
Новости
12.10.2009
Переезд завершен
Нужно опубликовать для совместной работы календарь. Попробовал использовать связку acWeb+WebDav+SunBird.

В принципе для чтения работает. Но внести изменения не могу. Требует авторизации. Учетные записи из UserList не срабатывают.

Вообще как разделить доступ к календарю: одним только для чтения, другим для изменения?

Как это реализовать в acWeb?

Спасибо.
 
Комментарии к этой версии (05.05.2008 17:52) [~mixsv] c8f32d6c
АвторДатаТекстtags
ac06.05.2008 01:20
Сейчас гляну, как это в текущей версии SunBird выглядит, давно не испытывал.
imported
ac06.05.2008 01:41
Да, все так же. Работает. Попробуйте публиковать в пользовательское пространство админского порта: http://ваш_acweb:3140/my/test_sb.ics и вводить соответственно пользовательский логин (как на веб-архив /my/wm/ или на личные страницы TrafC).

В логе acWEB.log должны появиться записи "UPLOADING..." и т.д. — реакция по умолчанию, заданная в acWEB\conf\http\PrePUT.rules.txt и acWEB\conf\http\PostPUT.rules.txt. Предполагается, что в PostPUT файл будет перемещаться туда, куда задумано админом — в публичный каталог, например (где на календарь могут подписаться другие).
imported
mixsv06.05.2008 08:14
Чего-то не получается. Не дает сохранить изменения.

Вот кусок из acWeb.log:

UPLOADING:..\script\control\wwwroot\my\
<?xml version="1.0"?>
<D:Propfind xmlns="DAV:"><D:Prop><D:getetag/></D:Prop></D:Propfind>
..\script\control\wwwroot\my\test2.ics
/my/test2.ics
..\script\control\wwwroot\my\test2.ics*
<?xml version='1.0' encoding='utf-8'?>
<D:multistatus xmlns='DAV:' xmlns:ns1='http://apache.org/dav/props/' xmlns:ns0='DAV:'>
<D:response xmlns:lp1='DAV:' xmlns:lp3='http://subversion.tigris.org/xmlns/dav/' xmlns:g0='DAV:' xmlns:g1='http://apache.org/dav/props/'>
<D:href>/my/test2.ics</D:href>
<D:Propstat>
<D:Prop>
<lp1:getcontentlength>118</lp1:getcontentlength>
<lp1:getcontenttype>text/xml</lp1:getcontenttype>
<lp1:creationdate>Tue, 06 May 2008 05:07:41 GMT</lp1:creationdate>
<lp1:getlastmodified>Tue, 06 May 2008 05:07:41 GMT</lp1:getlastmodified>
<lp1:resourcetype/>
<lp1:checked-in><D:href>/my/test2.ics</D:href></lp1:checked-in>
</D:Prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:Propstat>
<D:Propstat>
<D:Prop>
<g1:executable/>
<g0:checked-out/>
</D:Prop>
<D:status>HTTP/1.1 404 Not Found</D:status>
</D:Propstat>
</D:response>
</D:multistatus>

AcceptDirectory: .
AcceptDirectory: ..\CONF\pub\wwwroot
AcceptDirectory: ..\script\control\wwwroot
AcceptDirectory: ..\script\control\wwwroot\my
AcceptDirectory: ..\script\control\wwwroot
AcceptDirectory: ..\script\control\wwwroot\my
..\script\control\wwwroot\my\
UPLOADING:..\script\control\wwwroot\my\
<?xml version="1.0"?>
<D:Propfind xmlns="DAV:"><D:Prop><D:getetag/></D:Prop></D:Propfind>
..\script\control\wwwroot\my\test2.ics
/my/test2.ics
..\script\control\wwwroot\my\test2.ics*
<?xml version='1.0' encoding='utf-8'?>
<D:multistatus xmlns='DAV:' xmlns:ns1='http://apache.org/dav/props/' xmlns:ns0='DAV:'>
<D:response xmlns:lp1='DAV:' xmlns:lp3='http://subversion.tigris.org/xmlns/dav/' xmlns:g0='DAV:' xmlns:g1='http://apache.org/dav/props/'>
<D:href>/my/test2.ics</D:href>
<D:Propstat>
<D:Prop>
<lp1:getcontentlength>118</lp1:getcontentlength>
<lp1:getcontenttype>text/xml</lp1:getcontenttype>
<lp1:creationdate>Tue, 06 May 2008 05:07:41 GMT</lp1:creationdate>
<lp1:getlastmodified>Tue, 06 May 2008 05:07:41 GMT</lp1:getlastmodified>
<lp1:resourcetype/>
<lp1:checked-in><D:href>/my/test2.ics</D:href></lp1:checked-in>
</D:Prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:Propstat>
<D:Propstat>
<D:Prop>
<g1:executable/>
<g0:checked-out/>
</D:Prop>
<D:status>HTTP/1.1 404 Not Found</D:status>
</D:Propstat>
</D:response>
</D:multistatus>

AcceptDirectory: .
AcceptDirectory: ..\CONF\pub\wwwroot
AcceptDirectory: ..\script\control\wwwroot
AcceptDirectory: ..\script\control\wwwroot\my
AcceptDirectory: ..\script\control\wwwroot
AcceptDirectory: ..\script\control\wwwroot\my
imported
ac07.05.2008 04:54
А сам SunBird какую ошибку выдает при этом?
imported
ac07.05.2008 05:37
Верно, при существующем файле путь закачки может формироваться неправильно. Починю в ближайшее время. А пока попробуйте так: в файле acWEB\conf\http\PrePUT.rules.txt после строки
.( UPLOADING 2DUP TYPE CR добавьте строку:
2DROP " ..\CONF\pub\wwwroot\ics\{User}.ics" STR@

Тогда закачиваемый пользователем календарь будет попадать в общедоступную папку http://eserv/ics/ в файл username.ics , и обновления туда же.
imported
mixsv07.05.2008 08:22
После добавления указанной строки происходит следующее:

  • ошибки Sunbird больше не выдает, но и реального сохранения не происходит. К примеру, я хочу сохранит новое событие в календарь test2, расположенный в папке my. На эране в нужном месте календаря это событие появляется, в папке ics появляется календарь {User}.ics и все. После прохождения команды обновления удаленного календаря это событие с экрана пропадает.
Если подключить календарь {User}.ics то этого события нет и там.
Вот кусок лога:

UPLOADING:..\script\control\wwwroot\my\
Upload result ior:0
AcceptDirectory: .
AcceptDirectory: ..\CONF\pub\wwwroot
AcceptDirectory: ..\script\control\wwwroot
AcceptDirectory: ..\script\control\wwwroot\my
AcceptDirectory: ..\script\control\wwwroot
AcceptDirectory: ..\script\control\wwwroot\my
<?xml version="1.0"?>
<D:Propfind xmlns="DAV:"><D:Prop><D:getetag/></D:Prop></D:Propfind>
..\script\control\wwwroot\my\test2.ics
/my/test2.ics
..\script\control\wwwroot\my\test2.ics*
<?xml version='1.0' encoding='utf-8'?>
<D:multistatus xmlns='DAV:' xmlns:ns1='http://apache.org/dav/props/' xmlns:ns0='DAV:'>
<D:response xmlns:lp1='DAV:' xmlns:lp3='http://subversion.tigris.org/xmlns/dav/' xmlns:g0='DAV:' xmlns:g1='http://apache.org/dav/props/'>
<D:href>/my/test2.ics</D:href>
<D:Propstat>
<D:Prop>
<lp1:getcontentlength>118</lp1:getcontentlength>
<lp1:getcontenttype>text/xml</lp1:getcontenttype>
<lp1:creationdate>Tue, 06 May 2008 05:07:41 GMT</lp1:creationdate>
<lp1:getlastmodified>Tue, 06 May 2008 05:07:41 GMT</lp1:getlastmodified>
<lp1:resourcetype/>
<lp1:checked-in><D:href>/my/test2.ics</D:href></lp1:checked-in>
</D:Prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:Propstat>
<D:Propstat>
<D:Prop>
<g1:executable/>
<g0:checked-out/>
</D:Prop>
<D:status>HTTP/1.1 404 Not Found</D:status>
</D:Propstat>
</D:response>
</D:multistatus>
imported
ac09.05.2008 01:58
Значит им обязательно нужно, чтобы url публикации совпадал с подпиской, и перенаправление закачки в публичный каталог не подходит. Возвращаемся к исходной схеме :3140/my/

Исправление обновления существующего календаря:
http://www.eserv.ru/download/acWEB_8233.rar

Еще нужен как минимум простейший контроль типа (расширения) записываемого файла, чтоб скрипты не закачали. Например, такой — полный PrePUT:
.( UPLOADING:) 2DUP TYPE CR 2DUP =~ *.ics 0= | 2DROP " ..\CONF.orig\pub\wwwroot\ics\{User}.ics" STR@

Т.е. если закачивается не *.ics, то принудительно уводим его из /my/. Или так:
2DUP =~ *.ics 0= | " {s}.ics" STR@
(просто добавляем ему ics в качестве расширения).
imported
mixsv11.05.2008 11:50
Теперь сохраняет нормально. Но есть один ньюанс. Календарь сохраняется в любом случае, даже если в Sunbierd выставить параметр "только для чтения" для выбранного календаря.

Остался еще вопрос. Есть ли возможность разграничить права доступа к календарю: только для чтения и чтения-записи на уровне acWeb?
imported
svp12.05.2008 12:54
Добрый день.

mixsv спасибо за тему

ac нужна небольшая статья по работе с SB используем Active Desktop Calendar, хотим SB, очень.
imported
mixsv13.05.2008 08:21
svp пишет:
ac нужна небольшая статья по работе с SB используем Active Desktop Calendar, хотим SB, очень.


Статья о чем? Если просто о работе с SB, то тут все просто, а если про связку SB + acWEB + WebDav то можно конечно, только чуть позже, я сейчас в отпуске и за компьютер сажусь вечером раз в два дня.

Через недельку постараюсь в кратце описать как я это делал, если еще будет интересно.
imported
svp13.05.2008 09:14
mixsv

Статья о связке "SB + acWEB + WebDav"

Ждем, интересно, спасибо.
imported
ac13.05.2008 12:50
mixsv пишет: Теперь сохраняет нормально. Но есть один ньюанс. Календарь сохраняется в любом случае, даже если в Sunbierd выставить параметр "только для чтения" для выбранного календаря.
Может это "только для чтения" относится к редактированию в Sunbird?

mixsv пишет: Остался еще вопрос. Есть ли возможность разграничить права доступа к календарю: только для чтения и чтения-записи на уровне acWeb?

Да. Чтобы запретить запись конкретного URL'а через WebDav в каталог /my/, можно добавлять правила в acWEB\conf\http\MyOnRequest2.rules.txt
Например запрет записи admin.ics не-админу:
Uri /my/admin.ics | LoggedAs: admin 0= | Forbidden \EOF или запрет записи someuser.ics, если авторизован не как someuser:
URI " /my/{User}.ics" STR@ ~= 0= | Unauthorized "{User} calendars" \EOF
imported
ac13.05.2008 12:55
Точнее, еще проверка метода (чтение или запись) еще нужна:

ACTION =~ DavPutFile | URI " /my/{User}.ics" STR@ ~= 0= | Unauthorized "{User} calendars" \EOF
imported
alex112404.05.2009 14:07
Доброго времени суток
А
svp пишет: mixsv

Статья о связке "SB + acWEB + WebDav"

Ждем, интересно, спасибо.


может уже готова?
imported
ac04.05.2009 14:26
А в чем затруднение с WebDav в SunBird? Когда проверял, всё работало. По части Задач и Календарей мне больше нравится Lightning (http://www.mozilla.org/projects/calendar/lightning/ , https://addons.mozilla.org/ru/thunderbird/addon/2313 ) — с ним Thunderbird уже совсем как Outlook. Тоже поддерживает WebDav/CalDav, и тоже совместим с acWEB: в Eserv/3.35 и Eserv/4 публикация календарей в собственные папки пользователей должна получиться без доп.настроек.
imported
ac04.05.2009 23:25
Уточнение: MS Outlook и Windows Calendar (Vista) не поддерживают CalDav. Утверждение из предыдущего поста следует читать так "Lightning, как и Outlook, тоже поддерживает WebDav/iCal, и как SunBird поддерживает WebDav/CalDav/iCal.

А Eserv (любой версии, включая 2.x и даже 1.x) поддерживает публикацию iCal-календарей. WebDav для этого не нужен, т.к. команда PUT (используемая для публикации всеми календарными приложениями) появилась в HTTP еще до разработки DAV-расширений. Но все последние версии календарей для выяснения "а могу ли я публиковать в этот каталог" используют OPTIONS/PROPFIND, которые уже "dav'овые", поэтому в своё время потребовали доработки Eserv. В Eserv/2 реализован OPTIONS, но PROPFIND отсутствует. Т.е. SunBird'ом публиковать календари на Eserv/2 уже не получится. А на Eserv/3 и Eserv/4 получится.

Подписка на календари в случае iCal производится обычными GET-запросами, поэтому возможна во всех версиях Eserv. В CalDav календари хранятся в тех же iCal-форматах, но CalDav (в лице SunBird и Apple'овского календарей) предусматривает другой порядок подписки — указанием не конкретного календаря, а папки с календарями — список календарей в папке извлекается PROPFIND'ом, соответственно и поддержку версиями Eserv'а см. выше. Функционально с точки здения каледарного клиента между способом PUT/GET и PUT/PROPFIND разницы никакой (внутри один и тот же iCal). Технически второй способ слегка экономнее для клиента, но затратнее для серверных ресурсов (перебор содержимого каталога, каждое событие/задача попадает на сервере в отдельный ics-файл). В SunBird/Lightning при создании календарей лучше использовать iCal-метод, т.к. только в этом случае вы точно знаете, какой URL указать для подписки на тот же календарь в Windows Calendar или Outlook.
imported
psSnowman16.05.2009 13:22
Я попробовал смоделировать совместную работу с календарями iCalendar и CalDAV. Получилось. Но не все и не так как хотелось бы.
  1. При использовании iCalendar действует принцип, кто последний записал — та информация и записалась. Т.е. если один клиент добавил новое событие, а второй, еще не получив последнюю версию файла от сервера, тоже добавляет свое событие. В итоге, Событие первого затирается и остается только Событие второго.
  2. CalDAV вообще нормально работать отказался. Т.е. он конечно работает. Сохраняет События и задачи на сервер, но почему-то Sunbird их не показывает. Просто оставляет поле календаря девственно чистым.
  3. Подскажите. Причем п. 2 справедлив как для acWeb так и для IIS на Win Server 2003 Web EditionМожет кто уже сталкивался?
imported
ac17.05.2009 00:26
  1. C iCalendar предполагается несколько иная схема работы: у каждого свой календарь, только он в него добавляет события и задачи, поэтому на запись конфликтов не бывает. А для получения календарных данных от других людей (в общий сводный календарь) производится подписка на календари всех интересующих людей. Т.е. это что-то типа аггрегатора блогов, только с жестко заданной структурой элементов и другим визуальным представлением.
  1. Я знаю, в чем дело. Текущие версии стали использовать команду REPORT (вместо GET) для выборки конкретных элементов CalDAV-каталога. acWEB для совместимости уже подкручен, но в 3.35 этого патча еще нет, я с ним компилировал только acWEB из беты Eserv/4. Когда доберусь до основной рабочей машины (в понедельник ближе к вечеру) постараюсь собрать и выдать обновление acWEB.exe и для тройки.
Там в sunbird'овской реализации CalDAV недавно открылась еще одна проблема, которая врядли решаемая, т.к. скорее всего считается нормой (а жаль): если в одном каталоге перемешаны ics-файлы, опубликованные как в iCal-режиме, так и в CalDAV-режиме (на самом деле одной и той же командой PUT, т.e. для сервера-то "режим" без разницы и даже неизвестен), то при подписке на папку в CalDav-режиме — из iCal-календарей SunBird и Lightning показывает только первое событие, а остальные игнорирует. Потому что при добавлении событий в CalDav-режиме он каждое событие отправляет на сервер в виде отдельного файла — и в таком же виде ожидает обратно, не предполагая, что другие календарные клиенты (или тот же Sunbird в iCal-режиме) будут помещать туда файлы с несколькими событиями. Поэтому лучше не перемешивать, iCal и CalDAV, а выделять им отдельные каталоги: для общих календарей или списков задач, где всё в одной куче — использовать CalDAV, а для собственных todo и календарей, и для календарных клиентов, не понимающих CalDAV (т.e. MS*) — использовать iCal-файлы в собственных папках, и не пускать туда CalDAV.
imported
ac18.05.2009 04:06
Вот замена acWEB.exe для Eserv/3:
http://www.eserv.ru/download/acWEB_180509.rar
imported
psSnowman26.05.2009 21:24
Работает!
Но опять же имеется проблема. Apache, например, не дает перезаписать файл, пока не скачаешь последнюю версию этого файла. Т.е. если кто-то что-то записал в задание, другой не может добавить что-то свое пока не нажмет кнопочку Обновить. Насколько я понимаю, за подобное поведение отвечает модуль dav_lock acWeb, по крайней мере пока, таким функционалом не располагает. Есть ли такое в планах?
imported
ac26.05.2009 22:01
Это каким клиентом? SunBird блокировок не делает. И за аутлуком вроде не замечал... В acWEB команды LOCK/UNLOCK есть и на два режима блокировок (shared и exclusive) заглушки стоят. Если кто-то использует, то на сервере поддержку включить не проблема.

И, опять же, в CalDAV проблемы блокировок нет. И при описанном мною выше способе работы с iCal (у каждого _свой_ календарь, и каждый подписывается на календари интересующих его людей) тоже.
imported
Работает на Eserv/5.05555 (05.06.2016)