Espaces personnels et favoris par utilisateur (stockage)

- DATA_DIR/.users/<id>/home : espace personnel, Store complet (historique,
  miniatures, corbeille, tags, partages), exposé sous le préfixe virtuel .perso.
- DATA_DIR/.users/<id>/favoris : un lien symbolique relatif par favori, exposé
  sous .favoris. Les liens suivent renommages et déplacements (y compris entre
  espaces) pour tous les utilisateurs et disparaissent à la suppression.
- Identifiant : email OIDC normalisé (UserID), utilisateur « local » sinon.
- Reprise unique des favoris de .meta.json à la création d'un espace.
- Les espaces personnels signent leurs liens de partage avec la clé du Store
  principal ; Tout révoquer couvre aussi les espaces personnels.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0174sFqehj4uGqJHQZvWy1gn
This commit is contained in:
claude BotandClaude Opus 5.5 committed 2026-10-08 10:24:55 +02:00
1 parent c7a43ff12b
commit 781fc8f5f5
3 files changed
+944 -2

No files matched your search

+6
View File
@@ -50,6 +50,11 @@ type Entry struct {
Tags []string `json:"tags,omitempty"`
Favorite bool `json:"favorite,omitempty"`
// Dossiers virtuels et favoris (spaces.go).
Special string `json:"special,omitempty"` // "favoris" ou "perso" : entrée de la racine
Link string `json:"link,omitempty"` // nom du lien dans le dossier Favoris
Broken bool `json:"broken,omitempty"` // favori dont le schéma d'origine a disparu
}
// Store est un dépôt de schémas enraciné dans un répertoire.
@@ -68,6 +73,7 @@ type Store struct {
sharesMu sync.Mutex // liens de partage (share.go)
shareKey []byte // clé HMAC ; nil : pas encore chargée
fixedKey bool // clé imposée par SHARE_SECRET
keyFrom *Store // espace personnel : clé de signature du Store principal
}
// New crée le répertoire racine si besoin et renvoie un Store.