# 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 `/YYYY-MM-DD_HH-mm-ss/` - Fichiers : settings.json, clipboard.json, secrets.json (obfusqué), manifest.json - Setting `backup_path` configurable dans popup3