Internet est un réseau de télécommunication par lequel lequel transitent des informations structurées autour de protocoles tels que http, pop, smtp, ftp, … Il y en pour tous les goûts.
Récemment, je me suis intéressé à WebDAV pour un projet. Étonnement : cette technologie est moins répandue que dans mes souvenirs.
WebDav
WebDAV, Web-based Distributed Authoring and Versioning, est un protocole déjà ancien (1996) et curieusement peu connu. Il permet pourtant une chose essentielle : écrire sur le Web, au lieu de seulement surfer (c’est-à-dire seulement lire).
WebDAV est une extension du HTTP. Au-delà des GET et POST qui sont au centre de la navigation web, WebDAV rajoute les verbes PUT, DELETE, COPY, PROPFIND, … Il permet de simplifier la gestion de fichiers avec des serveurs distants. WebDAV offre la possibilité de récupérer, déposer, synchroniser et publier des fichiers (et dossiers) rapidement et facilement. Son objectif principal est de rendre possible l’écriture à travers le web, et pas seulement la lecture de données.
Il donne ainsi la possibilité à plusieurs utilisateurs d’éditer le contenu d’un dossier web simultanément et de gérer les droits d’accès aux fichiers (ou dossiers), en verrouillant momentanément les fichiers et dossiers édités1.
Dans mes souvenirs, j’avais utilisé dans la première décennie des années 2000 cette technologie sur un serveur mutualisé OVH. Manque de chance, l’hébergeur ne supporte plus cette fonctionnalité sur les mutus2 … A l’heure où fleurissent les solutions de cloud personnel à l’image de Cozy et d’OwnCloud, c’est bien dommage que WebDav n’ait pas fait son retour sur l’infrastructure mutualisée d’OVH.
Du côté des mutualisés chez 1and1, c’est ambiance surprise. La fonctionnalité est indiquée comme supportée, mais ne finit par afficher que des erreurs 500. D’après le SAV, ça ne marche tout simplement pas !
SabreDav
Après m’être fait à l’idée que mes hébergeurs n’offraient pas le support de WebDav, j’ai fini par tomber sur SabreDav, un serveur WebDav écrit en PHP, supportant également CalDAV (pour les agendas) et CardDav (pour les carnets d’adresse).
Après quelques tests, j’ai fini par réussir à faire fonctionner SabreDav et rendre opérationnel une connexion authentifiée avec WebDav. L’installation a été réalisée sur un mutualisé 1and1. SabreDav propose plusieurs solutions pour sauvegarder les comptes utilisateurs. Je n’ai réussi qu’à réaliser l’authentification au travers d’une liste des identifiants contenus dans un fichier. Pour la solution utilisant une base Sqlite, je suis surement passé à côté de quelque chose, mais je n’ai pas réussi à atteindre la base.
SabreDav est un excellent produit, d’autant qu’il est prévu nativement pour être implanté dans d’autres produits (OwnCloud l’utilise par exemple). Cependant, bien que la documentation soit plutôt complète et que des fichiers d’exemples soient proposés, il manque souvent le point de détail qui fait que l’on gagnerait un temps fou en compréhension des paramétrages.
Quelques tips autour de l’installation de SabeDav
Pour commencer, voici l’arborescence de mes dossiers (à disposer l’emplacement de /serveur/sabre/dav/ à votre convenance) :
Dans /serveur/sabre/dav se trouvent l’ensemble des documents et bibliothèques du programme. Dans /serveur/sabre/dav/exemples il faut récupérer fileserver.php et le placer au niveau du répertoire racine (ici /serveur/).
Comme l’indique la documentation, il faut créer les répertoires public (là où seront stockés les fichiers de l’utilisateur), tmpdata ou data en fonction du script utilisé (servira de stockage de travail au script – par exemple aux bases sql d’identifiants).
Il vous faudra créer un fichier .htdigest à placer où vous voulez (moi je l’ai déposé à la racine du répertoire /serveur/). Il permettra de stocker les identifiants.
Dans fileserver.php il y a 4 choses à porter à votre attention :
- date_default_timezone_set à configurer en fonction de vos besoins
- définir et créer à votre convenance $publicDir = ‘public’; et $tmpDir = ‘tmpdata’; si ce n’est pas déjà fait
- Décommenter et définir $baseUri. Dans mon cas : $baseUri = ‘/serveur/fileserver.php’;
- Indiquer où se trouve /vendor/autoload.php’ . Dans mon cas : require_once ‘sabre/dav/vendor/autoload.php’;
- Et définir le chemin de .htdigest. Dans mon cas : $authBackend = new \Sabre\DAV\Auth\Backend\File(‘.htdigest’);
Dans le cas où vous voudriez utiliser une base sqlite ou MySql pour gérer les identifiants (et que ça fonctionne chez vous), le script de création de l’architecture de la table se trouve dans /serveur/sabre/dav/examples/sql. N’ayant pas trouvé d’interface de gestion des utilisateurs, j’ai manipulé les données de la Bdd Sqlite avec SqliteBrowser. Pour MySQL, PhpMyAdmin fera parfaitement le job.
Les mots de passe et leur subtilité
Elément important et bien documenté, je ferai un rapide rappel ici. A l’inverse de bon nombre de scripts php que j’ai pu utiliser (PhpBB, wordpress, …), ce n’est pas le hash MD5 du mot de passe qui est stocké, mais le hash d’une formule plus complexe :
md5('your_username:un_tocken:password')
Le tocken le plus communément utilisé dans l’univers de Sabre Dav est … SabreDAV
Dans mon cas, chacune des lignes de mon fichier .htdigest (1 profil par ligne) a la forme suivante :
username:SabreDAV:hash_de_la_formule_magique
Exemple : foo:SabreDAV:5790c3784a79a018d1186528df520e11
.Htaccess
Alors qu’il m’aura fallu que quelques minutes pour rendre fonctionnel le serveur webdav sans authentification, c’est bien cette dernière qui a été mon plus grand souci.
Comme évoqué je n’ai pas réussi à lancer une authentification au travers d’un référentiel de comptes intégrés à une base Sqlite.
Pour rendre fonctionnel celle utilisant .htdigest il m’a fallu ajouter quelques lignes dans un .htaccess :
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>
Laisser un commentaire