Registre des outils et dépendances externes #38
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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 :
PATH;Le module doit rester indépendant de GTK.
Contexte
Labfy Investigation utilisera progressivement plusieurs outils externes :
Ces outils ne seront pas tous installés sur chaque machine.
La cible Ubuntu de la gendarmerie peut également disposer :
Le code métier ne doit donc jamais supposer qu’un exécutable est disponible.
Périmètre
Ce ticket doit fournir :
ToolRegistry;PATH;Hors périmètre
Ce ticket ne doit pas encore :
dig,whois,curlouopenssl;--version;L’exécution contrôlée des programmes externes sera traitée dans un ticket dédié.
Fichiers attendus
Le
Makefiledevra être mis à jour pour compiler le module et son test.Contraintes générales
snake_case;tool_registry_outool_info_;system(),popen()ou équivalent./usr/bin/dig.Modèle de données
ToolRequirement
nvim.lsp.b_248_save BufWritePost
<buffer=248>
<Lua 3597: /usr/share/nvim/runtime/lua/vim/lsp.lua:943> [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
<buffer=249>
<Lua 3645: /usr/share/nvim/runtime/lua/vim/lsp.lua:943> [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
<buffer=252>
<Lua 3681: /usr/share/nvim/runtime/lua/vim/lsp.lua:943> [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
<buffer=255>
<Lua 2223: /usr/share/nvim/runtime/lua/vim/lsp.lua:943> [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
<buffer=259>
<Lua 3935: /usr/share/nvim/runtime/lua/vim/lsp.lua:943> [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
<buffer=262>
<Lua 3099: /usr/share/nvim/runtime/lua/vim/lsp.lua:943> [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
<buffer=273>
<Lua 4130: /usr/share/nv
Créer une énumération représentant l’importance d’une dépendance :
ToolAvailability
Créer une énumération représentant l’état de détection :
ToolRegistry
La structure doit rester opaque :
ToolInfo
La représentation d’un outil doit également être opaque ou exposée uniquement en lecture :
Un outil enregistré doit au minimum contenir :
Règles des champs
identifier
Identifiant interne stable et unique.
Exemples :
Il ne doit pas dépendre du nom du paquet de la distribution.
display_name
Nom compréhensible par l’utilisateur.
Exemples :
executable_name
Nom recherché dans le
PATH.Exemples :
resolved_path
Chemin absolu détecté.
Exemple :
Ce champ vaut
NULLlorsque l’outil est absent ou n’a pas encore été vérifié.detected_version
Version connue de l’outil.
Ce champ peut rester
NULLdans ce ticket. Le registre doit néanmoins pouvoir la mémoriser pour les tickets suivants.Domaine d’erreur
Créer un domaine d’erreur dédié :
Erreurs minimales :
Fonction attendue :
API publique attendue
L’API exacte peut être ajustée si une meilleure solution est justifiée, mais elle doit couvrir les opérations suivantes.
Cycle de vie
Enregistrement
Règles :
NULLet non vides ;UNKNOWN;NULL;NULL.Détection
Cette fonction doit vérifier tous les outils enregistrés.
Pour la recherche dans le
PATH, utiliser l’API GLib adaptée, par exemple :Règles :
AVAILABLE;MISSING;Consultation
Le comportement de propriété doit être documenté clairement.
Pour une première version, les pointeurs retournés peuvent être empruntés et rester valides jusqu’à la prochaine modification du registre ou jusqu’à sa destruction.
Version détectée
Règles :
NULLefface la version connue ;Cette fonction sera utilisée plus tard par le module chargé d’interroger les exécutables.
État global
Cette fonction retourne
TRUElorsqu’au moins un outil obligatoire est dans l’étatMISSING.Un outil obligatoire encore dans l’état
UNKNOWNne doit pas être considéré comme disponible.Une seconde fonction est recommandée :
Elle ne retourne
TRUEque lorsque tous les outils obligatoires sont explicitementAVAILABLE.Accesseurs de ToolInfo
Prévoir au minimum :
Les chaînes retournées sont empruntées et ne doivent jamais être libérées par l’appelant.
Implémentation interne recommandée
Le registre peut utiliser :
pour conserver l’ordre d’enregistrement.
Une recherche linéaire par identifiant est acceptable pour cette première version, car le nombre d’outils restera faible.
Une table de hachage pourra être ajoutée plus tard seulement si elle devient utile.
Le registre devient propriétaire de tous les outils enregistrés.
Chaque outil doit libérer :
Détection testable
Les tests ne doivent pas dépendre de la présence réelle de
dig,curl,opensslou d’autres outils.Le test doit créer un répertoire temporaire contenant un faux exécutable.
Exemple de stratégie :
fake_osint_tool;PATH;PATH;fake_osint_tool;tool_registry_refresh();PATHinitial ;Le test doit restaurer l’environnement même en cas d’échec d’une assertion intermédiaire.
Une fonction de préparation et une fonction de nettoyage de fixture sont recommandées.
Tests unitaires obligatoires
1. Construction vide
Vérifier :
2. Enregistrement valide
Vérifier :
UNKNOWN;NULL;NULL.3. Duplication des chaînes
Créer des chaînes dynamiques, enregistrer l’outil, puis libérer les chaînes originales.
Le registre doit conserver des valeurs valides.
4. Identifiant en double
Enregistrer deux outils avec le même identifiant.
Le second enregistrement doit échouer avec :
Le premier outil ne doit pas être modifié.
5. Arguments invalides
Tester au minimum :
NULL;NULL;GErrordéjà initialisé si le projet applique cette règle.6. Recherche par identifiant
Vérifier :
NULL;7. Outil disponible
Avec un faux exécutable placé temporairement dans le
PATH, vérifier :AVAILABLE;NULL;8. Outil absent
Avec un nom improbable, vérifier :
MISSING;NULL.Exemple :
9. Rafraîchissement successif
Vérifier qu’un outil peut passer :
puis :
après modification contrôlée du
PATH.10. Version
Vérifier :
NULL;11. Dépendances obligatoires
Tester les combinaisons :
Une dépendance optionnelle absente ne doit pas rendre l’état global invalide.
12. Destruction complète
Exécuter les tests avec les outils de vérification mémoire du projet.
Noms de tests suggérés
Makefile
Ajouter le nouveau module à la compilation principale.
Ajouter une cible :
La cible doit compiler au minimum :
avec GLib.
Ajouter le test à la cible globale de tests du projet.
Vérifications manuelles
Commandes attendues :
Puis, si une cible globale existe :
Aucun warning de compilation ne doit être toléré.
Vérification mémoire recommandée
Selon les outils déjà utilisés dans le projet :
Le test ne doit laisser aucune allocation définitivement perdue provenant du registre.
Les allocations internes conservées par GLib doivent être interprétées avec prudence.
Critères d’acceptation
Le ticket est validé lorsque :
PATH;MISSING;PATHoriginal est restauré après chaque test ;Résultat attendu
À la fin de ce ticket, le code suivant doit être conceptuellement possible :
Cet exemple décrit le comportement attendu. Il ne constitue pas une obligation d’organisation interne.
Suite prévue
Après validation de ce ticket :
GSubprocess;BackgroundTasketTaskManager;