177 lines
7.4 KiB
Markdown
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) | — |
|