Licence Publique Générale GNU Version 2
L'objectif du module WebDAV pour Drupal est de permettre avant tout l'édition et la sauvegarde des nodes (billets, blogs, etc.) à partir d'un véritable éditeur HTML, à distance, sans copier-collés, et sans passer par l'interface WEB.
Techniquement, une bonne partie du travail a été réalisée grâce au module PHP Pear::HTTP_WebDAV_Server. Le développement de ce dernier semblant être figé, j'ai du commencer à le modifier pour le faire évoluer. La bonne question est donc de savoir si la licence PHP du module Pear est suffisamment compatible avec la GPL v2 de Drupal pour laisser les sources dans le module...
Ce module Drupal s'appuie donc sur cette librairie pour ajouter une mécanique Module Drupal, une couche de simplification du protocole WebDav pour finir par une "WebDAV API" relativement simple à implémenter.
L'idée d'un API WebDAV est née il y a plus d'un ans suite une discussion avec Nick Vahalik qui bossait à l'époque avec moi sur le projet. Le but d'origine était de fournir un mapping quasi direct de WebDAV sur des hools. Aujourd'hui c'est devenu une abstraction de WebDav beaucoup plus simple à implémenter.
Cette API permet donc à quiconque de rapidement de monter sur l'arborescence WebDav une branche spécifique (taxonomie, fichiers, commentaires, etc.).
Toutes les fonctions WebDAV prises en charge par PEAR donnent ainsi lieu à la possibilité pour un module d'implémenter le hook correspondant. L'API est cependant une version abstraite du protocole DAV, évitant de rentrer trop dans ses finesses.
Du coup, la gestion des nodes est un module à part entière utilisant WebDAV API. Il prend en charge la gestion des droits et les verrous, le renommage du titre, l'édition (lecture et sauvegarde) du contenu, la suppression et la création. Je n'ai pas bien vu l'intérêt d'implémenter la copie de node...
D'un point de vue utilisateur, ce module accroche à la racine webdav (http://mon_serveur/webdav), un dossier DAV nommé nodes contenant autant de sous-dossier qu'il y de type de nodes. Dans chacun de ces dossiers, nous avons un dossiers par node d'un type donnée, portant le titre comme nom. Ainsi créer un nouveau dossier revient à créer un node, en supprimer à détruire un node, et le renommer à changer le titre du node.
Si l'on va dans le dossier du node, il y a pour l'instant un unique fichier nommé content.html. Il suffit de l'éditer pour éditer le contenu du node. Chaque sauvegarde donne lieu à la création d'une révision (paramétrable). De même est paramétrable la manière dont est vue un node (texte, HTML, code source) en fonction de son format d'entrée. Ainsi il est possible de voir un commentaire comme un fichier .txt et un node comme un .html.
Par ce module, il est aussi possible de directement poser des attachements dans un node, d'en supprimer, etc.
DavFS2 permet de monter un système de fichiers WebDAV comme n'importe quel système de fichier. Il utilise la librairie Neon comme Litmus. Comme tous le client qui imaginer qu'il s'agit d'un système de fichier réel, il ne sait pas détruire le node.
User-Agent : davfs2/1.3.3 neon/0.28.3
| Client | Statut |
|---|---|
| Keep Alive | OK |
| Authentification | OK |
| Session | N/A |
| Compression | N/A |
| Naviguer | X |
| Créer un node (MKCOL) | X |
| Lire un contenu (GET) | X |
| Sauver un contenu (PUT) | X |
| Créer un fichier | X |
| Détruire un fichier | X |
| Renommer un node | X |
| Supprimer un node |
User-Agent : cadaver/0.23.2 neon/0.28.3
| Client | Statut |
|---|---|
| Keep Alive | OK |
| Authentification | OK |
| Session | N/A |
| Compression | N/A |
| Naviguer | X |
| Créer un node (MKCOL) | X |
| Lire un contenu (GET) | X |
| Sauver un contenu (PUT) | X |
| Créer un fichier | X |
| Détruire un fichier | X |
| Renommer un node | X |
| Supprimer un node | X |
C'est un début de support qui fonctionne au minima. Il est globalement très mais alors très lent car pas très optimisé dans ses requêtes. Il aussi plante assez régulièrement. Pour le debugger il faut lancer /usr/lib/gvfsd --replace de sorte à avoir les traces. Pour en avoir plus, il faut exporter avant une variable GVFS_HTTP_DEBUG avec comme valeur all, body ou header.
Sinon il supporte mal les Redirection 301 lorsqu'il demande une ressource sans le dernier slash et qu'on le redirige gentiment vers la bonne URL.
Enfin la suppression pose elle un petit soucis car il n'apprécie pas que le dossier soit non vide. Autoriser la suppression des éléments virtuels (genre files, content.html) n'aide pas car le bougre vérifie que tout est bien détruit par un propfind avant de détruire la racine.
User-Agent : gvfs/0.99.7.1
| Client | Statut |
|---|---|
| Keep Alive | N/A |
| Authentification | OK |
| Session | N/A |
| Compression | N/A |
| Naviguer | X |
| Créer un node (MKCOL) | X |
| Lire un contenu (GET) | X |
| Sauver un contenu (PUT) | X |
| Créer un fichier | X |
| Détruire un fichier | X |
| Renommer un node | X |
| Supprimer un node |
Alors Dolphin/KIO forment de loin le meilleur client WebDAV que j'ai testé. Basiquement tout fonctionne mais surtout de manière très rapide. Et pour cause, c'est le seul avec DAVExplorer à prendre en charge la compression et le seul tout court à utiliser les sessions (cookies). Maintenant je le trouve assez moche et au final KIO est moins générique que le sera GIO lorsque ce dernier sera finalisé.
User-Agent : mozilla/5.0 (compatible; konqueror/4.1; linux) khtml/4.1.1 (like gecko)
| Client | Statut |
|---|---|
| Keep Alive | N/A |
| Authentification | OK |
| Session | N/A |
| Compression | N/A |
| Naviguer | X |
| Créer un node (MKCOL) | X |
| Lire un contenu (GET) | X |
| Sauver un contenu (PUT) | X |
| Créer un fichier | X |
| Détruire un fichier | X |
| Renommer un node | X |
| Supprimer un node |
Voilà le UserAgent le plus "ouf" que j'ai jamais vu : microsoft data access internet publishing provider protocol discovery... Et pour ce prix, il n'y a pas la version...
Mais à la limite c'est presque le plus efficace avec cadaver. Il ne génère pas des tonnes de traffic et tout fonctionne, ou presque. La suppression pose un problème non encore identifié (le même que Gnome ?) et lorsqu'il y a un espace dans un nom de ressource "dossier" (ex. un titre de node), le dossier se retrouve dupliqué à l'intérieur de lui-même...
User-Agent : microsoft data access internet publishing provider protocol discovery
| Client | Statut |
|---|---|
| Keep Alive | OK |
| Authentification | OK |
| Session | N/A |
| Compression | N/A |
| Naviguer | X |
| Créer un node (MKCOL) | X |
| Lire un contenu (GET) | X |
| Sauver un contenu (PUT) | X |
| Créer un fichier | X |
| Détruire un fichier | X |
| Renommer un node | X |
| Supprimer un node |
Pour autant que je puisse en juger avec un MacOS dans un VmWare (c'est trèèès lent!!), ça marche plutôt pas mal. Juste un détail, si les locks ne sont pas activés, le file système (/Volumes/webdav) est monté en lecture seule...
User-Agent : webdavfs/1.3 (01308000) darwin/8.1.0 (x86)
| Client | Statut |
|---|---|
| Keep Alive | OK |
| Authentification | OK |
| Session | N/A |
| Compression | N/A |
| Naviguer | X |
| Créer un node (MKCOL) | |
| Lire un contenu (GET) | X |
| Sauver un contenu (PUT) | X |
| Créer un fichier | X |
| Détruire un fichier | ? |
| Renommer un node | |
| Supprimer un node |
Alors Ok, il est très moche mais c'est le seul client à ma connaissance qui supporte la compression. Le résultat est une navigation très rapide sur les grands volumes de ressources. A se demander pourquoi les autres ne le font pas.
Maintenant il semble que l'outil ait des soucis s'il y a des espaces en début de nom sur le renommage et la destruction. Ceci dit c'est aussi le cas des montages DAV de Windows.
User-Agent : uci dav explorer/0.91 rpt-httpclient/0.3-3e
| Client | Statut |
|---|---|
| Keep Alive | OK |
| Authentification | OK |
| Session | N/A |
| Compression | OK |
| Naviguer | X |
| Créer un node (MKCOL) | X |
| Lire un contenu (GET) | X |
| Sauver un contenu (PUT) | X |
| Créer un fichier | X |
| Détruire un fichier | X |
| Renommer un node | X |
| Supprimer un node | X |
La version 1.0 est en cours de développement et comme je n'ai pas porté la v0.5 sous Drupal 6.x, il n'y a pour ainsi dire pas de version stable. Vous pouvez aller sur la page des sources de la version "trunk" pour la tester, prendre connaissance des changements ou donner vos idées d'amélioration.
- répondre
Armetiz , le 18 September, 2008 - 22:11Vraiment... Tip top, comme toujours.
J'ai passé mon blog de Drupal à Wordpress pour des raisons un peu de découverte et de non prise de tête, mais... Qu'est-ce qu'il peut manque le Drupal pour les aspects exotiques...
A quand de nouveau contrat de prestation Web où je pourrai utiliser, et ré-utiliser Drupal.
- répondre
Ulhume, le 19 September, 2008 - 08:13@armetiz merci
Il est beau ton thème d'ailleurs c'est toi qui l'a réalisé ?
Poster un nouveau commentaire