feat(android): saisir le secret 2FA des la creation d'une entree
Le formulaire New entry n'avait pas le champ et AddEntry ecrivait
totp_secret = '' en dur : il fallait enregistrer l'entree puis la rouvrir
pour poser un second facteur, alors que l'editeur portait deja le champ.
Meme intitule que l'editeur ("2FA secret"), masque pour une note comme
site et identifiant, et achemine par &o= — t, s, u, p, k, d etaient
pris.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -49,7 +49,7 @@ function NewEmptySnapshot(const AUsername: string): string;
|
||||
///
|
||||
/// Un uuid neuf, et lui seul : pas de tombstone, on ne supprime pas encore.
|
||||
function AddEntry(const APlainJson, ATitle, ASite, AUsername, APassword,
|
||||
AKind, AFolder: string): string;
|
||||
AKind, AFolder, ATotp: string): string;
|
||||
|
||||
/// Retire une entree de l'instantane et laisse une PIERRE TOMBALE a sa place.
|
||||
///
|
||||
@@ -532,7 +532,7 @@ begin
|
||||
end;
|
||||
|
||||
function AddEntry(const APlainJson, ATitle, ASite, AUsername, APassword,
|
||||
AKind, AFolder: string): string;
|
||||
AKind, AFolder, ATotp: string): string;
|
||||
var
|
||||
LRoot, LEntry: TJSONObject;
|
||||
LEntries: TJSONArray;
|
||||
@@ -560,7 +560,7 @@ begin
|
||||
else LEntry.AddPair('folder', 'All');
|
||||
EnsureFolder(LRoot, AFolder);
|
||||
LEntry.AddPair('tags', TJSONArray.Create);
|
||||
LEntry.AddPair('totp_secret', '');
|
||||
LEntry.AddPair('totp_secret', ATotp);
|
||||
LEntry.AddPair('kind', AKind);
|
||||
LEntry.AddPair('template', '');
|
||||
LEntry.AddPair('custom_fields', TJSONArray.Create);
|
||||
|
||||
@@ -1359,6 +1359,11 @@ function openNewEntry() {
|
||||
// qu'aucune confirmation ne rattrape et qu'on ne peut relire nulle part.
|
||||
+ '<div class="field" id="nBodyRow"><div class="cap">Password</div>'
|
||||
+ '<div class="line">' + newBodyControl('login') + '</div></div>'
|
||||
// LE SECRET, pas le code. Il manquait ici alors que l'editeur le portait
|
||||
// deja : on pouvait poser un second facteur sur une entree existante, pas
|
||||
// sur une entree qu'on venait de creer - il fallait enregistrer puis
|
||||
// rouvrir. Meme intitule que l'editeur pour qu'on reconnaisse le champ.
|
||||
+ newField('nTotp', '2FA secret', 'nTotpRow')
|
||||
+ '<div class="field"><div class="line">'
|
||||
// flex:1 et non .wide : .wide ne regle que le rembourrage, et la largeur
|
||||
// pleine vient d'etre etire dans son conteneur.
|
||||
@@ -1388,6 +1393,7 @@ document.getElementById('fields').addEventListener('click', function (ev) {
|
||||
// demander de remplir ce que rien n'affichera.
|
||||
document.getElementById('nSiteRow').hidden = (kind === 'note');
|
||||
document.getElementById('nUserRow').hidden = (kind === 'note');
|
||||
document.getElementById('nTotpRow').hidden = (kind === 'note');
|
||||
|
||||
// Le corps d'une note EST son mot de passe cote stockage : meme champ,
|
||||
// autre intitule, et rien a masquer - mais plusieurs lignes.
|
||||
@@ -1418,6 +1424,7 @@ document.getElementById('fields').addEventListener('click', function (ev) {
|
||||
+ '&s=' + encodeURIComponent(v('nSite'))
|
||||
+ '&u=' + encodeURIComponent(v('nUser'))
|
||||
+ '&p=' + encodeURIComponent(document.getElementById('nPwd').value)
|
||||
+ '&o=' + encodeURIComponent(v('nTotp'))
|
||||
+ '&k=' + newKind);
|
||||
});
|
||||
document.getElementById('new').addEventListener('click', openNewEntry);
|
||||
|
||||
+6
-4
@@ -306,7 +306,7 @@ type
|
||||
/// Ajoute une entree au coffre. Le mot de passe voyage par le pont,
|
||||
/// comme 'setfield' - meme regle, meme journalisation muette.
|
||||
procedure CreateEntry(const ATitle, ASite, AUser, APwd, AKind,
|
||||
AFolder: string);
|
||||
AFolder, ATotp: string);
|
||||
function UuidsFromIndexes(const AList: string): TArray<string>;
|
||||
/// Supprime des entrees, pierres tombales comprises. Sans retour.
|
||||
/// Liste vide = l'entree ouverte.
|
||||
@@ -1572,7 +1572,7 @@ begin
|
||||
end;
|
||||
|
||||
procedure TForm8.CreateEntry(const ATitle, ASite, AUser, APwd, AKind,
|
||||
AFolder: string);
|
||||
AFolder, ATotp: string);
|
||||
begin
|
||||
// Une entree sans rien pour la reconnaitre serait une ligne muette dans la
|
||||
// liste, et rien ne permettrait de la retrouver pour la corriger.
|
||||
@@ -1584,7 +1584,8 @@ begin
|
||||
CommitChange('Added: ' + ATitle, 'new entry from phone', '',
|
||||
function (APlain: string): string
|
||||
begin
|
||||
Result := AddEntry(APlain, ATitle, ASite, AUser, APwd, AKind, AFolder);
|
||||
Result := AddEntry(APlain, ATitle, ASite, AUser, APwd, AKind, AFolder,
|
||||
ATotp);
|
||||
end);
|
||||
end;
|
||||
|
||||
@@ -1750,7 +1751,8 @@ begin
|
||||
TNetEncoding.URL.Decode(Param('u')),
|
||||
TNetEncoding.URL.Decode(Param('p')),
|
||||
TNetEncoding.URL.Decode(Param('k')),
|
||||
TNetEncoding.URL.Decode(Param('d')))
|
||||
TNetEncoding.URL.Decode(Param('d')),
|
||||
TNetEncoding.URL.Decode(Param('o')))
|
||||
|
||||
else if LAction = 'history' then
|
||||
ShowPasswordHistory
|
||||
|
||||
Reference in New Issue
Block a user