mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-29 03:59:21 +03:00
Resolve #840
This commit is contained in:
parent
af3cecb2e1
commit
a52881fb67
43 changed files with 79 additions and 11 deletions
|
|
@ -12,8 +12,15 @@ import { OpenPgpKeyPopupView } from 'View/Popup/OpenPgpKey';
|
|||
import { AskPopupView } from 'View/Popup/Ask';
|
||||
|
||||
const
|
||||
askPassphrase = async (privateKey, btnTxt = 'LABEL_SIGN') =>
|
||||
await AskPopupView.password('GnuPG key<br>' + privateKey.id + ' ' + privateKey.emails[0], 'OPENPGP/'+btnTxt),
|
||||
passphrases = new Map(),
|
||||
askPassphrase = async (privateKey, btnTxt = 'LABEL_SIGN') => {
|
||||
const key = privateKey.id,
|
||||
pass = passphrases.has(key)
|
||||
? {password:passphrases.get(key), remember:false}
|
||||
: await AskPopupView.password('GnuPG key<br>' + key + ' ' + privateKey.emails[0], 'OPENPGP/'+btnTxt);
|
||||
pass && pass.remember && passphrases.set(key, pass.password);
|
||||
return pass.password;
|
||||
},
|
||||
|
||||
findGnuPGKey = (keys, query/*, sign*/) =>
|
||||
keys.find(key =>
|
||||
|
|
|
|||
|
|
@ -18,15 +18,21 @@ const
|
|||
key.emails.includes(query) || query == key.id || query == key.fingerprint
|
||||
),
|
||||
|
||||
passphrases = new Map(),
|
||||
decryptKey = async (privateKey, btnTxt = 'LABEL_SIGN') => {
|
||||
if (privateKey.key.isDecrypted()) {
|
||||
return privateKey.key;
|
||||
}
|
||||
const passphrase = await AskPopupView.password(
|
||||
'OpenPGP.js key<br>' + privateKey.id + ' ' + privateKey.emails[0],
|
||||
'OPENPGP/'+btnTxt
|
||||
);
|
||||
if (null !== passphrase) {
|
||||
const key = privateKey.id,
|
||||
pass = passphrases.has(key)
|
||||
? {password:passphrases.get(key), remember:false}
|
||||
: await AskPopupView.password(
|
||||
'OpenPGP.js key<br>' + privateKey.id + ' ' + privateKey.emails[0],
|
||||
'OPENPGP/'+btnTxt
|
||||
);
|
||||
if (pass) {
|
||||
pass.remember && passphrases.set(key, pass.password);
|
||||
let passphrase = pass.password;
|
||||
return await openpgp.decryptKey({
|
||||
privateKey: privateKey.key,
|
||||
passphrase
|
||||
|
|
|
|||
|
|
@ -14,7 +14,9 @@ export class AskPopupView extends AbstractViewPopup {
|
|||
username: '',
|
||||
askUsername: false,
|
||||
passphrase: '',
|
||||
askPass: false
|
||||
askPass: false,
|
||||
remember: true,
|
||||
askRemeber: false
|
||||
});
|
||||
|
||||
this.fYesAction = null;
|
||||
|
|
@ -46,8 +48,10 @@ export class AskPopupView extends AbstractViewPopup {
|
|||
this.askDesc(sAskDesc || '');
|
||||
this.askUsername(ask & 2);
|
||||
this.askPass(ask & 1);
|
||||
this.askRemeber(ask & 4);
|
||||
this.username('');
|
||||
this.passphrase('');
|
||||
this.remember(true);
|
||||
this.yesButton(i18n(btnText || 'GLOBAL/YES'));
|
||||
this.noButton(i18n(ask ? 'GLOBAL/CANCEL' : 'GLOBAL/NO'));
|
||||
this.fYesAction = fYesFunc;
|
||||
|
|
@ -86,10 +90,10 @@ AskPopupView.password = function(sAskDesc, btnText) {
|
|||
return new Promise(resolve => {
|
||||
this.showModal([
|
||||
sAskDesc,
|
||||
view => resolve(view.passphrase()),
|
||||
view => resolve({password:view.passphrase(), remember:view.remember()}),
|
||||
() => resolve(null),
|
||||
true,
|
||||
1,
|
||||
5,
|
||||
btnText
|
||||
]);
|
||||
});
|
||||
|
|
@ -99,7 +103,7 @@ AskPopupView.credentials = function(sAskDesc, btnText) {
|
|||
return new Promise(resolve => {
|
||||
this.showModal([
|
||||
sAskDesc,
|
||||
view => resolve({username:view.username(), password:view.passphrase()}),
|
||||
view => resolve({username:view.username(), password:view.passphrase(), remember:view.remember()}),
|
||||
() => resolve(null),
|
||||
true,
|
||||
3,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue