feat(licence): lier la licence au poste (carte mere + disque)
C'etait la decision prise, et je l'avais mal lue : "pour le moment 1" repondait a la question 1, pas "une seule licence". PM.MachineId melange l'UUID de la carte mere (WMI) et la serie du volume systeme, puis n'en publie que 16 hexa : l'empreinte se recopie dans un courriel, l'UUID brut n'a pas a circuler. Un UUID nul ou tout a FF est rejete — VM et images clonees l'annoncent, et deux postes tomberaient alors sur la meme empreinte. Le champ m est compare APRES la signature. m absent = licence flottante, acceptee : seule la cle privee peut en emettre, et le champ ne peut pas etre retire sans casser la signature. Cote script -Machine est obligatoire sauf -Floating explicite. L'ecran d'activation affiche l'Installation ID : une licence liee ne peut plus etre emise avant l'installation. Verifie sur ce poste : liee a lui acceptee, liee a un autre refusee, flottante acceptee. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -315,11 +315,11 @@ const Bridge = (() => {
|
||||
}, 3000);
|
||||
});
|
||||
},
|
||||
onLicenceResult(ok, holder) {
|
||||
onLicenceResult(ok, holder, machine) {
|
||||
const r = licenceResolver;
|
||||
if (!r) return;
|
||||
licenceResolver = null;
|
||||
r({ ok: !!ok, holder: holder || '' });
|
||||
r({ ok: !!ok, holder: holder || '', machine: machine || '' });
|
||||
},
|
||||
onPrefResult(key, value) {
|
||||
const r = prefResolvers[key];
|
||||
@@ -6940,15 +6940,21 @@ function resetAutoLock() {
|
||||
// Ne rend la main QUE sur une licence acceptée — il n'y a pas de bouton
|
||||
// "plus tard", c'est tout l'objet de l'écran.
|
||||
async function ensureLicence() {
|
||||
if ((await Bridge.licence('status')).ok) return;
|
||||
let st = await Bridge.licence('status');
|
||||
if (st.ok) return;
|
||||
// Un démarrage à froid lent peut manquer la fenêtre de réponse, et le
|
||||
// silence se lit alors comme un refus : redemander une fois coûte moins
|
||||
// qu'un écran d'activation présenté à quelqu'un qui a déjà payé.
|
||||
if ((await Bridge.licence('status')).ok) return;
|
||||
st = await Bridge.licence('status');
|
||||
if (st.ok) return;
|
||||
|
||||
const screen = $('#licenceScreen');
|
||||
const hint = $('#licenceHint');
|
||||
const input = $('#licenceKey');
|
||||
|
||||
// L'empreinte du poste : une licence est émise POUR une machine, donc
|
||||
// sans ce code à recopier l'utilisateur n'a rien à demander.
|
||||
$('#licenceMachine').textContent = st.machine || '—';
|
||||
screen.classList.remove('is-hidden');
|
||||
input.focus();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user