Remove remembered passphrase after 15 minutes of inactivity

https://github.com/the-djmaze/snappymail/issues/1142#issuecomment-1635839009
This commit is contained in:
the-djmaze 2024-03-18 14:36:33 +01:00
parent 9bc56a5abd
commit 190db75c19
5 changed files with 16 additions and 5 deletions

View file

@ -4,5 +4,16 @@ export const Passphrases = new WeakMap();
Passphrases.ask = async (key, sAskDesc, btnText) =>
Passphrases.has(key)
? {password:Passphrases.get(key)/*, remember:false*/}
? {password:Passphrases.handle(key)/*, remember:false*/}
: await AskPopupView.password(sAskDesc, btnText);
const timeouts = {};
// get/set accessor to control deletion after 15 minutes of inactivity
Passphrases.handle = (key, pass) => {
if (!timeouts[key]) {
timeouts[key] = (()=>Passphrases.delete(key)).debounce(900000);
}
pass && Passphrases.set(key, pass);
timeouts[key]();
return Passphrases.get(key);
};

View file

@ -75,7 +75,7 @@ export const GnuPGUserStore = new class {
'GnuPG key<br>' + key.id + ' ' + key.emails[0],
btnTxt
);
pass && pass.remember && Passphrases.set(key, pass.password);
pass && pass.remember && Passphrases.handle(key, pass.password);
return pass?.password;
};
}

View file

@ -34,7 +34,7 @@ const
privateKey: privateKey.key,
passphrase
});
result && pass.remember && Passphrases.set(privateKey, passphrase);
result && pass.remember && Passphrases.handle(privateKey, passphrase);
return result;
}
},

View file

@ -1571,7 +1571,7 @@ export class ComposePopupView extends AbstractViewPopup {
);
if (null != pass) {
params.signPassphrase = pass.password;
// pass.remember && Passphrases.set(identity, pass.password);
// pass.remember && Passphrases.handle(identity, pass.password);
} else {
sign = false;
}

View file

@ -655,7 +655,7 @@ export class MailMessageView extends AbstractViewRight {
message.smimeDecrypted(true);
MimeToMessage(response.Result.data, message);
message.html() ? message.viewHtml() : message.viewPlain();
pass && pass.remember && Passphrases.set(identity, pass.password);
pass && pass.remember && Passphrases.handle(identity, pass.password);
if ('signed' in response.Result) {
message.smimeSigned(response.Result.signed);
}