From 65c313c0e48d620f73817dd4c27a3557bfd1c98e Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Mon, 17 Oct 2022 14:17:59 +0200 Subject: [PATCH] Also strip tracking in message images --- dev/Common/Html.js | 49 +++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/dev/Common/Html.js b/dev/Common/Html.js index 8b11c7076..add15da6d 100644 --- a/dev/Common/Html.js +++ b/dev/Common/Html.js @@ -35,29 +35,29 @@ const urlGetParam = (url, name) => new URL(url).searchParams.get(name) || url, base64Url = data => atob(data.replace(/_/g,'/').replace(/-/g,'+')), stripTracking = url => { - url = url - .replace(/tracking\.(printabout\.nl[^?]+)\?.*/i, (...m) => m[1]) - .replace(/(zalando\.nl[^?]+)\?.*/i, (...m) => m[1]) - .replace(/^.+(awstrack\.me|redditmail\.com)\/.+(https:%2F%2F[^/]+).*/i, (...m) => decodeURIComponent(m[2])) - .replace(/^.+(www\.google|safelinks\.protection\.outlook\.com).+$/i, () => urlGetParam(url, 'url')) - .replace(/^.+delivery-status\.com.+$/i, () => urlGetParam(url, 'fb')) - .replace(/^.+go\.dhlparcel\.nl.+\/([^/]+)$/i, (...m) => base64Url(m[1])) - // Mandrill - .replace(/^.+\/track\/click\/.+\?p=.+$/i, () => { - let d = urlGetParam(url, 'p'); - try { - d = JSON.parse(base64Url(d)); - if (d?.p) { - d = JSON.parse(d.p); - } - } catch (e) { - console.error(e); - } - return d?.url || url; - }) - // Remove invalid URL characters - .replace(/[\s<>]+/gi, ''); try { + url = url + .replace(/tracking\.(printabout\.nl[^?]+)\?.*/i, (...m) => m[1]) + .replace(/(zalando\.nl[^?]+)\?.*/i, (...m) => m[1]) + .replace(/^.+(awstrack\.me|redditmail\.com)\/.+(https:%2F%2F[^/]+).*/i, (...m) => decodeURIComponent(m[2])) + .replace(/^.+(www\.google|safelinks\.protection\.outlook\.com).+$/i, () => urlGetParam(url, 'url')) + .replace(/^.+delivery-status\.com.+$/i, () => urlGetParam(url, 'fb')) + .replace(/^.+go\.dhlparcel\.nl.+\/([A-Za-z0-9_-]+)$/i, (...m) => base64Url(m[1])) + // Mandrill + .replace(/^.+\/track\/click\/.+\?p=.+$/i, () => { + let d = urlGetParam(url, 'p'); + try { + d = JSON.parse(base64Url(d)); + if (d?.p) { + d = JSON.parse(d.p); + } + } catch (e) { + console.error(e); + } + return d?.url || url; + }) + // Remove invalid URL characters + .replace(/[\s<>]+/gi, ''); url = new URL(url); let s = url.searchParams; [...s.keys()].forEach(key => stripParams.test(key) && s.delete(key)); @@ -281,7 +281,7 @@ export const let skipStyle = false; if (hasAttribute('src')) { - value = getAttribute('src'); + value = stripTracking(getAttribute('src')); delAttribute('src'); if ('IMG' === name) { @@ -294,7 +294,8 @@ export const 'email.microsoftemail.com/open', 'github.com/notifications/beacon/', 'mandrillapp.com/track/open', - 'list-manage.com/track/open' + 'list-manage.com/track/open', + 'google-analytics.com' ].filter(uri => value.toLowerCase().includes(uri)).length )) { skipStyle = true;