This commit is contained in:
2026-01-17 13:10:10 +01:00
parent 17fad55e9f
commit 3a6d443b3f
25 changed files with 2698 additions and 1 deletions

96
CLAUDE.md Normal file
View File

@@ -0,0 +1,96 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Projet
ClipCoffre est une extension GNOME Shell (GNOME 47+, Debian 13) combinant :
- Un gestionnaire de secrets (user/password) avec obfuscation XOR+base64
- Un gestionnaire de clipboard (favoris + historique)
UUID : `clipcoffre@gilles`
Dépôt : https://gitea.maison43.duckdns.org/gilles/ClipCoffre.git
## Commandes de développement
```bash
# Installation de l'extension dans GNOME
./install.sh
# Compilation manuelle du schéma GSettings
glib-compile-schemas schemas/
# Redémarrage de GNOME Shell (X11 seulement)
# Alt+F2 puis taper "r"
# Logs de l'extension
journalctl -f -o cat /usr/bin/gnome-shell
# Activer/désactiver l'extension
gnome-extensions enable clipcoffre@gilles
gnome-extensions disable clipcoffre@gilles
```
## Architecture
```
extension.js # Point d'entrée (init/enable/disable)
├── src/ui/
│ ├── panelButton.js # Icône topbar + dispatch click_mode (unifie/separe)
│ ├── popupMain.js # Mode unifié avec onglets
│ ├── popupSecrets.js # Popup secrets (popup1)
│ ├── popupClipboard.js # Popup clipboard (popup2)
│ └── popupSettings.js # Popup réglages (popup3)
├── src/services/
│ ├── secretService.js # CRUD secrets + encode/decode passwords
│ └── clipboardService.js # Gestion favoris/historique
├── src/storage/
│ ├── settings.js # Wrapper GSettings
│ ├── jsonStore.js # Helpers lecture/écriture JSON + permissions
│ ├── secretsStore.js # Obfuscation XOR + gestion key.json/secrets.json
│ └── clipboardStore.js # Persistance favoris/historique
└── schemas/
└── org.gnome.shell.extensions.secretclipboard.gschema.xml
```
## GSettings
Schema ID : `org.gnome.shell.extensions.secretclipboard`
| Clé | Type | Description |
|-----|------|-------------|
| `history_size` | int | Limite historique clipboard (défaut: 50) |
| `show_passwords` | bool | Afficher mots de passe en clair (défaut: false) |
| `click_mode` | string | `unifie` ou `separe` |
## Stockage des données
Chemin : `~/.local/share/gnome-shell/extensions/clipcoffre@gilles/data/`
- `secrets.json` - Secrets obfusqués (perms 0600)
- `key.json` - Clé d'obfuscation générée au 1er lancement (perms 0600)
- `clipboard.json` - Favoris et historique
Sécurité MVP : obfuscation XOR+base64 avec clé locale (pas un vrai chiffrement). TODO: migrer vers libsecret/GNOME Keyring.
## Conventions GJS/GNOME Shell
- Imports : `const { Gio, St, GLib } = imports.gi;`
- Modules internes : `Me.imports.src.module.SubModule`
- Export : `var ModuleName = { Class };`
- Ne jamais loguer de mots de passe ou secrets
## Tests
Pas de tests automatisés. Checklist manuelle dans `MANUAL_TESTS.md`.
## Spécifications fonctionnelles
### Modes de clic (click_mode)
- **unifie** : clic gauche → popover avec onglets Secrets/Clipboard
- **separe** : clic gauche → Secrets, clic droit → Clipboard
### Fonctionnalité backup (à implémenter)
- Icône "document-save-symbolic" dans l'en-tête
- Export dans `<backup_path>/YYYY-MM-DD_HH-mm-ss/`
- Fichiers : settings.json, clipboard.json, secrets.json (obfusqué), manifest.json
- Setting `backup_path` configurable dans popup3