Dossier personnel de l'élève monté comme lecteur réseau : rclone sert le dossier local, l'authentification est déléguée au portail via auth_request Nginx (mêmes identifiants que la connexion), sans nouveau système de comptes. Nettoyé par la purge RGPD comme les autres données d'élève. Corrige au passage un vrai bug d'isolation trouvé en testant avec deux comptes jetables : rewrite injectait la variable posée par auth_request_set, mais rewrite s'exécute dans une phase Nginx antérieure à cette variable, donc toujours vide - un élève pouvait lire le fichier d'un autre en devinant son nom. Corrigé par une location à regex nommée + proxy_pass. Détails : ADR 0008. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
27 lines
1.2 KiB
Django/Jinja
27 lines
1.2 KiB
Django/Jinja
# Géré par Ansible (rôle portail) — ne pas modifier à la main.
|
|
# Bloc C (CLAUDE.md) : dossier de l'élève monté comme lecteur réseau.
|
|
# N'écoute qu'en local (127.0.0.1) : Nginx authentifie (délégué au portail)
|
|
# et restreint chaque élève à son sous-dossier avant de relayer ici — voir
|
|
# ansible/roles/portail/templates/nginx-portail.conf.j2 et
|
|
# App\Http\Controllers\WebdavAuthController.
|
|
[Unit]
|
|
Description=Serveur WebDAV (rclone) pour le dossier des élèves — Syllabus
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=www-data
|
|
Group=www-data
|
|
# --dir-cache-time : sans ça, les dossiers créés par Laravel (un par élève,
|
|
# en dehors de rclone) restent invisibles jusqu'à 5 minutes (la valeur par
|
|
# défaut) — constaté le 2026-10-14, un nouveau dossier élève répondait 404
|
|
# tant que rclone ne l'avait pas découvert lui-même.
|
|
ExecStart=/usr/bin/rclone serve webdav {{ portail_dossier_app }}/storage/app/webdav --addr 127.0.0.1:{{ portail_port_webdav }} --no-modtime --vfs-cache-mode off --dir-cache-time 1s
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
NoNewPrivileges=true
|
|
ProtectSystem=strict
|
|
ReadWritePaths={{ portail_dossier_app }}/storage/app/webdav
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|