docs: QR des reglages, trois facons d'ouvrir, scanner, AllowCreateLocal, debuggable

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-09-17 22:19:01 +01:00
parent 405f058a92
commit 034fa48994
3 changed files with 155 additions and 4 deletions
+39
View File
@@ -459,6 +459,14 @@ en dix minutes serait le mauvais echange. Le but est de tenir le mobile attache
a un poste paye, pas de resister a une attaque — l'APK ne peut pas resister, et
faire semblant couterait plus que de l'admettre.
**Le reste du travail Android est dans
[android-client/README.md](android-client/README.md)**, tenu a jour le
2026-09-17 : les trois facons d'ouvrir le coffre (verrouillage d'ecran, code
d'application, mot de passe), la copie de secours `vault-recover.bin` qui
survit au schema retire, le scanner de QR (`ThirdParty/ZXing`), le define
`AllowCreateLocal` — creer un coffre sur le telephone est reserve au debogage —
et le correctif du manifeste, dont l'APK **release n'est plus `debuggable`**.
### Deuxieme couche : l'API refuse sans licence (`PM.LicenceGate`)
La premiere couche (l'ecran d'activation) ne consultait qu'un branchement,
@@ -1047,6 +1055,34 @@ device, never transmitted.
Sensitive actions (export, change master pw, recovery code…) still
require master pw via `askReauth` — sync never substitutes.
### QR des reglages pour le telephone (`sync/qr`)
Recopier une URL d'API et quarante caracteres de jeton sur un telephone est le
vrai obstacle a l'installation. **Settings -> Sync -> QR for phone** affiche un
QR que l'application Android scanne elle-meme.
- **C'est l'EXE qui fabrique le QR**, pas la page : il lit `syncUrl` et
`syncPwd` dans ses prefs DPAPI et n'envoie a la page que la **matrice**
noir/blanc (`Bridge.onSyncQr(taille, bits)`). Le jeton ne traverse donc pas le
moteur de rendu en clair - meme regle que `prefs/has`.
- **Le mot de passe de synchro n'y est JAMAIS** : un QR se photographie
par-dessus l'epaule, et avec lui il ouvrirait le coffre du depot. Il se tape
une fois sur le telephone. Le QR se masque seul au bout de 60 s.
- **Le contenu est un lien `pmserver://sync?u=&t=`, pas du texte.** L'appareil
photo du telephone envoie tout TEXTE a une recherche web : le jeton serait
parti chez Google a un appui pres. Un schema propre n'a qu'une application
pour l'ouvrir.
- **Le plus court possible** : l'adresse du depot (`https://hote/Owner/Repo`) et
non l'URL d'API - le telephone la rallonge a l'enregistrement -, et seuls
`% & # + espace` sont echappes. `TNetEncoding.URL.Encode` changeait chaque
`:` et `/` en trois caracteres, et le QR devenait trop dense pour etre lu.
- Generateur : **`Source/DelphiZXingQRCode.pas`** (portage ZXing, Apache 2.0,
licence a cote). `BCryptVerifySignature` n'a rien a voir ici : le QR n'est pas
signe, il ne porte que ce que l'utilisateur voit deja a l'ecran.
- **Piege CSS rencontre** : `css/style.css` impose `svg { width: 16px }` a
toutes les icones, ce qui reduisait le QR a la taille d'une icone. La taille
est donc posee **en style direct** sur le `<svg>`.
**Tombstone purge on (re)create** : `POST /entries` and
`POST /entries/bulk-import` both DELETE any `entry_tombstones` row
matching the inserted uuid (same transaction). Without this, restoring
@@ -1448,6 +1484,9 @@ le vide ET vide `FPendingURL` → écran noir permanent sur cold-start lent.
```
Surcharge MSBuild, pas dans le `.dproj` : un chemin propre a une machine n'a
pas sa place dans un fichier versionne. **F9 dans l'IDE sort toujours sur Z:.**
**La sortie Android suit le meme chemin** : `Z:\password-manager\Android64` est
une **jonction** vers `E:\password manager\Android64`, posee le 2026-09-17 quand
`Z:` est tombe a 40 Ko libres et que `aapt` echouait sans dire pourquoi.
**Des `.dcu` separes par plateforme sont ce qui empeche la pollution TMS**
ci-dessus : verifie au premier build 32+64, aucun `.dcu` depose a cote des
sources TMS. L'exe de `E:\password manager\` cree **son propre `vault.db`** a