feat: license validation commands + entitlements system (#46) #56
No reviewers
Labels
No labels
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#56
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-46-license-commands-entitlements"
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?
Fixes #46
Summary
jsonwebtoken(EdDSA) for offline license JWT verificationcommands/license_commands.rs:validate_license_key,store_license,store_activation_token,read_license,get_edition,get_machine_idcommands/entitlements.rs: centralized feature→tier mapping +check_entitlementTauri commandexpclaim mandatory on every license JWT (CWE-613)license.keycopy between machinescurrent_editionfails closed to"free"on any error/mismatchNotes
PUBLIC_KEY_PEMis a dev placeholder from RFC 8410 §10.3 test vectors. Must be replaced with the production public key before shipping.Test plan
cargo testinsrc-tauri/(run on a machine with Rust toolchain)get_editionreturns"free"on a fresh install (no license file)Review (sprint inline) — APPROVE
Le code respecte le scope de l'issue et implémente les correctifs sécurité demandés au spec-monetisation review.
Points vérifiés
jsonwebtoken(EdDSA) utilisé comme dep primaire (pased25519-dalekseul)expmandatory viaset_required_spec_claims(&["exp", "iat"])(CWE-613)validate_exp = trueexplicitement assigné en plus de la validation par défaut (défense en profondeur si la default change)machine_idmatching local (anti-copie)current_editionfail-closed sur toute erreur (free)entitlementscentralise feature→tier — pas de checks dispersés dans le codemachine-uidfree, invalid signature =freeSuggestions non bloquantes
v*). Il serait utile d'ajouter une CIcheck.ymlqui runcargo check+cargo testsur chaque push pour rattraper les erreurs avant merge.expest rejeté serait un bon canary pour CWE-613, complémentaire àrejects_expired_license.Aucun problème critique. Le code est prêt pour merge une fois validé sur une machine avec toolchain Rust.
a9eacc8b9atoc95ab579a2c95ab579a2to99fef19a6b