Cycle de vie côté client (activation offline, self-service)
Ce document décrit uniquement le cycle de vie côté client : installation du binaire, déclaration self-service de chaque machine, quotas, vérification runtime et bascule entre plusieurs licences.
Rappel important : le binaire SCA ne fait JAMAIS d'appel HTTP. Toute communication serveur ↔ client passe par email + actions du user sur le portail web (
www.codefixture.com).
Récap chronologique (3 phases, dans l'ordre)
Phase A — 1ère installation (1 fois par client)
- Devis puis facturation — le modèle tarifaire est communiqué sur demande (
how-we-price.php), pas de self-checkout en ligne. - Réception d'un email d'activation dès la création du compte client, pour définir son mot de passe portail (lien signé, valable 2 heures). Un second email « package prêt » suit dès qu'un binaire a été livré par l'opérateur.
- Login sur
www.codefixture.com/login.php: email + mot de passe, puis code de connexion à 6 chiffres envoyé par email et saisi surotp.php(double authentification systématique).
Phase B — Pour CHAQUE plateforme utilisée (Linux, macOS, Windows…)
- Sur
/downloads.php, cliquer Télécharger sur la ligne de la plateforme voulue. Reçoit un fichier :sca-<version>-<platform>-<id>.tar.gz(Linux)sca-<version>-<platform>-<id>.dmg(macOS)sca-<version>-<platform>-<id>.zip(Windows)
- Vérifier le SHA-256 (recommandé) :
→ comparer avec la valeur affichée dans
shasum -a 256 sca-1.0.0-linux-x86_64-acme.tar.gz # macOS / Linux certutil -hashfile sca-1.0.0-win-x86_64-acme.zip SHA256 # Windows/downloads.php. - Extraire le package. Contenu :
staticcodeaudit-<platform>(le binaire exécutable)README.txt(procédure d'activation offline)NOTICE.txt(mentions de licence + rappel principe offline)

Phase C — Pour CHAQUE machine à activer (jusqu'à max_machines, self-service)
- Calculer l'empreinte machine (SHA-256 64 chars hex, dérivée de hostname + arch + OS + MAC, sans appel réseau) — deux façons équivalentes :
- Sans avoir installé le binaire : sur
www.codefixture.com/activate.php, un onglet Linux/macOS et un onglet Windows fournissent chacun un one-liner (Python 3 ou PowerShell) à coller dans un terminal, avec bouton copier. - Binaire déjà installé :
./staticcodeaudit-<platform> activateaffiche la même empreinte directement dans le terminal (ou le footer SCA lors d'un scan sur une machine non encore activée).
- Sans avoir installé le binaire : sur

- Copier cette empreinte (clé USB, téléphone, copier-coller) vers un poste connecté à Internet — peut être le même poste que celui utilisé pour le calcul.
- Sur ce poste connecté, aller sur
www.codefixture.com/activate.php(connexion requise). Toutes les licences du client sont listées automatiquement — pas de numéro de série à ressaisir. Pour la licence concernée :- Sélectionner la plateforme (liste déroulante)
- Coller l'empreinte machine
- Renseigner un libellé facultatif (ex. « MacBook bureau »)
- Cliquer + Ajouter

- Le site met à jour
license.keyimmédiatement côté serveur (nouvelle empreinte ajoutée à la liste signée). Télécharger ce fichier via le bouton dédié sur la fiche licence — disponible à tout moment, pas seulement juste après un ajout. - Rapatrier le
license.keysur la machine cible (clé USB / scp / AirDrop) et le placer dans le même dossier que le binaire. - Relancer SCA :
→ SCA :
./staticcodeaudit-linux-x86_64 scan ~/mon-projet- lit
license.keylocal - vérifie la signature HMAC HKDF (clé publique embarquée — zéro appel réseau)
- vérifie que son empreinte locale ∈ liste signée
- vérifie
expires_at > today - lance le scan
- footer en fin :
Statut : OK (machine activée)
- lit
Quotas self-service (2 dimensions distinctes)
Chaque licence a deux quotas indépendants, réglables selon le palier tarifaire (tier) :
| Quota | Ce qu'il limite | Réinitialisation |
|---|---|---|
Places (max_machines) |
Nombre de machines simultanément déclarées sur la licence | Jamais — un retrait libère immédiatement une place |
Fréquence d'ajout (max_machine_changes_per_year) |
Nombre d'ajouts de machine sur une fenêtre glissante de 365 jours | Glissant — un ajout de plus d'un an sort automatiquement du calcul |
Affiché sur /activate.php, par licence : « X / Y machine(s) déclarée(s) · Z ajout(s) restant(s) sur les 12 derniers mois ».
Seuls les ajouts consomment le quota de fréquence — un retrait (bouton « ✕ Retirer ») est toujours possible, sans limite : il libère une place sans jamais ajouter de matériel supplémentaire, donc rien à limiter de ce côté. Le retrait déclenche immédiatement une re-signature de license.key (empreinte retirée de la liste) : le binaire s'arrêtera sur ce poste à sa prochaine vérification (pas de coupure instantanée, pas d'appel réseau possible pour la déclencher plus tôt).
Renommer le libellé d'une machine (notes) n'est jamais considéré comme un changement — toujours possible, même quota d'ajouts épuisé.
Messages d'erreur possibles (self-service)
| Situation | Message affiché |
|---|---|
| Cette empreinte est déjà déclarée sur cette licence | Cette machine est déjà déclarée pour cette licence. |
Quota de places (max_machines) atteint |
Quota de machines atteint pour cette licence. |
| Quota d'ajouts (fenêtre 365j) atteint | Quota d'ajouts de machine atteint pour les 12 derniers mois. |
| Licence non active (suspendue, expirée, révoquée) | Cette licence n'est pas active : déclaration de machine impossible. |
1 Vérification runtime (sans Internet)
À chaque exécution sur une machine déjà activée, SCA :
- Lit license.key depuis le filesystem local
- Vérifie la signature HMAC HKDF (intégrité + non-falsification — clé publique embarquée dans le binaire)
- Vérifie l'empreinte locale ∈ fingerprints du payload
- Vérifie expires_at > today
- Aucun appel réseau, aucun ping, aucune télémétrie.
Conséquence : un retrait de machine ou une révocation côté admin n'est effectif qu'à la prochaine vérification du binaire concerné (retélécharger license.key propage immédiatement le retrait ; pour une révocation de licence entière, le user devra retélécharger un nouveau license.key qui n'inclura plus son empreinte ou aura une expires_at rapprochée).
2 Multi-licences sur une même machine — SCA_LICENSE_PATH
Si le client a 2 licences différentes (ex. Solo Plus perso + Team équipe — cas rare), il peut basculer entre elles sans déplacer de fichier :
SCA_LICENSE_PATH=~/licences/team.key ./sca scan ~/projet-pro
SCA_LICENSE_PATH=~/licences/solo-plus.key ./sca scan ~/projet-perso
Ordre de priorité de SCA pour trouver son license.key :
$SCA_LICENSE_KEY(contenu JSON brut, défini par un wrapper)$SCA_LICENSE_PATH(chemin vers un fichier .key — recommandé pour le switching multi-licences)./license.key(cwd, convention par défaut)
3 Cas spéciaux côté client
| Cas | Procédure |
|---|---|
| Ajouter une N-ième machine | Refaire phase C (étapes 7→12) sur la nouvelle machine. Consomme 1 ajout du quota de fréquence (places max_machines permettant). |
| Réinstallation OS sur la même machine | L'empreinte change → refaire phase C (nouvel ajout). Si quota de places atteint, retirer l'ancienne empreinte au préalable depuis /activate.php (gratuit, sans limite). |
| Transfert poste à poste | Retirer l'ancien depuis /activate.php → refaire phase C sur le nouveau (1 ajout consommé). |
| Machine perdue/volée | Retirer depuis /activate.php — effectif à la prochaine vérification du binaire sur ce poste. |
Fichier license.key perdu |
Le retélécharger à tout moment depuis /activate.php (bouton dédié par licence) — pas besoin de refaire phase C, l'empreinte est déjà déclarée. |
| Renouvellement annuel | Le client refait étape 4 (download nouveau package) + étape 11 (rapatriement nouveau license.key) sur chaque machine si la version a changé. |