mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Remove remembered passphrase after 15 minutes of inactivity
https://github.com/the-djmaze/snappymail/issues/1142#issuecomment-1635839009
This commit is contained in:
parent
9bc56a5abd
commit
190db75c19
5 changed files with 16 additions and 5 deletions
|
|
@ -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);
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue