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.

No related posts.

12 Responses to Kalendář dostupný odkudkoliv?

  1. Borek says:

    Nedávno jsem řešil stejný problém a došel jsem k podobnému řešení. Jen dvě malé poznámky: Sunbird umí kromě WebDAVu kalendáře z webu tahat také přes FTP, což může být vhodné pro běžné hostingy. No a zadruhé, brzy bude možné používat plnohodnotný read/write webový přístup ke kalendáři díky projektu WebCalendar.

  2. Brunno says:

    Vďaka za skvelý návod. Veľmi mi pomohol. Dlho som rozmýšlal nad niečim podobným, ale nikdy som sa k tomu nedostal. Až podľa tohoto návodu. Ešte mi ale chýba jedna vec, Mám mobilný telefón SE D750, podporuje synchronizáciu cez syncml, neriešili ste aj niečo také? Ďakujem….

  3. tsunami says:

    Bohužel nemám telefon, který by měl použitelný kalendář, takže jsem nic podobného neřešil.

  4. jedla says:

    Zdravím, jsem v linuxu celkem lama. Mám nainstalovaný Debian 3.1, i když tohle teď zkouším na mašině kde mám pokusně 4.0 a zkouším tohle zplodit, ale skončil jsem už na editaci souboru /etc/apache2/mods-enabled/userdir.conf. Protože se mi to dělá lépe edituju soubory přes Midnight Commande a F4, ale před tímto souborem je vykřičník a je červený, což nejspíš znamená, že se používá, no každopádně mě to do něj nepustí, resp. mi to píše, že to není ani soubor ani adresář :( , prosím poraďte. Děkuji Petr Jelen.

  5. tsunami says:

    Mám pocit, že MC ukazuje symlinky na neexistující soubory nebo spíš symlinky které nemůže uživatel následovat protože na to nemá práva červeně a s vykřičníčkem…

  6. Dragonn says:

    Dobrý den,
    používám Ubuntu 7.04 založené na Debianu. Měl jsem ten samý problém, až jsem zjistil, že příkazy pro vytvoření symlinků od autora mi nefungují tak jak mají. Musel jsem vytvořit symlink s absolutní adresou, takže pro ty kterým se v bashi zobrazují červené symlinky (nefunkční) nebo tedy v mc s vykřičníkem, použijte spíše toto

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

    Poté bych se chtěl zeptat sám za sebe, při testování webdavu mi napíše chybu:

    1. begin…………….. FAIL (Could not create new collection `/~dragonn/kalendar/litmus/’ for tests: 500 Internal Server Error
    Server must allow `MKCOL /~dragonn/kalendar/litmus/’ for tests to proceed)

    Jak to mám povolit?

  7. Dragonn says:

    Rád bych ještě dodal, že používam pouze http server a ne https

  8. tsunami says:

    Má apache právo zapisovat do adresáře ~dragonn/public_html/kalendar/?

  9. Dragonn says:

    No, :o ), v tom je ten největší problém, já nevim v čim to je. Dokonce jsem skončil s tim, že ten adresář patří uživateli s Apachem, chmod nastaven na 777… takže prostě všechno pro všechny, ale nemůžu na to přijít. Dokonce jsem pro jistotu i zrušil zaheslování složky, ale pořád nic. Nevím co s tím :o ( …

  10. pelish says:

    Do httpd.conf pridejte nasledujici dve radky. Jedna se o umisteni look file a Time out tohoto souboru…

    DAVLockDB /tmp/DAVLock
    DAVMinTimeout 600

    po restartu apache se mi jiz hlaska „500 Internal Server Error“ prestala zobrazovat a vse jede jak ma.

  11. Zenker says:

    Ahoj, nevíze zda již byla nějak vhodně vyřešena otázka přístupových práv pro uživatele – tedy prostě aby nebylo možné měnit data jiným uživatelům?

  12. tsunami says:

    Už od začátku používání kalendáře uloženého na weebdav serveru mám ten server nastaven tak aby si uživatelé nemohli navzájem měnit data. Je to normální konfigurace apache… Co konkrétního bys chtěl vědět? Pro kolik uživatelů to řešíš?

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*

Můžete používat následující HTML značky a atributy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>