Créer le modèle opaque EvidenceRecord
#45
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?
Créer le modèle opaque
EvidenceRecordContexte
Labfy Investigation sait désormais créer et ouvrir une enquête, conserver une session SQLite active, afficher l’arborescence, gérer des tâches en arrière-plan et détecter les outils externes sans bloquer GTK.
L’objectif métier est l’import d’une preuve originale depuis l’interface. Cet import ne doit cependant pas être codé directement dans la vue. Il dépend d’abord d’un modèle métier indépendant de GTK, SQLite et du système de fichiers.
Pipeline prévu :
Objectif
Créer un type opaque
EvidenceRecordreprésentant les informations persistantes d’une preuve numérique importée dans une enquête.Le modèle doit :
Périmètre
Créer :
Mettre à jour le
Makefile.Ce ticket ne doit pas :
Application,MainWindowouWorkspace;1. Type opaque
Déclarer :
La structure privée reste dans
src/models/evidence_record.c.Structure recommandée :
2. État d’intégrité
Définir :
Interprétation :
Le modèle ne réalise aucune vérification lui-même.
3. Erreurs
Définir :
Ajouter :
Respecter la convention GLib :
4. Constructeur
Déclarer :
Le constructeur copie toutes les chaînes. Le code appelant reste propriétaire de ses arguments.
5. Champs obligatoires
Les champs suivants sont obligatoires :
Ils doivent être non
NULL, non vides et non composés uniquement d’espaces.Le constructeur peut nettoyer des copies avec :
Il ne doit jamais modifier les chaînes reçues.
6. Identifiant
identifierdoit être un UUID valide :Le modèle ne génère pas l’UUID.
7. Noms de fichiers
original_namereprésente le nom reçu lors de la collecte.internal_namereprésente le nom utilisé dans l’enquête.Refuser au minimum :
Refuser également toute valeur contenant un séparateur de chemin.
Le modèle ne corrige pas silencieusement un nom dangereux.
8. Chemin relatif
relative_pathdoit rester relatif à la racine de l’enquête.Refuser :
.ou..;..;Exemple accepté :
Le modèle ne vérifie pas l’existence du chemin et ne le transforme pas en chemin absolu.
9. Type de preuve
type_identifierest un identifiant métier stable.Exemples futurs :
Le modèle vérifie seulement que la valeur est non vide. La liste des types ne doit pas être codée en dur dans
EvidenceRecord.10. SHA-256
sha256doit contenir exactement 64 caractères hexadécimaux.Accepter
0-9,a-fetA-F, puis conserver la valeur en minuscules.Une empreinte invalide produit :
Le modèle ne calcule pas l’empreinte.
11. Dates
imported_atest obligatoire.collected_atest facultatif.Format initial :
Exemple :
Refuser les chaînes vides, les formats incomplets, les caractères inattendus et l’absence du suffixe
Z.Le ticket ne gère pas encore les fuseaux horaires ni les fractions de seconde.
12. Champs facultatifs
Peuvent être
NULL:sourceetdescriptioncontenant uniquement des espaces doivent être normalisés enNULL.13. Taille
size_bytesreprésente la taille observée lors de l’import.La valeur
0est autorisée pour un fichier vide valide.Le modèle ne lit pas le fichier.
14. Statut
Refuser toute valeur extérieure à
EvidenceIntegrityStatus.UNKNOWNetVALIDsont tous deux des états valides.15. Accesseurs
Ajouter :
Pour un objet
NULL:Les chaînes retournées sont empruntées.
16. Destruction
Ajouter :
La fonction accepte
NULLet libère toutes les données possédées.17. Immutabilité
Aucun setter public ne doit être ajouté.
Un
EvidenceRecordreprésente un état cohérent chargé depuis SQLite ou produit après un import réussi.18. Tests attendus
Ajouter au minimum :
NULL;..refusé ;NULL;evidence_record_free(NULL);GErrorfacultatif ;Utiliser GLib Test :
19. Mémoire
Chaque sortie d’échec du constructeur doit libérer :
Aucun champ ne doit pointer vers une chaîne détenue par l’appelant.
20. Makefile
Ajouter :
Compiler avec :
Inclure le test dans
make testetmake clean.Le module ne dépend que de GLib.
21. Audit d’architecture
Ces commandes ne doivent rien afficher :
22. Critères d’acceptation
EvidenceRecordest opaque...sont refusées.NULLsont sûrs.NULLest sûre.makeréussit sans warning.git diff --checkne remonte aucune erreur.23. Validation finale
Puis :
24. Fichiers concernés
Aucun autre fichier ne doit être modifié sans justification.
Résultat attendu
À la fin du ticket, Labfy dispose d’un modèle métier fiable pour représenter une preuve.
Le ticket suivant créera le schéma SQLite et le DAO des preuves. L’import GTK viendra après la persistance, le SHA-256, la copie sûre et le service transactionnel.