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.ask = async (key, sAskDesc, btnText) =>
Passphrases.has(key) Passphrases.has(key)
? {password:Passphrases.get(key)/*, remember:false*/} ? {password:Passphrases.handle(key)/*, remember:false*/}
: await AskPopupView.password(sAskDesc, btnText); : 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], 'GnuPG key<br>' + key.id + ' ' + key.emails[0],
btnTxt btnTxt
); );
pass && pass.remember && Passphrases.set(key, pass.password); pass && pass.remember && Passphrases.handle(key, pass.password);
return pass?.password; return pass?.password;
}; };
} }

View file

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

View file

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

View file

@ -655,7 +655,7 @@ export class MailMessageView extends AbstractViewRight {
message.smimeDecrypted(true); message.smimeDecrypted(true);
MimeToMessage(response.Result.data, message); MimeToMessage(response.Result.data, message);
message.html() ? message.viewHtml() : message.viewPlain(); 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) { if ('signed' in response.Result) {
message.smimeSigned(response.Result.signed); message.smimeSigned(response.Result.signed);
} }