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 <noreply@anthropic.com>
This commit is contained in:
+15
-21
@@ -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()');
|
||||
|
||||
Reference in New Issue
Block a user