chore: secure ticketing configuration
This commit is contained in:
+95
@@ -0,0 +1,95 @@
|
||||
# Journal de travail
|
||||
|
||||
Ce fichier consigne les interventions Codex sur le projet afin de garder une trace exploitable des analyses, decisions et suites a traiter.
|
||||
|
||||
## 2026-06-24
|
||||
|
||||
### Demande
|
||||
|
||||
- Analyser le projet.
|
||||
- Creer un README et le maintenir a jour.
|
||||
- Alimenter un fichier Markdown dedie au travail effectue.
|
||||
|
||||
### Analyse realisee
|
||||
|
||||
- Le depot contient un script WAPT principal `setup.py`.
|
||||
- Le script surveille les tickets Odoo Helpdesk via JSON-RPC.
|
||||
- Il compare les champs `id` et `write_date` avec un etat local `tickets_state.pkl`.
|
||||
- Il notifie Rocket.Chat via un webhook configure dans `rocket.ini`.
|
||||
- Le fichier `tickets_state.pkl` initial a ete inspecte avec `pickletools` sans charger le pickle comme code executable ; il contient actuellement un dictionnaire vide.
|
||||
- `.env` contient des chemins Windows vers l'environnement WAPT.
|
||||
|
||||
### Fichiers ajoutes
|
||||
|
||||
- `README.md` : documentation du projet, fonctionnement, prerequis, configuration, risques et ameliorations recommandees.
|
||||
- `TRAVAIL.md` : journal de travail maintenu par Codex.
|
||||
|
||||
### Points techniques identifies
|
||||
|
||||
- Bug bloquant probable dans `setup.py` : `tickets_updated.auppend(ticket_id)` doit etre corrige en `tickets_updated.append(ticket_id)`.
|
||||
- Secrets presents en clair :
|
||||
- cle API Odoo dans `setup.py` ;
|
||||
- webhook Rocket.Chat dans `rocket.ini`.
|
||||
- `pickle.load()` est sensible si le fichier d'etat peut etre modifie par une source non fiable.
|
||||
- `db` et `xmlrpc.client` semblent inutilises.
|
||||
- Le chemin de `tickets_state.pkl` est relatif au repertoire courant.
|
||||
|
||||
### Suites recommandees
|
||||
|
||||
1. Corriger la faute `auppend`.
|
||||
2. Sortir les secrets du depot.
|
||||
3. Remplacer l'etat pickle par JSON.
|
||||
4. Ajouter un test minimal sur la detection des tickets modifies.
|
||||
5. Verifier la conformite du payload JSON-RPC avec l'API Odoo reellement exposee.
|
||||
|
||||
### Modification configuration secrete
|
||||
|
||||
- Retrait de la cle API Odoo codee en dur dans `setup.py`.
|
||||
- Remplacement du webhook reel par des placeholders.
|
||||
- Centralisation de la configuration sensible dans `ticketing.ini.example`, copiee en prive sous le nom `ticketing.ini` :
|
||||
- `rocket.webhook_url`
|
||||
- `odoo.url`
|
||||
- `odoo.api_key`
|
||||
- `odoo.model`
|
||||
- `install()` copie le fichier INI modele vers `WAPT.private_dir/ticketing.ini` uniquement s'il n'existe pas deja, afin de ne pas ecraser une configuration renseignee sur la machine cible.
|
||||
- `audit()` charge maintenant l'URL Odoo et la cle API depuis le fichier INI prive.
|
||||
- `send_to_rocket()` charge maintenant le webhook depuis le fichier INI prive.
|
||||
- Correction du bug `tickets_updated.auppend(ticket_id)` en `tickets_updated.append(ticket_id)`.
|
||||
- Deplacement du fichier d'etat vers `WAPT.private_dir/tickets_state.pkl` pour eviter de dependre du repertoire courant.
|
||||
- Ajout d'une validation explicite des placeholders `CHANGE_ME...` pour eviter une execution avec une configuration non renseignee.
|
||||
- Ajout de `.gitignore` pour eviter de versionner un `ticketing.ini` rempli localement et un futur fichier d'etat runtime.
|
||||
|
||||
## 2026-07-24
|
||||
|
||||
### Analyse des ameliorations possibles
|
||||
|
||||
- Remplacer `pickle` par JSON pour le fichier d'etat runtime.
|
||||
- Extraire la recuperation Odoo, la comparaison d'etat et l'envoi Rocket.Chat dans des fonctions testables.
|
||||
- Ajouter des timeouts explicites aux appels HTTP Odoo et Rocket.Chat.
|
||||
- Faire echouer l'audit si l'appel Odoo echoue, afin d'eviter d'ecraser l'etat avec une liste vide en cas d'indisponibilite.
|
||||
- Utiliser `response.raise_for_status()` aussi pour l'appel Rocket.Chat.
|
||||
- Ajouter des tests unitaires sur la detection des tickets nouveaux ou modifies.
|
||||
- Retirer du depot le reliquat `tickets_state.pkl`, aujourd'hui remplace par l'etat stocke dans `WAPT.private_dir`.
|
||||
- Ajouter un fichier de controle WAPT si le depot doit etre un paquet complet.
|
||||
- Mettre en place une rotation des secrets deja presents dans l'historique Git.
|
||||
|
||||
### Mise en oeuvre des ameliorations
|
||||
|
||||
- Remplacement de l'etat runtime `tickets_state.pkl` par `tickets_state.json`.
|
||||
- Suppression de l'utilisation de `pickle` dans le code.
|
||||
- Ajout des fonctions testables :
|
||||
- `build_odoo_payload()`
|
||||
- `fetch_odoo_tickets()`
|
||||
- `load_tickets_state()`
|
||||
- `save_tickets_state()`
|
||||
- `build_tickets_state()`
|
||||
- `get_updated_ticket_ids()`
|
||||
- Ajout d'un timeout HTTP configurable via `http.timeout`, avec valeur par defaut a 30 secondes.
|
||||
- Durcissement de l'appel Odoo : les erreurs HTTP, les erreurs JSON-RPC et les reponses sans `result` font echouer l'audit au lieu de sauvegarder un etat vide.
|
||||
- Durcissement de l'appel Rocket.Chat avec `raise_for_status()`.
|
||||
- Ajout de `tests/test_ticketing.py` pour valider la comparaison des tickets et la lecture/ecriture JSON.
|
||||
- Suppression du reliquat `tickets_state.pkl` du repertoire projet.
|
||||
- Mise a jour de `README.md`, `ticketing.ini.example` et `.gitignore`.
|
||||
- Ajout de tests avec mocks `requests` sur `fetch_odoo_tickets()` et `send_to_rocket()`.
|
||||
- Ajout d'un fichier `WAPT/control` minimal.
|
||||
- Documentation du payload JSON-RPC Odoo attendu dans `README.md`.
|
||||
Reference in New Issue
Block a user