Kalendář dostupný odkudkoliv?

Update: Webdav jsme opustili a přešli na DAViCAL: Kalendář pro každého: DAViCAL – opensource implementace CalDAV serveru.

Článek vyšel 2.1.2006 na serveru abclinuxu.cz.

Během posledních několika let jsem zkusil různé webové kalendáře, ale většinou jsem u nich moc dlouho nezůstal. Velké množství webových kalendářů používá vlastní formát pro uchovávání dat a případná změna aplikace znamená ztrátu všech údajů. Při poslední změně programu jsem se naštval a rozhodl se pro definitivní řešení – přechod na program s přenositelným formátem dat.

Zadal jsem si následující podmínky pro výběr vhodného kalendáře.

  • Dostupnost odkudkoliv
  • Možnost využít klasickou desktopovou grafickou aplikaci
  • Webový přístup ke kalendáři, stačí pouze pro čtení
  • Standardní formát pro uchovávání dat abych v budoucnosti neměl problámy s převodem do jiného programu
  • Bezpečný přístup ke kalendáři
  • Možnost zpřístupnit kalendář někomu dalšímu

Nakonec jsem si vybral následující řešení:

  • Formát dat: iCalendar
  • Způsob uložení: WebDAV přes HTTPS
  • Aplikace na desktop: Mozilla Calendar
  • Webový přístup: PHP iCalendar

Formát dat iCalendar je standard (RFC 2445) pro výměnu kalendářových dat. iCalendar je podporován většinou běžně používaných programů jako jsou Mozilla Calendar ( Mozilla SunBird), Microsoft Outlook, KOrganizer, Apple iCal, Ximian Evolution nebo třeba Lotus Notes.

p

WebDAV protokol nám umožní ukládat kalendář na web přímo z aplikace SunBird. Nelíbí se mi představa, že by se heslo ke kalendáři a vlastně celý můj kalendář potuloval po internetu v čistém textu, proto používám WebDAV přes HTTPS. WebDAV mám spuštěný na vlastním serveru. Pokud vlastní server nemáte a váš webhosting WebDAV nepodporuje, můžete využít například služby icalx, která slouží ke sdílení kalendářů.

Pro práci s kalendářem na desktopu si můžete vybrat z více apliakcí, já sem si zvolil program Mozilla Sunbird případně Mozilla Calendar. Samozřejmě můžete použít třeba KOrganizer, Evolution nebo třeba Outlook.

Pro webový přístup ke kalendáři použijeme program PHP iCalendar, je relativně jednoduchý na nastavení a rychle se v něm zorientujete.

Zapnutí podpory WebDAV v apache

Nebudu zde popisovat kompletní nastavení apache webserveru, od toho je oficiální dokumentace na httpd.apache.org. Ukázka konfigurace (jde o umístění a názvy souborů), kterou uvedu je z distribuce Debiana a platí pro webserver Apache 2.

Podpora WebDAV je v standardní součástí Apache. Aktivujeme ji přidáním modulu do konfigurace webserveru, to samé provedeme pro modul mod_userdir. Modul userdir nám umožní jednoduše nastavit pro každého uživatele adresář pro web, v našem případě pro kalendář.

cd /etc/apache2
ln -s mods-available/dav.load mods-enabled/
ln -s mods-available/dav_fs.load mods-enabled/
ln -s mods-available/dav_fs.conf mods-enabled/
ln -s mods-available/userdir.load mods-enabled/
ln -s mods-available/userdir.conf mods-enabled/

Nyní povolíme pro uživatelské adresáře WebDAV. Soubor /etc/apache2/mods-enabled/userdir.conf upravíme

<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                <IfModule mod_dav.c>
                        Dav On
                </IfModule>
                AllowOverride FileInfo AuthConfig Limit
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        </Directory>
</IfModule>

A na závěr restartujeme webserver

/etc/init.d/apache2 restart

Pokud vyrobíte v domácím adresáři uživatele (v mém případě uživatel tsunami) adresář public_html/ a nastavíte mu práva tak aby do něj mohl webserver přistupovat a číst, budete mít jeho obsah dostupný na http://server/~tsunami/.

 

Pro umístění kalendářů a povolení zápisu přes WebDAV si jako uživatel vyrobíme adresář ~tsunami/public_html/kalendar a nastavíme mu práva na 777. Pokud se vám nechce práva takhle blbě nastavovat, tak je nastavte na 770 a změňte skupinu toho adresáře na www-data nebo pod čím vám běží apache. Zápis přes webdav totiž probíhá pod uživatelem pod kterým běží webserver.

Aby nám nemohl každý kolemjdoucí lézt do kalendáře, je vhodné ho schovat za heslo.

order allow,deny
allow from all

AuthName "Kalendar"
AuthType Basic
AuthUserFile ~tsunami/public_html/kalendar/.htpasswd
AuthGroupFile /dev/null
require valid-user

Soubor s heslem pro uživatele tsunami vyvoříme utilitou htpasswd

vodik:/$ htpasswd -c ~tsunami/public_html/kalendar/.htpasswd tsunami
New password:
Re-type new password:
Adding password for user tsunami

Nastavení webserveru, které jsem zde ukázal jako příklad, je to nejjednodužší co může být, kdy uživatelé mají plná práva. Pokud chcete uživatele omezit, tak se zaměřte na volby <Limit> případně <LimitExcept>. Samozřejmě nemusíte mít nastavení v soubrou .htaccess, ale můžete vše napsat přímo do konfiguračních souborů apache.

Když už vám bude vše fungovat přes HTTP protokol, tak zkuste i HTTPS. Přece nechcete aby vaše kalendáře poletovaly po síti v plaintextu :-).

Zkouška WebDAV

Pro vyzkoušení přístupu na webdav použijeme program litmus.

[tsunami@vodik]$ litmus https://server/~tsunami/kalendar/ login heslo
-> running `basic':
 0. init.................. pass
 1. begin................. pass
 2. options............... pass
 .
 .
 .
 38. finish................ pass
<- summary for `locks': of 39 tests run: 36 passed, 3 failed. 92.3%
-> 1 warning was issued.
See debug.log for network/debug traces.

Test proběhl, ale nahlásil 3 chyby. Vzhledem k tomu, že to jsou chyby, které i nevadí, prohlásím webdav za správně nastavený :-). Pro přístup na webdav je možné použít řádkového klienta cadaver nebo namountovat vzdálený webdav jako filesystem. Pro přimountování je třeba nainstalovat davfs.

vodik:~# mount -t davfs https://server/~/tsunami/kalendar/ /mnt
Please enter the username for authentication with server
https://server/~tsunami/kalendar/ or hit enter for none.
Username: tsunami
Please enter the password to authenticate tsunami with server
https://server/~tsunami/kalendar/ or hit enter for none.
Password:
Server cerifticate could not be verified.
  presented for `server':
  Issuer:  server, Zdenek Burda, Prag, Czech Republic, CZ
  Subject: server, Zdenek Burda, Prag, Czech Republic, CZ
  Fingerprint: 8c:98:55:32:84:f1:5b:74:b2:cf:7f:d0:26:b8:23:6f:e7:d5:9e:f4
If you can't verify the fingerprint the server may be faked
or there may be a man-in-the-middle-attack!
I am not a coward and accept the certificate anyway [y,N]? y

Mozilla SunBird

 

Program Mozilla Calendar je dostupný jako rozšíření pro Mozilla Suite, případně Firefox a Thunderbird.
Pokud raději chcete úplně samostatnou aplikaci, můžete zkusit Mozilla SunBird. Další nastavení bude odpovídat SunBirdu, ale na Mozilla Calendar půjde určitě taky aplikovat.

Vytvoření kalendáře

Vzdálený kalendář se vytvoří pomocí „průvodce“. Začněte v menu File->New Calendar File, otevře se dialog, kde zvolíme vzdálený kalendář (Remote).

Dialog pro vytvoření nového kalendáře

Po potvrzení můžeme vybrat způsob jakým budeme ke kalendáři přistupovat a kde bude uložen. Zvolíme protokol WebDAV a jako místo kde bude kalendář napíšeme kompletní adresu https://server/~tsunami/kalendar/kalendar.ics. Kalendářů si samozřejmě můžete vyrobit víc, takže je vhodné zvolit dobré jméno.

Výběr protokolu a umístění pro nový kalendář

Poslední dialog umožní pojmenovat kalendář a zvolit barvu jakou se bude zobrazovat.

Pojmenování nového kalendáře

Po potvrzení se vás kalendář pravděpodobně zeptá na to zda se vám líbí SSL certifikát serveru na kterém je webdav a poté na login a heslo.

Po odklepnutí se mi ukázalo varování, že je kalendář pouze pro čtení (Read-only).

Chybova hlaska o read-only kalendari

Náprava je jednoduchá, prostě zrušíme Read-only ve vlastnostech daného kalendáře. Pravým tlačítkem myši klikněte v seznamu kalendářů na náš kalendář, zvolte Edit Calendar a v dialogu, který se otevře zrušte zatržení u Read-only.

Nyní můžete začít ládovat do kalendáře data. Pokud se rozhlédnete po internetu, najde zajímavé kalendáře. Jeden z nich (seznam státních svátků) najdete na stránce Filipa Molčana.

SunBird

Co s tím, když něco nefunguje?

Pokud vám něco nefunguje, zeptejte se ve fóru věnovanému kalendáři.

Webový přístup

Přístup přes web se hodí pokud nejste zrovna u svého počítače a nechte/nemůžete nastavit SunBird tak aby zobrazoval vaše kalendáře. Pro zobrazení kalendáře na webu použijeme zmiňovaný PHP iCalendar (aktuálně ve verzi 2.1).

PHP iCalendar rozbalte například do adresáře ~tsunami/public_html/kalendar/web/. Přesuňte se do adresáře s kalendářem, smažte adresář calendars a místo něj si vytvořte symlink na adresář ~tsunami/public_html/kalendar/.

$ cd ~tsunami/public_html/kalendar/web
rm -rf calendars
ln -s ../ calendars

Tím dosáhneme zveřejnění všech kalendářů, které si vyrobíme, na webu. Pokud potřebujete zveřejňovat pouze nějaké kalendáře, nemusíte mazat adresář calendars, ale můžete si do něj požadované kalendáře nalinkovat. Konfiguraci webového kalendáře můžete ovlivnit v souboru config.inc.php.

Webové rozhraní pro kalendář

Něco na závěr

Popsané řešení zřejmě nebude pro spoustu lidí dostačující, ale mě vyhovuje. Zlepšení vidím ve hodnějším nastavení práv pro WebDAV přístup ke kalendářům tak aby se daly sdílet jednotlivé kalendáře s různým oprávněním pro různé uživatele. Možná by se hodila i editace kalendáře přes web, třeba existuje vhodná webová aplikace, pokud o ní někdo víte, napište do diskuze.

Napsat komentář