From de9524c3e8fb744411e436c865a1627f8c8169b7 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 27 Feb 2023 12:06:46 +0800 Subject: [PATCH] Fix confusing unsubscribing url with email address --- .../content-handler/src/content-handler.ts | 4 +-- .../content-handler/test/newsletter.test.ts | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/content-handler/src/content-handler.ts b/packages/content-handler/src/content-handler.ts index 1a27344f0..7ef7dffd2 100644 --- a/packages/content-handler/src/content-handler.ts +++ b/packages/content-handler/src/content-handler.ts @@ -150,8 +150,8 @@ export abstract class ContentHandler { // e.g. List-Unsubscribe: , const decoded = rfc2047.decode(unSubHeader) return { - mailTo: decoded.match(/<(https?:\/\/[^>]*)>/)?.[1], - httpUrl: decoded.match(/]*)>/)?.[1], + httpUrl: decoded.match(/<(https?:\/\/[^>]*)>/)?.[1], + mailTo: decoded.match(/]*)>/)?.[1], } } diff --git a/packages/content-handler/test/newsletter.test.ts b/packages/content-handler/test/newsletter.test.ts index 0ffa6d666..a515cf486 100644 --- a/packages/content-handler/test/newsletter.test.ts +++ b/packages/content-handler/test/newsletter.test.ts @@ -516,4 +516,35 @@ describe('Newsletter email test', () => { expect(url1).to.not.eql(url2) }) }) + + describe('get unsubscribe from header', () => { + const mailTo = 'unsub@omnivore.com' + const httpUrl = 'https://omnivore.com/unsubscribe' + + it('returns mail to address if exists', () => { + const header = `, ` + + expect(new GenericHandler().parseUnsubscribe(header).mailTo).to.equal( + mailTo + ) + }) + + it('returns http url if exists', () => { + const header = `<${httpUrl}>` + + expect(new GenericHandler().parseUnsubscribe(header).httpUrl).to.equal( + httpUrl + ) + }) + + context('when unsubscribe header rfc2047 encoded', () => { + it('returns mail to address if exists', () => { + const header = `=?us-ascii?Q?=3Cmailto=3A654e9594-184c-4884-8e02-e6e58a3a6871+87e39b3d-c3ca-4be?= =?us-ascii?Q?b-ba4d-977cc2ba61e7+067a353f-f775-4f2c-?= =?us-ascii?Q?a5cc-978df38deeca=40unsub=2Ebeehiiv=2Ecom=3E=2C?= =?us-ascii?Q?_=3Chttps=3A=2F=2Fwww=2Emilkroad=2Ecom=2Fsubscribe=2F87e39b3d-c3ca-4beb-ba4d-97?= =?us-ascii?Q?7cc2ba61e7=2Fmanage=3Fpost=5Fid=3D067a353f-f775?= =?us-ascii?Q?-4f2c-a5cc-978df38deeca=3E?=',` + + expect(new GenericHandler().parseUnsubscribe(header).mailTo).to.equal( + '654e9594-184c-4884-8e02-e6e58a3a6871+87e39b3d-c3ca-4beb-ba4d-977cc2ba61e7+067a353f-f775-4f2c-a5cc-978df38deeca@unsub.beehiiv.com' + ) + }) + }) + }) })