Improvements for PGP decryption #600

This commit is contained in:
the-djmaze 2022-11-01 12:05:44 +01:00
parent bef1a378ca
commit 2cdadf3a6c
2 changed files with 61 additions and 46 deletions

View file

@ -132,23 +132,33 @@ export const
}
async decrypt(message) {
const sender = message.from[0].email,
armoredText = message.plain();
const armoredText = message.plain(),
emails = [...message.from,...message.to,...message.cc].validUnique();
if (!this.isEncrypted(armoredText)) {
return;
throw Error('Not armored text');
}
// Try OpenPGP.js
let result = await OpenPGPUserStore.decrypt(armoredText, sender);
let email = emails.find(email => {
let result = OpenPGPUserStore.getPrivateKeyFor(email.email);
if (result) {
console.log('Trying decrypt with '+result.id+' of '+email.email);
}
return result;
});
if (email) {
let result = await OpenPGPUserStore.decrypt(armoredText, email.email);
if (result?.data) {
return result;
}
console.error('OpenPGP decrypt failed');
}
// Try Mailvelope (does not support inline images)
try {
let key = await this.getMailvelopePrivateKeyFor(message.to[0].email);
if (key) {
let i = emails.length;
while (i--) {
if (await this.getMailvelopePrivateKeyFor(emails[i].email)) {
/**
* https://mailvelope.github.io/mailvelope/Mailvelope.html#createEncryptedFormContainer
* Creates an iframe to display an encrypted form
@ -160,12 +170,13 @@ export const
*/
const body = message.body;
body.textContent = '';
result = await mailvelope.createDisplayContainer(
let result = await mailvelope.createDisplayContainer(
'#'+body.id,
armoredText,
this.mailvelopeKeyring,
{
senderAddress: sender
senderAddress: message.from[0].email
// emails[i].email
}
);
if (result) {
@ -178,6 +189,8 @@ export const
return true;
}
}
break;
}
}
} catch (err) {
console.error(err);

View file

@ -529,9 +529,8 @@ export class MailMessageView extends AbstractViewRight {
pgpDecrypt() {
const oMessage = currentMessage();
PgpUserStore.decrypt(oMessage).then(result => {
if (result) {
if (result?.data) {
oMessage.pgpDecrypted(true);
if (result.data) {
MimeToMessage(result.data, oMessage);
oMessage.html() ? oMessage.viewHtml() : oMessage.viewPlain();
if (result.signatures?.length) {
@ -541,9 +540,12 @@ export class MailMessageView extends AbstractViewRight {
success: !!result.signatures.length
});
}
} else {
// TODO: translate
alert('Decryption failed, canceled or not possible');
}
}
});
})
.catch(e => console.error(e));
}
pgpVerify(/*self, event*/) {