jqCalDAV, un client CalDAV web 2.0🔗

Posted by Médéric Ribreux 🗓 In blog/ Sysadmin/

#free software #web

Introduction

Cette fois, je vais vous présenter une application web 2.0 (parce qu'elle utilise jquery) qui permet à un navigateur web d'attaquer un serveur CalDAV. Les geeks étant déjà excités par ce programme, je vais toutefois prendre un peu de temps pour expliquer de quoi il s'agit !

CalDAV, c'est quoi ?

CalDAV est un protocole de synchronisation d'agenda sur Internet. Il s'appuie sur le protocole WebDAV (le truc qui permet à un serveur HTTP d'écrire des fichiers) ce qui lui apporte de nombreuses fonctionnalités dont, succinctement: le chiffrement des communications par TLS (HTTPS), la gestion des collections, l'accès en lecture-écriture et la gestion des droits (ACL). Sans rentrer dans les méandres du protocole (je ne suis pas Stéphane Bortzmeyer), retenez qu'il est normé et qu'il est décrit par le RFC 4791.

L'intérêt de CalDAV est d'offrir de la gestion d'agenda sur Internet et de le faire en passant par des canaux qui ne sont souvent pas filtrés par défaut: une requête CalDAV est une requête HTTP qui passe sur le port 80 ou 443. Si vous disposez d'un serveur Internet qui dispose d'un service CalDAV, vous pouvez donc gérer votre agenda depuis n'importe quel endroit (connecté bien entendu): à la maison, au bureau, chez votre maman, à l'étranger ou sur un point d'accès Wifi ouvert.

De la gestion d'un agenda

Car la gestion d'un agenda est particulièrement importante pour l'organisation. Pour ma part, je n'ai qu'un seul agenda (papier) qui centralise tout: je ne fais pas de différence entre le boulot et le privé. J'ai constaté que dans la pratique, séparer les deux est très pénible. D'une part, les deux agendas ne sont pas forcément accessibles partout. Bien souvent, celui du bureau n'est pas accessible en dehors des locaux de votre structure de travail. D'autre part, le boulot impacte souvent l'organisation du privé et vice-versa (sauf pour ceux qui ne savent pas gérer les priorités et pour qui le boulot prend finalement l'ascendant sur le reste). Par exemple, vous aurez, ainsi, du mal à rendre votre projet pour la semaine prochaine si vous avez noté dans votre agenda privé que vous deviez rendre visite à votre maman (qui habite loin) pendant cet intervalle.

Pour résumer, si on veut bien gérer son temps et ses activités, il est important de tout concentrer en un endroit accessible quasiment en permanence: c'est pour ça que je trimballe mon agenda papier au boulot et à la maison. C'est également pour ça que je n'ai, pour l'instant, pas travaillé sur un système d'agenda électronique: la saisie de l'information implique d'avoir un ordinateur ou quelque-chose qui s'en rapproche toujours sous la main. N'ayant pas de téléphone portable (par choix et parce que je peux m'en passer), j'ai renoncé à l'agenda électronique. Du moins, pour le moment…

Néanmoins, il est toujours intéressant de voir ce que la technique permet et il est souvent nécessaire de refaire un bilan de temps de temps, histoire de voir si un dispositif ultra-génial ne changerait pas la donne. D'où l'objet de cet article.

Serveurs CalDAV libres

Pour tester jqCalDAV qui est un client, j'ai dû mettre en œuvre des serveurs CalDAV. Vu que cette activité de test de logiciels ne m'est pas rémunérée, je n'allais pas me lancer dans des tests de serveurs propriétaires. Je me suis donc tourné vers le libre. Pour gagner encore plus de temps, je me suis appuyé sur ce que pouvait m'offrir mon système d'exploitation, c'est-à-dire Debian. Dans cette distribution, il y a deux serveurs qui sortent un peu du lot. Le premier se nomme Davical, le second Radicale. Les deux, comme nous allons le voir par la suite, ont des philosophies très différentes.

Commençons avec Davical. Celui-ci se veut être la référence en matière de CalDAV. Il existe depuis de nombreuses années et s'interface avec de nombreux clients. Il est clairement destiné à une organisation qui souhaite mettre en place un service d'agenda électronique pour l'ensemble de ses membres. Davical est donc orienté gestion "lourde". Il est codé en PHP (pas forcément super, mais on fait avec) et utilise le SGBDR PosgreSQL pour gérer tout ce qui doit être conservé. Pour déployer Davical, il faut donc:

Pour résumer, rien qui ne soit à la portée d'un administrateur système. Mais, que ce soit pour un compte unique (genre un type qui a une FreedomBOX pour lui tout seul) ou pour une boîte de 100 personnes, l'effort de mise en place est quasiment identique ! C'est donc plutôt du lourd.

Radicale a une philosophie tout autre. D'abord, il est codé en Python et est très léger (compter moins de 500ko pour les deux paquets qui permettent de l'installer). Ensuite, l'enregistrement des données se fait dans des fichiers: pas besoin de SGBDR pour tout ça ! Tout de suite, ça va plus vite…

Radicale pousse même le bouchon en ayant juste un serveur qui fonctionne out-of-the-box en espace utilisateur (forcément sur un port supérieur à 1024, c'est-à-dire 5232 par défaut). On est clairement mieux dans l'esprit FreedomBox avec un déploiement facile, même si la gestion multi-utilisateur est assez simple à mettre en œuvre.

Mais Radicale a un défaut à relativiser: il ne gère pas toute la norme CalDAV. Pour les clients les plus courants, ça ne pose aucun problème: les développeurs se sont concentrés sur les parties du protocole qui permettent aux clients les plus courants de fonctionner. Pour les clients plus exigeants, ça se complique. Néanmoins, je pense que Radicale peut évoluer positivement et s'améliorer, comme le bon vin (avec du code forcément).

Les clients CalDAV

Après avoir jeté un oeil rapide aux serveurs CalDAV, intéressons-nous aux clients. C'est en effet la partie la plus émergée de l'iceberg: celle avec laquelle l'utilisateur interagit.

Pour résumer, il y en a une foultitude. Le plus connu est l'extension Lightning pour Thunderbird qui est la cible principale en matière de gestion d'agenda de la fondation Mozilla. Globalement, il s'agit d'un plugin pour thunderbird (qui fonctionne également pour icedove) qui permet d'afficher et de modifier un agenda CalDAV (d'autre procotoles sont supportés). À noter qu'il existe également Sunbird (Iceowl chez Debian) qui est un client lourd dédié à la gestion de l'agenda mais son développement tend à diminuer au profit de Lightning.

Il existe aussi, des clients web qui sont souvent intégrés à des CMS ou des "suites" de gestion personnelles (PIM). Je n'ai pas testé ces derniers: ils sont complexes à mettre en œuvre si on ne dispose pas déjà d'une installation des plateformes sus-citées.

Néanmoins, j'ai remarqué la présence d'un client Ajax basé sur jQuery dont l'objectif est de gérer un ou plusieurs agendas à partir d'un navigateur web en HTML5 et ce, de manière complètement autonome. En cherchant un peu, j'ai cru comprendre qu'il s'agissait d'un projet jeune mais prometteur. De plus, cette approche colle bien avec les principes de gestion d'agenda énoncés plus haut: un agenda disponible partout. Rien n'empêche en effet, de coller ce client web sur le serveur HTTP de votre FreedomBox et de gérer votre agenda de partout, sans rien d'autre qu'un accès Internet (voire un accès uniquement à HTTP) et un navigateur Web. Ce client se nomme jqCalDAV et il est publié sous licence MIT.

Installation de jqCalDAV

Pour commencer, sachez que j'ai extraordinairement galéré pour faire fonctionner jqCalDAV (pratiquement une journée de travail). Mon problème venait de jQuery (qui est imbitable pour un néophyte) et surtout du serveur que j'utilisais: Radicale. Retenez donc que si vous voulez utiliser jqCalDAV, il vous faut Davical (et tout le bordel d'installation qui va avec).

En tant que client CalDAV, je croyais stupidement qu'il fallait renseigner l'emplacement du serveur CalDAV et que le tour était joué. Mais jQuery ne gère pas bien les redirections vers des ports (celui de radicale est 5232 par défaut) et le client ne se lançait jamais même en utilisant les modules Apache mod_rewrite ou mod_proxy pour lutter contre cette contrainte. En termes de diagnostics, jqCalDAV ne faisait aucune requête réseau après le login/mot de passe… donc pas facile de voir où ça coinçait. J'ai fini par trouver que le problème venait de jQuery après une longue bataille avec Firebug.

Ensuite, Radicale ne fonctionne pas avec jqCalDAV, car il renvoie des mauvais chemins (par exemple, il ne semble pas gérer l'URL d'accès à l'agenda principal) et du coup, jqCalDAV pointe vers une ressource qui n'existe pas. Après avoir galéré, je me suis résolu à tester un autre serveur CalDAV: Davical. Dans ce cas, tout s'est très bien déroulé et j'ai pu (enfin) avoir accès à l'interface de jqCalDAV. À noter que le site web ne présente pas de capture d'écrans ni de démo.

Voici donc, quelques screenshots (qui n'existent pas sur le site web officiel) (pour ceux qui fréquentent LinuxFR, il s'agit de jolies Nimages):

jqCalDAV screenshot 1
jqCalDAV screenshot 1

jqCalDAV screenshot 2
jqCalDAV screenshot 2

jqCalDAV screenshot 3
jqCalDAV screenshot 3

jqCalDAV screenshot 4
jqCalDAV screenshot 4

L'interface est à peu près réussie et, dans tous les cas, très prometteuse. Par exemple, la sélection des mois/semaines est vraiment très graphique et plutôt efficace: c'est une échelle à déplacer sur le côté. Pas très intuitif mais vraiment facile à utiliser une fois le mécanisme compris.

La coloration dynamique des évènements est également intéressante même si je pense que les éléments indiqués comme "busy" devraient rester figés pour une meilleure lecture. La gestion des champs supplémentaires rend assez bien.

Bien entendu, le style de l'application mériterait d'être amélioré, de même que la gestion de la suppression rapide des champs de texte et le choix des dates pour lequel, une vue de type calendrier serait parfaitement adaptée. Mais, en dehors de la traduction de l'interface, je dois dire que je n'ai pas apporté de patches…

Pour résumer, jqCalDAV est à peu près mature pour le mettre en place sur une machine auto-hébergée. Le summum serait de rendre Radicale compatible avec. Mais c'est quelque-chose de complexe à mettre en œuvre, car il faut voir ce qui plante dans jqCalDAV et même si c'est du Javascript, je trouve que c'est bien complexe à débugguer.

Conclusion

La solution Radicale+jqCalDAV serait vraiment bien adaptée à l'auto-hébergement ou à des machines type FreedomBOX qui ont un spectre d'utilisateurs assez restreint. DaviCAL fonctionne, mais je trouve que c'est une usine à gaz: il impose un SGBDR et une gestion des comptes un poil complexe. Ce n'est clairement pas intéressant, en termes de temps passé à l'administration et dans la facilité d'installation, de demander autant de paramétrages. Radicale a de ce côté un très bon potentiel.

jqCalDAV est un outil prometteur qui gagne à être connu. Il permet en effet de se rapprocher de la règle: un seul agenda accessible très facilement. Un simple navigateur web et un accès Internet (les deux vont souvent de pair) suffisent dans ce cas. Pas besoin d'installer un client lourd sur une machine qui ne vous appartient pas; pas de configuration et de création de session et de configuration.

Pour terminer, mon intuition me penche à considérer que jqCalDAV n'est pas encore l'outil ultime de gestion d'agenda. Il faut, en effet, pouvoir gérer l'aspect "offline" ce qui ne peut se faire qu'avec un outil dédié qui remplacerait l'agenda papier… en étant moins lourd à porter ! Un autre projet sans doute.