| cache | ||
| clientip | ||
| config | ||
| kdrive | ||
| webdavfs | ||
| .gitignore | ||
| config.example.toml | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| README.md | ||
kdrive-webdav-proxy
Proxy WebDAV pour Infomaniak kDrive. Permet d'accéder à un kDrive depuis n'importe quel client WebDAV (Finder, Explorateur Windows, davfs2, Cyberduck, etc.).
Build
go build -o kdrive-webdav-proxy
Utilisation
Avec des flags / variables d'environnement
./kdrive-webdav-proxy --token "VOTRE_TOKEN" --drive-id "123456"
Ou :
export KDRIVE_TOKEN="VOTRE_TOKEN"
export KDRIVE_DRIVE_ID="123456"
./kdrive-webdav-proxy
Avec un fichier de configuration
./kdrive-webdav-proxy --config config.toml
Le chemin du fichier peut aussi être fourni via la variable d'environnement KDRIVE_CONFIG.
Voir config.example.toml pour un exemple documenté.
Configuration
Priorité
Les sources de configuration s'appliquent dans cet ordre (la dernière gagne) :
- Valeurs par défaut
- Fichier de configuration TOML
- Variables d'environnement
- Flags CLI
Options
| Option | Clé TOML | Variable d'env | Flag | Défaut | Description |
|---|---|---|---|---|---|
| Adresse d'écoute | addr |
KDRIVE_ADDR |
--addr |
:8080 |
Adresse et port d'écoute |
| Token API | token |
KDRIVE_TOKEN |
--token |
Token API kDrive (requis) | |
| ID du drive | drive_id |
KDRIVE_DRIVE_ID |
--drive-id |
ID du drive kDrive (requis) | |
| ID racine | root_id |
KDRIVE_ROOT_ID |
--root-id |
"1" |
ID du dossier racine à exposer |
| TTL du cache | cache_ttl |
KDRIVE_CACHE_TTL |
--cache-ttl |
30s |
Durée de vie du cache métadonnées |
| Préfixe URL | prefix |
KDRIVE_PREFIX |
--prefix |
/ |
Préfixe du chemin WebDAV |
| Utilisateur | auth_user |
KDRIVE_AUTH_USER |
--auth-user |
kdrive |
Nom d'utilisateur Basic Auth |
| Mot de passe | auth_pass |
KDRIVE_AUTH_PASS |
--auth-pass |
Mot de passe Basic Auth | |
| Proxies de confiance | trusted_proxies |
[] |
IPs, CIDRs ou hostnames des reverse proxies | ||
| Fichier de config | KDRIVE_CONFIG |
--config |
Chemin vers le fichier TOML |
Authentification
L'authentification HTTP Basic Auth est activée dès que auth_pass est renseigné. Si le champ est vide, le proxy est accessible sans authentification.
Les requêtes OPTIONS (utilisées par les clients WebDAV pour la découverte) ne sont pas soumises à l'authentification.
Reverse proxy et trusted_proxies
Quand le proxy tourne derrière un reverse proxy (nginx, Caddy, etc.), l'IP vue par le serveur est celle du reverse proxy. Le paramètre trusted_proxies permet de récupérer la vraie IP du client depuis les headers X-Real-IP ou X-Forwarded-For.
Formats acceptés
# IP unique
trusted_proxies = ["10.0.1.50"]
# Bloc CIDR
trusted_proxies = ["10.0.0.0/8", "172.16.0.0/12"]
# Hostname (résolu par DNS à chaque requête, supporte les IP dynamiques)
trusted_proxies = ["mon-proxy.duckdns.org"]
# Mix
trusted_proxies = ["10.0.1.50", "mon-proxy.duckdns.org"]
# Tout accepter (développement uniquement)
trusted_proxies = ["*"]
Les headers sont lus dans cet ordre : X-Real-IP, puis X-Forwarded-For (première IP). Si la source de la connexion n'est pas dans trusted_proxies, les headers sont ignorés.
Exposer un sous-dossier
Par défaut, le proxy expose la racine du drive (root_id = "1"). Pour n'exposer qu'un sous-dossier spécifique, récupérez l'ID du dossier dans kDrive et renseignez-le :
root_id = "12345"
Cache
Les métadonnées des fichiers et dossiers sont mises en cache en mémoire avec un TTL configurable (cache_ttl). Le cache est automatiquement invalidé lors des opérations d'écriture (création, suppression, renommage, déplacement).
Exemple de déploiement
# config.toml
addr = "0.0.0.0:8080"
token = "VOTRE_TOKEN_API"
drive_id = "123456"
auth_user = "kdrive"
auth_pass = "un-mot-de-passe-fort"
trusted_proxies = ["mon-proxy.duckdns.org"]
./kdrive-webdav-proxy --config config.toml
Le client WebDAV se connecte ensuite à http://kdrive:un-mot-de-passe-fort@adresse:8080/.