97 lines
3.3 KiB
Markdown
97 lines
3.3 KiB
Markdown
# 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
|