Merge GnuPG and OpenPGP.js passphrases

This commit is contained in:
the-djmaze 2023-02-20 15:49:38 +01:00
parent 8a8d1d756e
commit b5ab175953
3 changed files with 14 additions and 11 deletions

View file

@ -0,0 +1 @@
export const Passphrases = new Map();

View file

@ -11,14 +11,15 @@ import { showScreenPopup } from 'Knoin/Knoin';
import { OpenPgpKeyPopupView } from 'View/Popup/OpenPgpKey';
import { AskPopupView } from 'View/Popup/Ask';
import { Passphrases } from 'Storage/Passphrases';
const
passphrases = new Map(),
askPassphrase = async (privateKey, btnTxt = 'LABEL_SIGN') => {
const key = privateKey.id,
pass = passphrases.has(key)
? {password:passphrases.get(key), remember:false}
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);
pass && pass.remember && Passphrases.set(key, pass.password);
return pass.password;
},
@ -83,7 +84,7 @@ export const GnuPGUserStore = new class {
key.armor = oData.Result;
showScreenPopup(OpenPgpKeyPopupView, [key]);
} else {
passphrases.delete(key.id);
Passphrases.delete(key.id);
}
}, {
keyId: key.id,
@ -198,7 +199,7 @@ export const GnuPGUserStore = new class {
if (result?.Result && false !== result.Result.data) {
return result.Result;
}
passphrases.delete(key.id);
Passphrases.delete(key.id);
}
}
}

View file

@ -12,22 +12,23 @@ import { showScreenPopup } from 'Knoin/Knoin';
import { OpenPgpKeyPopupView } from 'View/Popup/OpenPgpKey';
import { AskPopupView } from 'View/Popup/Ask';
import { Passphrases } from 'Storage/Passphrases';
const
findOpenPGPKey = (keys, query/*, sign*/) =>
keys.find(key =>
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 key = privateKey.id,
pass = passphrases.has(key)
? {password:passphrases.get(key), remember:false}
pass = Passphrases.has(key)
? {password:Passphrases.get(key), remember:false}
: await AskPopupView.password(
'OpenPGP.js key<br>' + privateKey.id + ' ' + privateKey.emails[0],
'OpenPGP.js key<br>' + key + ' ' + privateKey.emails[0],
'OPENPGP/'+btnTxt
);
if (pass) {
@ -36,7 +37,7 @@ const
privateKey: privateKey.key,
passphrase
});
result && pass.remember && passphrases.set(key, passphrase);
result && pass.remember && Passphrases.set(key, passphrase);
return result;
}
},