From af28788a0aa51ba14c42f2bc0042115fdadfa503 Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Fri, 28 Aug 2026 16:07:25 +0100 Subject: [PATCH] fix(android): Sync ouvre le coffre des qu'il y en a un, pas seulement sous code Le garde ne couvrait que le cache scelle par un code. Depuis que les deux secrets sont separes, la reconciliation a besoin de celui du conteneur local - qui ne se pose qu'a l'ouverture - donc un coffre ne ici refusait aussi, avec "open vault first", et ouvrir ensuite ne relancait rien : le bouton Sync ne vit que sur l'accueil, et le coffre ouvert on est sur la liste. Un seul garde desormais : s'il y a un cache lisible et que le coffre n'est pas ouvert, on ouvre et on reprend la synchronisation. Un appareil sans cache n'est pas concerne - c'est le premier telechargement. Co-Authored-By: Claude Opus 5 --- mainApk.pas | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/mainApk.pas b/mainApk.pas index 6b05d76..ee7a234 100644 --- a/mainApk.pas +++ b/mainApk.pas @@ -2259,30 +2259,24 @@ begin end; WebCall('PM.clearLog()'); - // MEME PORTE QUE L'OUVERTURE, LE CODE DE DEVERROUILLAGE COMPRIS. + // SYNCHRONISER DEMANDE UN COFFRE OUVERT DES QU'IL Y EN A UN SUR L'APPAREIL. // - // Le garde suivant ne couvre que l'empreinte, et les deux protections - // s'excluent : un cache scelle par un code porte VER_PIN, donc VaultNeedsAuth - // y est FAUX et rien ne s'y opposait. Synchroniser reconstruisait alors le - // coffre depuis le depot et l'affichait sans que le code soit demande - il ne - // gardait qu'un bouton sur deux. + // Deux raisons, et elles se rejoignent : la reconciliation a besoin du secret + // qui ouvre le conteneur local, et un cache scelle par un code exige que ce + // code ait ete verifie. Ni l'un ni l'autre ne s'obtient sans ouvrir - seul + // LoadVault sait si le code est bon, et seul le cache rend le secret. // - // ET C'EST L'OUVERTURE QUI VERIFIE, PAS CE GARDE. Un code tape ici ne serait - // confronte a rien : le depot est scelle par le mot de passe de sync, pas par - // le code. Se contenter d'exiger un champ rempli laisserait donc passer - // n'importe quelle frappe. Seul LoadVault sait si le code est le bon, et - // c'est "Open vault" qui l'appelle - d'ou le renvoi vers lui plutot qu'une - // verification recopiee ici. - if VaultNeedsPin and (FVault.Count = 0) then + // NE PAS SE CONTENTER DE REFUSER. Le bouton Sync ne vit que sur l'accueil, et + // une fois le coffre ouvert on est sur la liste, ou il n'existe pas : + // repondre "ouvre d'abord" fermait la seule porte, et l'ouverture qui suivait + // ne relancait rien. On ouvre donc, et OpenLocalNow reprend la + // synchronisation la ou elle s'est arretee. + // + // Un appareil SANS cache n'est pas concerne : c'est le premier + // telechargement, et il n'y a rien a ouvrir. + if HasVault and (not FVaultUnreadable) and (FVault.Count = 0) then begin - // NE PAS S'ARRETER LA. Refuser tout court fermait la seule porte : le - // bouton Sync ne vit que sur l'accueil, et une fois le coffre ouvert on est - // sur la liste, ou il n'existe pas. Synchroniser devenait impossible des - // qu'un code etait pose. - // - // On ouvre donc - ce qui verifie le code, seul LoadVault le peut - et - // OpenLocalNow reprend la synchronisation la ou elle s'est arretee. - if FPin = '' then + if VaultNeedsPin and (FPin = '') then begin Status('Unlock code required'); WebCall('PM.focusPin()');