# TICKET-036 — Registre des outils et dépendances externes ## Statut À faire ## Priorité Haute ## Objectif Créer un module central capable de représenter les outils externes utilisés par Labfy Investigation et de déterminer s’ils sont disponibles sur la machine. Ce registre deviendra la source unique permettant à l’application de savoir : - quel outil est demandé par une fonctionnalité ; - si cet outil est obligatoire ou optionnel ; - sous quel nom il est recherché dans le `PATH` ; - où se trouve son exécutable ; - si sa version est connue ; - pourquoi une fonctionnalité doit être désactivée lorsqu’une dépendance manque. Le module doit rester indépendant de GTK. --- ## Contexte Labfy Investigation utilisera progressivement plusieurs outils externes : - outils DNS ; - outils RDAP et WHOIS ; - outils TLS ; - outils HTTP ; - outils de traitement de métadonnées ; - outils de conversion ou d’analyse ; - adaptateurs spécialisés OSINT. Ces outils ne seront pas tous installés sur chaque machine. La cible Ubuntu de la gendarmerie peut également disposer : - de dépôts limités ; - d’une liste de paquets spécifique ; - d’outils installés dans des chemins non standards ; - de versions différentes de celles présentes sur Arch Linux. Le code métier ne doit donc jamais supposer qu’un exécutable est disponible. --- ## Périmètre Ce ticket doit fournir : 1. un registre opaque `ToolRegistry` ; 2. une représentation opaque ou privée d’un outil enregistré ; 3. l’enregistrement d’un outil à partir de métadonnées stables ; 4. la détection de l’exécutable dans le `PATH` ; 5. la mémorisation du chemin détecté ; 6. la distinction entre dépendance obligatoire et optionnelle ; 7. la recherche d’un outil par identifiant ; 8. l’énumération des outils enregistrés ; 9. la détection des dépendances obligatoires manquantes ; 10. un champ permettant de mémoriser une version lorsqu’elle sera détectée ; 11. des tests unitaires sans dépendre des outils réellement installés sur la machine. --- ## Hors périmètre Ce ticket ne doit pas encore : - créer d’interface GTK ; - lancer une commande OSINT réelle ; - interpréter la sortie de `dig`, `whois`, `curl` ou `openssl` ; - exécuter automatiquement `--version` ; - installer des paquets ; - modifier les dépôts du système ; - télécharger un outil manquant ; - utiliser une commande construite sous forme de chaîne shell ; - contenir une liste définitive des outils OSINT de l’application. L’exécution contrôlée des programmes externes sera traitée dans un ticket dédié. --- ## Fichiers attendus ```text include/core/tool_registry.h src/core/tool_registry.c tests/test_tool_registry.c ``` Le `Makefile` devra être mis à jour pour compiler le module et son test. --- ## Contraintes générales - Standard C17. - Compilation avec : ```text -Wall -Wextra -Wpedantic -Werror ``` - Utiliser GLib. - Respecter les conventions du projet : - fichiers en `snake_case` ; - fonctions préfixées par `tool_registry_` ou `tool_info_` ; - noms de variables explicites ; - structure publique opaque ; - aucune variable globale mutable ; - aucune dépendance à GTK. - Ne jamais construire une commande shell. - Ne jamais appeler `system()`, `popen()` ou équivalent. - Ne pas coder en dur un chemin comme `/usr/bin/dig`. --- ## Modèle de données ### ToolRequirement nvim.lsp.b_248_save BufWritePost [vim.lsp: textDocument/didSave handler] Modifié la dernière fois dans ~/.dotfiles/nvim/.config/nvim/init.lua (run Nvim with -V1 for more details ) nvim.lsp.b_249_save BufWritePost [vim.lsp: textDocument/didSave handler] Modifié la dernière fois dans ~/.dotfiles/nvim/.config/nvim/init.lua (run Nvim with -V1 for more details ) nvim.lsp.b_252_save BufWritePost [vim.lsp: textDocument/didSave handler] Modifié la dernière fois dans ~/.dotfiles/nvim/.config/nvim/init.lua (run Nvim with -V1 for more details ) nvim.lsp.b_255_save BufWritePost [vim.lsp: textDocument/didSave handler] Modifié la dernière fois dans ~/.dotfiles/nvim/.config/nvim/init.lua (run Nvim with -V1 for more details ) nvim.lsp.b_259_save BufWritePost [vim.lsp: textDocument/didSave handler] Modifié la dernière fois dans ~/.dotfiles/nvim/.config/nvim/init.lua (run Nvim with -V1 for more details ) nvim.lsp.b_262_save BufWritePost [vim.lsp: textDocument/didSave handler] Modifié la dernière fois dans ~/.dotfiles/nvim/.config/nvim/init.lua (run Nvim with -V1 for more details ) nvim.lsp.b_273_save BufWritePost