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 { OpenPgpKeyPopupView } from 'View/Popup/OpenPgpKey';
import { AskPopupView } from 'View/Popup/Ask'; import { AskPopupView } from 'View/Popup/Ask';
import { Passphrases } from 'Storage/Passphrases';
const const
passphrases = new Map(),
askPassphrase = async (privateKey, btnTxt = 'LABEL_SIGN') => { askPassphrase = async (privateKey, btnTxt = 'LABEL_SIGN') => {
const key = privateKey.id, const key = privateKey.id,
pass = passphrases.has(key) pass = Passphrases.has(key)
? {password:passphrases.get(key), remember:false} ? {password:Passphrases.get(key), remember:false}
: await AskPopupView.password('GnuPG key<br>' + key + ' ' + privateKey.emails[0], 'OPENPGP/'+btnTxt); : 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; return pass.password;
}, },
@ -83,7 +84,7 @@ export const GnuPGUserStore = new class {
key.armor = oData.Result; key.armor = oData.Result;
showScreenPopup(OpenPgpKeyPopupView, [key]); showScreenPopup(OpenPgpKeyPopupView, [key]);
} else { } else {
passphrases.delete(key.id); Passphrases.delete(key.id);
} }
}, { }, {
keyId: key.id, keyId: key.id,
@ -198,7 +199,7 @@ export const GnuPGUserStore = new class {
if (result?.Result && false !== result.Result.data) { if (result?.Result && false !== result.Result.data) {
return result.Result; 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 { OpenPgpKeyPopupView } from 'View/Popup/OpenPgpKey';
import { AskPopupView } from 'View/Popup/Ask'; import { AskPopupView } from 'View/Popup/Ask';
import { Passphrases } from 'Storage/Passphrases';
const const
findOpenPGPKey = (keys, query/*, sign*/) => findOpenPGPKey = (keys, query/*, sign*/) =>
keys.find(key => keys.find(key =>
key.emails.includes(query) || query == key.id || query == key.fingerprint key.emails.includes(query) || query == key.id || query == key.fingerprint
), ),
passphrases = new Map(),
decryptKey = async (privateKey, btnTxt = 'LABEL_SIGN') => { decryptKey = async (privateKey, btnTxt = 'LABEL_SIGN') => {
if (privateKey.key.isDecrypted()) { if (privateKey.key.isDecrypted()) {
return privateKey.key; return privateKey.key;
} }
const key = privateKey.id, const key = privateKey.id,
pass = passphrases.has(key) pass = Passphrases.has(key)
? {password:passphrases.get(key), remember:false} ? {password:Passphrases.get(key), remember:false}
: await AskPopupView.password( : await AskPopupView.password(
'OpenPGP.js key<br>' + privateKey.id + ' ' + privateKey.emails[0], 'OpenPGP.js key<br>' + key + ' ' + privateKey.emails[0],
'OPENPGP/'+btnTxt 'OPENPGP/'+btnTxt
); );
if (pass) { if (pass) {
@ -36,7 +37,7 @@ const
privateKey: privateKey.key, privateKey: privateKey.key,
passphrase passphrase
}); });
result && pass.remember && passphrases.set(key, passphrase); result && pass.remember && Passphrases.set(key, passphrase);
return result; return result;
} }
}, },