ultisuite-backend/project-plan/ultidrive.md

177 lines
7.4 KiB
Markdown

# Ultidrive
**Équivalent** : Google Drive
**Statut** : Partiel (API proxy WebDAV/OCS)
---
## Résumé
Frontend reproduisant à l'identique le comportement et l'interface de Google Drive, potentiellement comme frontend pour Nextcloud ou solution similaire déjà fonctionnelle.
## État d'implémentation réel (mai 2026)
### Déjà implémenté
- API backend montée sous `/api/v1/drive` (si Nextcloud activé).
- Endpoints list/upload/download/delete, create folder, move, create share.
- Client Nextcloud WebDAV/OCS intégré côté serveur.
### Partiel / incomplet
- Pas d'upload chunked gros fichiers.
- Couverture incomplète des cas drive (copy, corbeille, favoris, récents).
- Gestion quotas/permissions simplifiée non finalisée.
### Non commencé
- UX frontend Drive de production branchée backend réel.
- Édition collaborative docs/feuilles/présentations.
- Sync offline-first complète (résolution de conflits).
## Approche technique
L'idée est simple : on ne réinvente pas le stockage. On fournit une UX identique à Google Drive mais le backend de stockage est interchangeable :
| Mode de stockage | Description |
|------------------|-------------|
| **WebDAV** | Connecté à un serveur WebDAV (Nextcloud, ownCloud, etc.) |
| **S3-compatible** | Bucket S3, MinIO, Backblaze, etc. |
| **Nextcloud natif** | Ultidrive = frontend custom pour Nextcloud (API OCS/WebDAV) |
### Contrainte clé : montage local
Peu importe le backend, le stockage **doit pouvoir être monté comme un disque local** sur l'appareil de l'utilisateur (comme Google Drive ou Dropbox le permettent). Cela implique un client sync desktop (via Tauri ou en exploitant le client Nextcloud existant).
### Gestion des permissions
Les permissions doivent être **simples à gérer** — pas d'ACL complexes. Modèle inspiré de Google Drive :
- Propriétaire / Éditeur / Lecteur
- Partage par lien (public, restreint, expiration)
- Héritage des permissions parent (dossier → contenu)
### Option "frontend Nextcloud"
Si c'est plus simple, Ultidrive peut être **purement un frontend** pour Nextcloud :
- Nextcloud gère le stockage, la sync, les permissions, le versioning
- Ultidrive = interface custom (même codebase/stack que le reste de la suite)
- Avantage : on profite de l'écosystème Nextcloud (apps, clients, WebDAV) sans tout recoder
## Points de différenciation vs Google Drive
- Auto-hébergeable, stockage sous contrôle total
- Backend interchangeable (WebDAV / S3 / Nextcloud)
- Montage local natif comme un vrai disque
- Interface identique à Google Drive (migration sans friction)
- Chiffrement côté client optionnel (zero-knowledge)
- Automatisations à l'upload (OCR, classification IA, webhooks)
## Fonctionnalités
### Core
- [ ] Upload / download fichiers et dossiers
- [ ] Arborescence, favoris, récents, corbeille
- [ ] Recherche full-text (contenu des documents)
- [ ] Prévisualisation (images, PDF, vidéos, docs)
- [ ] Versioning (historique des versions)
### Partage & collaboration
- [ ] Partage par lien (public, protégé par mot de passe, expiration)
- [ ] Partage avec utilisateurs/groupes (lecture / écriture / admin)
- [ ] Édition collaborative temps réel (docs, tableurs, présentations)
- [ ] Commentaires sur fichiers
### Sync & montage
- [ ] Montage local comme disque (type Google Drive / Dropbox)
- [ ] Client desktop sync (Tauri ou Nextcloud client natif)
- [ ] WebDAV natif
- [ ] Sync sélective (dossiers choisis)
- [ ] Offline-first avec résolution de conflits
### Intégration suite
- [ ] Pièces jointes Ultimail sauvegardées dans Drive
- [ ] Fichiers joints aux événements Agenda
- [ ] Stockage médias Ultiphotos
- [ ] Partage dans Ultimeet (présentation)
## Intégration Nextcloud — étude technique
### APIs disponibles (confirmé)
| Opération | API Nextcloud | Endpoint |
|-----------|---------------|----------|
| Lister fichiers | WebDAV PROPFIND | `/remote.php/dav/files/{user}/` |
| Upload | WebDAV PUT | `/remote.php/dav/files/{user}/{path}` |
| Upload gros fichiers | Chunked v2 | `/remote.php/dav/uploads/{user}/` (chunks 5MB-5GB) |
| Download | WebDAV GET | `/remote.php/dav/files/{user}/{path}` |
| Créer dossier | WebDAV MKCOL | `/remote.php/dav/files/{user}/{path}` |
| Déplacer/copier | WebDAV MOVE/COPY | Headers Destination |
| Supprimer | WebDAV DELETE | Standard |
| Créer un partage | OCS POST | `/ocs/v2.php/apps/files_sharing/api/v1/shares` |
| Modifier partage | OCS PUT | `.../shares/{id}` |
| Partage public | WebDAV | `/public.php/dav` (depuis NC 29) |
### Permissions — mapping simple confirmé
Nextcloud utilise un système bitwise simple qui mappe directement sur notre modèle :
| Permission | Bit | Mapping Ultidrive |
|------------|-----|-------------------|
| Read | 1 | Lecteur |
| Update | 2 | Éditeur |
| Create | 4 | Éditeur |
| Delete | 8 | Éditeur |
| Share | 16 | Propriétaire |
| All | 31 | Propriétaire |
Types de partage supportés : user (0), group (1), public link (3), email (4), federated (6).
Options : `password`, `expireDate` (YYYY-MM-DD), `publicUpload`.
### Montage local — solution retenue : rclone
| Plateforme | Méthode | Dépendance |
|------------|---------|------------|
| Linux | `rclone mount` via FUSE | libfuse3 |
| macOS | `rclone mount` via macFUSE | macFUSE |
| Windows | `rclone mount` via WinFsp | WinFsp |
Avantages de rclone vs client Nextcloud Desktop :
- Plus stable (le VFS Nextcloud est expérimental sur Linux)
- Supporte WebDAV ET S3 avec la même commande
- VFS caching configurable (mode off/minimal/writes/full)
- Bundlable dans l'app Tauri comme sidecar
Stratégie pour Tauri : rclone embarqué en sidecar, lancé/arrêté par l'app, configuration gérée programmatiquement.
### Déploiement Nextcloud headless (API-only)
Nextcloud peut tourner en mode backend pur :
- Image Docker FPM (pas d'interface web servie directement)
- Reverse proxy qui route uniquement `/remote.php/dav`, `/ocs/`, `/public.php/dav`
- L'UI Nextcloud n'est jamais exposée aux utilisateurs — seul Ultidrive est le frontend
```
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐
│ Ultidrive │────▶│ Reverse Proxy │────▶│ Nextcloud │
│ (frontend) │ │ (nginx) │ │ (PHP-FPM) │
└──────────────┘ └──────────────────┘ └──────────────┘
│ │
│ ┌────┴────┐
Routes exposées : │ Storage │
/remote.php/dav/* │ (S3/local)
/ocs/v2.php/* └─────────┘
/public.php/dav/*
```
## Briques technologiques envisagées
| Besoin | Option retenue | Alternatives |
|--------|----------------|--------------|
| Backend fichiers | Nextcloud (PHP-FPM headless) | ownCloud Infinite Scale |
| Protocole sync | WebDAV (natif NC) | — |
| Object storage | MinIO / S3-compatible (via NC external storage) | Stockage local |
| Montage local | rclone (sidecar Tauri) | client NC Desktop |
| Édition collaborative | OnlyOffice, Collabora Online | — |
| Recherche contenu | Meilisearch (indexation custom) | NC full-text search app |
| Auth | Partagée via Ulti Suite (OIDC → NC) | — |