# 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) | — |
