From c66fc3d3ed1d6ce60f3bd7bf236a57361e4988a8 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 4 Jan 2022 09:41:30 +0000 Subject: [PATCH] Show badge on pgp block's renderErr --- .../pgp-block-decrypt-module.ts | 3 ++- .../pgp-block-error-module.ts | 7 ++++++- .../google/exported-messages/corrupted-1.json | 18 ++++++++++++++++++ test/source/mock/google/google-data.ts | 6 ++++-- test/source/tests/decrypt.ts | 9 +++++++-- 5 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 test/source/mock/google/exported-messages/corrupted-1.json diff --git a/extension/chrome/elements/pgp_block_modules/pgp-block-decrypt-module.ts b/extension/chrome/elements/pgp_block_modules/pgp-block-decrypt-module.ts index aff6f32f1cc..1b4c4d1437f 100644 --- a/extension/chrome/elements/pgp_block_modules/pgp-block-decrypt-module.ts +++ b/extension/chrome/elements/pgp_block_modules/pgp-block-decrypt-module.ts @@ -36,7 +36,8 @@ export class PgpBlockViewDecryptModule { this.view.signature.parsedSignature = parsed.signature; await this.decryptAndRender(Buf.fromUtfStr(parsed.rawSignedContent), verificationPubs); } else { - await this.view.errorModule.renderErr('Error: could not properly parse signed message', parsed.rawSignedContent || parsed.text || parsed.html || mimeMsg.toUtfStr()); + await this.view.errorModule.renderErr('Error: could not properly parse signed message', + parsed.rawSignedContent || parsed.text || parsed.html || mimeMsg.toUtfStr(), true); } } else if (this.view.encryptedMsgUrlParam && !forcePullMsgFromApi) { // ascii armored message supplied this.view.renderModule.renderText(this.view.signature ? 'Verifying..' : 'Decrypting...'); diff --git a/extension/chrome/elements/pgp_block_modules/pgp-block-error-module.ts b/extension/chrome/elements/pgp_block_modules/pgp-block-error-module.ts index 6672bfe8776..0555f4f13ea 100644 --- a/extension/chrome/elements/pgp_block_modules/pgp-block-error-module.ts +++ b/extension/chrome/elements/pgp_block_modules/pgp-block-error-module.ts @@ -17,8 +17,13 @@ export class PgpBlockViewErrorModule { constructor(private view: PgpBlockView) { } - public renderErr = async (errBoxContent: string, renderRawMsg: string | undefined) => { + public renderErr = async (errBoxContent: string, renderRawMsg: string | undefined, isParseError = false) => { this.view.renderModule.setFrameColor('red'); + if (isParseError) { + this.view.renderModule.renderSignatureStatus('parse error'); + } else { + this.view.renderModule.renderEncryptionStatus('decrypt error'); + } const showRawMsgPrompt = renderRawMsg ? 'show original message' : ''; await this.view.renderModule.renderContent(`
${errBoxContent.replace(/\n/g, '
')}
${showRawMsgPrompt}`, true); $('.action_show_raw_pgp_block').click(this.view.setHandler(async () => { // this may contain content missing MDC diff --git a/test/source/mock/google/exported-messages/corrupted-1.json b/test/source/mock/google/exported-messages/corrupted-1.json new file mode 100644 index 00000000000..a1ac1530028 --- /dev/null +++ b/test/source/mock/google/exported-messages/corrupted-1.json @@ -0,0 +1,18 @@ +{ + "acctEmail": "flowcrypt.compatibility@gmail.com", + "full": { + "id": "corrupted-1", + "threadId": "corrupted-1", + "historyId": "corrupted-1" + }, + "raw": { + "id": "corrupted-1", + "threadId": "corrupted-1", + "labelIds": [ + "INBOX" + ], + "sizeEstimate": 2, + "raw": "RSo", + "historyId": "corrupted-1" + } +} \ No newline at end of file diff --git a/test/source/mock/google/google-data.ts b/test/source/mock/google/google-data.ts index 2377f4dc413..40d04ecd8a1 100644 --- a/test/source/mock/google/google-data.ts +++ b/test/source/mock/google/google-data.ts @@ -154,8 +154,10 @@ export class GoogleData { msgCopy.raw = undefined; } if (format === 'metadata' || format === 'raw') { - msgCopy.payload!.body = undefined; - msgCopy.payload!.parts = undefined; + if (msgCopy.payload) { + msgCopy.payload.body = undefined; + msgCopy.payload.parts = undefined; + } } return msgCopy; }; diff --git a/test/source/tests/decrypt.ts b/test/source/tests/decrypt.ts index c8c34fb33ac..7d7ebe1058e 100644 --- a/test/source/tests/decrypt.ts +++ b/test/source/tests/decrypt.ts @@ -686,10 +686,10 @@ XZ8r4OC6sguP/yozWlkG+7dDxsgKQVBENeG6Lw== })); ava.default('decrypt - wrong message - checksum throws error', testWithBrowser('compatibility', async (t, browser) => { - const acctEmail = 'flowcrypt.compatibility@gmail.com'; const threadId = '15f7ffb9320bd79e'; const expectedContent = 'Ascii armor integrity check on message failed'; - await InboxPageRecipe.checkDecryptMsg(t, browser, { acctEmail, threadId, expectedContent }); + const params = `?frame_id=&threadId=${threadId}&msgId=${threadId}&senderEmail=&account_email=flowcrypt.compatibility%40gmail.com`; + await BrowserRecipe.pgpBlockVerifyDecryptedContent(t, browser, { params, content: [expectedContent], encryption: 'decrypt error', signature: '' }); })); ava.default('decrypt - inbox - encrypted message inside signed', testWithBrowser('compatibility', async (t, browser) => { @@ -735,6 +735,11 @@ XZ8r4OC6sguP/yozWlkG+7dDxsgKQVBENeG6Lw== await pgpBlockPage.waitForContent('@container-err-text', 'API path traversal forbidden'); })); + ava.default(`decrypt - signed only - parse error in a badge`, testWithBrowser('compatibility', async (t, browser) => { + const params = "?frame_id=&msgId=corrupted-1&signature=___cu_true___&senderEmail=&account_email=flowcrypt.compatibility%40gmail.com"; + await BrowserRecipe.pgpBlockVerifyDecryptedContent(t, browser, { params, content: [], encryption: '', signature: 'parse error' }); + })); + ava.default(`decrypt - try path traversal forward slash workaround`, testWithBrowser('compatibility', async (t, browser) => { const params = "?frame_id=frame_TWloVRhvZE&message=&message_id=..\\test&senderEmail=&is_outgoing=___cu_false___&account_email=flowcrypt.compatibility%40gmail.com"; const pgpHostPage = await browser.newPage(t, `chrome/dev/ci_pgp_host_page.htm${params}`);