Sharepoint Office365 sur Linux (Webdav/Davfs) avec des fichiers accentués
Suite de l'aventure avec Sharepoint !
Je me suis rendu compte que les répertoires et les fichiers nommés avec des accents ne sont pas montés par Davfs. Le problème vient bien sur de Microsoft qui n'est pas foutu d'implémenter un protocole en suivant les standards ! Le support technique est une vraie plaie et ne veut pas comprendre que le problème vient de chez eux…
En effet, les spécifications WebDAV indiquent que les caractères spéciaux (espace compris) doivent être encodés en %XXX
. Par exemple, on doit retrouver %C3%A9
à la place de é
. Or, Sharepoint ne remplace que les espaces (%20
). Voici une partie de la réponse HTTP formée par Sharepoint pour un fichier nommé "éducation.pdf" :
<D:href>https://foo.sharepoint.com/sites/bar/Documents%20partages/éducation.pdf</D:href>
Alors que ça devrait être sous cette forme :
<D:href>https://foo.sharepoint.com/sites/bar/Documents%20partages/%C3%A9ducation.pdf</D:href>
Du coup, j'ai du travaillé sur un correctif et voici une POC qui corrige le problème. Elle consiste à faire passer les requêtes HTTP de DavFS à travers un proxy qui fera le boulot de Sharepoint : encoder les caractères en question !
Je travaille sur ma machine de dev dans ~/www/repo/sharepoint-webdav-proxy
.
J'ai choisi le proxy mitmproxy car on peut modifier les requêtes et les réponses à la volé.
Les binaires de mitmproxy sont placés dans ./bin/
. Si vous lancez une première fois bin/mitmproxy
, des certificats SSL seront créés dans ~/.mitmproxy/
.
Configuration de DavFS :
$ sudo cp ~simon/.mitmproxy/mitmproxy-ca-cert.pem /etc/davfs2/certs/
Dans /etc/davfs2/davfs2.conf
, j'ai ajouté :
[/mnt/sharepoint/]
proxy 127.0.0.1:8118
trust_ca_cert /etc/davfs2/certs/mitmproxy-ca-cert.pem
use_proxy 1
[...]
Adapteur WebDAV :
Dans src/webdav-adapter.py
:
Edit : la version colorée affiche mal certain caractères. Consulter la version texte.
Lancement du proxy :
./bin/mitmdump --mode regular --listen-host 127.0.0.1 --listen-port 8118 -s ./src/webdav-adapter.py
Une fois tout ça réalisé, mount.davfs
va pouvoir monter les répertoires/fichiers accentués.