Files
comi-odoo-ticketing/TRAVAIL.md
T

6.7 KiB

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.
  • Ajout des artefacts WAPT generes certificate.crt, manifest.sha256 et signature.sha256 dans .gitignore.

Correction protocole Odoo JSON-RPC

  • Analyse d'une erreur RPC.jsonrpc() missing 1 required positional argument: 'service' lors de wapt-get audit.
  • Remplacement du payload direct model/method/args par le protocole JSON-RPC Odoo standard :
    • service=common, method=authenticate pour obtenir le uid ;
    • service=object, method=execute_kw pour appeler helpdesk.ticket.search_read.
  • Ajout des champs odoo.database et odoo.username dans ticketing.ini.example.
  • Support optionnel de odoo.uid pour eviter l'authentification si l'identifiant utilisateur est deja connu.
  • Mise a jour des tests unitaires pour verifier les appels authenticate et execute_kw.

Ajustement WAPT/control

  • Passage de target_os de windows a all dans WAPT/control.
  • Incrementation de la version WAPT de 0.1.0-2 a 0.1.0-3.
  • Correction de version demandee : passage de 0.1.0-3 a 0.1-10 pour rattraper les increments precedents.
  • Attention : target_os fait partie des attributs signes, le paquet doit etre regenere/resigne avant publication.
  • Regle projet retenue : incrementer WAPT/control:version a chaque nouvelle version du paquet.

Notification Rocket.Chat plus detaillee

  • Recuperation de champs Odoo supplementaires par defaut : name, stage_id, partner_id, user_id.
  • Ajout de l'option odoo.fields pour ajuster les champs lus par search_read.
  • Ajout de l'option notification.max_tickets pour limiter le nombre de lignes detaillees dans Rocket.Chat.
  • Remplacement du message brut contenant seulement une liste d'IDs par un message avec nombre total, titre, statut, client, assigne, date courante et ancienne date quand disponible.
  • Incrementation de la version WAPT locale de 0.1-11 a 0.1-12.