From ac97d6c207cb38f8e2f552c932941efc10457d20 Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Fri, 18 Sep 2026 11:39:32 +0100 Subject: [PATCH] docs: reglages de la barrette, GitHub et depot prive, erreurs et mot de passe de synchro sur le telephone Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 50 ++++++++++++++++++++++++++++++++++++++++ android-client/README.md | 32 +++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 182b199..14b7ba6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -283,6 +283,38 @@ Détails : Le cadre est peint dans `WM_ERASEBKGND` plutôt que par `WS_BORDER`, qui se sert dans les couleurs système. +### Réglages de la barrette (2026-09-18) + +**Settings → onglet Fill bar**, et le **clic droit** sur la barrette pour les +mêmes choix au plus court. + +- **Boutons au choix** (`lazyButtons`, liste ordonnée) : Full, Password, 2FA, + **Add** (= `Ctrl+Shift+A`, nouvelle entrée depuis la fenêtre en avant), + **Search** (= `Ctrl+Shift+Q`), Open, **Settings** (ouvre cet onglet). Le `X` + est toujours là. `'none'` = aucun bouton choisi (liste vide ≠ liste par défaut). + Add et Search appellent **les mêmes corps que les raccourcis**, extraits en + `FireNewEntryRequest` / `FireQuickSearchRequest` — une seule capture de la + fenêtre cible, deux gestes. `NOACTIVATE` les rend justes : la fenêtre en avant + au clic est bien celle de l'utilisateur. +- **Icônes ou texte** (`lazyIcons`) : glyphes de la police **Segoe MDL2 Assets** + (Windows 10/11), rien à embarquer, couleur du thème comme un mot. Info-bulles + (`TOOLTIPS_CLASS`, `TTS_ALWAYSTIP` car la barrette n'est jamais active) sur + chaque bouton, dans les deux modes. **La largeur de la barrette se calcule** + (`FLazyW`) : elle dépend des boutons et du mode. +- **Tout en prefs DPAPI**, pas dans `settings_json` : la barrette s'allume coffre + fermé. Pont : `fillbar/get` → `Bridge.onFillBar({on,buttons,icons,alpha})`, + `fillbar/set?on=&buttons=&icons=&alpha=`. Rien de secret dedans. +- **Reconstruire = `ReloadLazyBar`, POSTÉ** (`WM_LAZY_RELOAD`) : le clic droit + vient de la barrette, qu'on ne détruit pas depuis son propre gestionnaire + (même raison que le `X`). +- **L'onglet suit la barrette** : un changement par clic droit ou par le menu du + tray déclenche `OnFillBarChanged` → la page relit `fillbar/get`. Gardé par + `FBrowserInitialized` : `RestoreLazyBar` passe par là au démarrage. +- **Settings depuis la barrette** (bouton ou clic droit → *Fill bar + settings...*) : la fenêtre revient, puis les réglages s'ouvrent **par-dessus** + une entrée en cours d'édition, qui reste intacte dessous (Échap ferme d'abord + les réglages). Coffre verrouillé : message, pas de réglages. + ## Licences (`PM.Licence`) Verification **hors ligne** d'une licence signee ECDSA P-256. Une licence est @@ -1083,6 +1115,24 @@ QR que l'application Android scanne elle-meme. toutes les icones, ce qui reduisait le QR a la taille d'une icone. La taille est donc posee **en style direct** sur le ``. +### GitHub, et refus d'un depot public (2026-09-18) + +- **GitHub parle la meme API des contenus que Gitea** (contenu base64, `sha`, + meme corps de PUT) : meme chemin, reconnu a `api.github.com/repos/` en plus de + `/api/v1/repos/`. `syncIsGitea` (JS), `LGitea` (UMainForm) et + `TSyncClient.IsGitea` (APK) reconnaissent les deux. +- **`User-Agent: PMServer` partout** : GitHub rend 403 a une requete sans ; + Gitea l'ignore. +- **Un depot PUBLIC est refuse**, Gitea comme GitHub, avant toute lecture ou + ecriture : `GET` du depot (URL des contenus coupee a `/contents/`), champ + `private`. Chaque synchro est un commit, l'historique garde tous les + instantanes chiffres ; public, n'importe qui les attaque hors ligne. Un doute + reseau ne bloque pas (pas de verdict = on laisse la vraie requete parler). +- **Limite GitHub** : au-dela de 1 Mo, l'API des contenus ne rend plus le fichier + (`encoding: none`). Le coffre chiffre fait ~250 Ko au 2026-09-18. +- Telephone : `https://github.com/O/R` <-> URL d'API, comme pour Gitea. Le QR + du PC porte aussi la forme courte `github.com/O/R`. + ### Idee gardee : « Reinitialiser l'historique » du depot de synchro **Rien n'est fait, et le code actuel reste tel quel** (decide le 2026-09-17). diff --git a/android-client/README.md b/android-client/README.md index c56ab09..f25625b 100644 --- a/android-client/README.md +++ b/android-client/README.md @@ -265,6 +265,38 @@ et `RegisterLocal` refuse aussi : l'interdit ne tient pas qu'à l'écran. Dépô vide (404) ou conteneur illisible, **rien n'est créé** — un coffre neuf masquerait un réglage à corriger. +## Erreurs du dépôt, générateur, Save — 2026-09-18 + +- **Une erreur de réglage s'affiche là où on la corrige** : `ShowSettingsError` + ouvre les réglages avec le message en rouge au-dessus des champs du dépôt. + Download vault sans URL ni jeton, jeton refusé, dépôt ou utilisateur + inexistant, mauvais mot de passe de synchro, dépôt public. +- **Gitea répond 404 pour tout** (fichier absent, dépôt ou propriétaire + inexistant, dépôt privé invisible au jeton). `TSyncClient.Diagnose` tranche + par deux requêtes de plus — le dépôt, puis l'utilisateur —, seulement quand + quelqu'un attend la réponse. Même logique pour GitHub (racine de l'API = tout + ce qui précède `repos/`). +- **Générateur de mot de passe** : dé à côté du champ, à la création et à la + modification. `crypto.getRandomValues` avec rejet (un modulo favoriserait les + premiers caractères), 20 caractères, laissé visible une fois tiré. +- **Save ne s'allume que sur un vrai changement**, comparé aux valeurs + enregistrées : taper puis effacer le regrise. Après Save : « ✓ Saved », + inactif, nouvelle référence. + +### Le mot de passe de synchro : celui qu'on tape l'emporte, mais se vérifie + +Le cache porte le mot de passe de synchro. Rouvrir le coffre le **reposait** +dans les réglages, par-dessus celui que l'utilisateur venait d'enregistrer : le +changement disparaissait sans un mot (`FPwdUserSet` l'empêche désormais). + +Et un mot de passe changé **n'était jamais vérifié** : le `sha` inchangé faisait +répondre « rien n'a changé » sans rien déchiffrer. Tant que `FPwdUserSet`, le +dépôt est donc **retéléchargé en entier** (`Fetch('')`), le déchiffrement +tranche, puis la synchro reprend si des modifications attendaient. Les +publications, elles, n'étaient pas en danger : `CommitChange` et +`PublishPending` chiffrent avec `FKey`, la clé du dernier mot de passe qui a +réellement ouvert le dépôt. + ## Saisie : ce qui a résisté - **`user-select: none` du `body`** était hérité par les champs : le curseur ne