diff --git a/dev/Common/Html.js b/dev/Common/Html.js index 8eeccdf81..86032db93 100644 --- a/dev/Common/Html.js +++ b/dev/Common/Html.js @@ -23,7 +23,14 @@ const tel = /(^|\s|\n|\/?>)(tel:(\+[0-9().-]+|[0-9*#().-]+(;phone-context=\+[0-9+().-]+)?))/g, // Strip tracking - stripParams = /^(utm_|ec_|fbclid|mc_eid|mkt_tok|_hsenc|vero_id|oly_enc_id|oly_anon_id|__s)/i, + /** TODO: implement other url strippers like from + * https://www.bleepingcomputer.com/news/security/new-firefox-privacy-feature-strips-urls-of-tracking-parameters/ + * https://github.com/newhouse/url-tracking-stripper + * https://github.com/svenjacobs/leon + * https://maxchadwick.xyz/tracking-query-params-registry/ + * https://github.com/M66B/FairEmail/blob/master/app/src/main/java/eu/faircode/email/UriHelper.java + */ + stripParams = /^(utm_|ec_|fbclid|mc_eid|mkt_tok|_hsenc|vero_id|oly_enc_id|oly_anon_id|__s|Referrer|mailing)/i, urlGetParam = (url, name) => new URL(url).searchParams.get(name) || url, base64Url = data => atob(data.replace(/_/g,'/').replace(/-/g,'+')), stripTracking = url => { @@ -44,18 +51,20 @@ const console.error(e); } return d?.url || url; + }) + // Remove invalid URL characters + .replace(/[\s<>]+/gi, ''); + try { + url = new URL(url); + let s = url.searchParams; + [...s.keys()].forEach(key => stripParams.test(key) && s.delete(key)); + return url.toString(); + } catch (e) { + console.dir({ + error:e, + url:url }); - url = new URL(url); - let s = url.searchParams; - [...s.keys()].forEach(key => stripParams.test(key) && s.delete(key)); - /** TODO: implement other url strippers like from - * https://www.bleepingcomputer.com/news/security/new-firefox-privacy-feature-strips-urls-of-tracking-parameters/ - * https://github.com/newhouse/url-tracking-stripper - * https://github.com/svenjacobs/leon - * https://maxchadwick.xyz/tracking-query-params-registry/ - * https://github.com/M66B/FairEmail/blob/master/app/src/main/java/eu/faircode/email/UriHelper.java - */ - return url.toString(); + } }; export const