mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-12-28 18:41:34 +08:00
Bugfix: stripTracking broke plain text view
This commit is contained in:
parent
a3585a859f
commit
7f63a1e82d
2 changed files with 17 additions and 16 deletions
|
@ -16,6 +16,12 @@ const
|
|||
|
||||
replaceWithChildren = node => node.replaceWith(...[...node.childNodes]),
|
||||
|
||||
url = /(^|\s|\n|\/?>)(https?:\/\/[-A-Z0-9+&#/%?=()~_|!:,.;]*[-A-Z0-9+&#/%=~()_|])/gi,
|
||||
// eslint-disable-next-line max-len
|
||||
email = /(^|\s|\n|\/?>)((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x21\x23-\x5b\x5d-\x7f]|\\[\x21\x23-\x5b\x5d-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x21-\x5a\x53-\x7f]|\\[\x21\x23-\x5b\x5d-\x7f])+)\]))/gi,
|
||||
// rfc3966
|
||||
tel = /(^|\s|\n|\/?>)(tel:(\+[0-9().-]+|[0-9*#().-]+(;phone-context=\+[0-9+().-]+)?))/g,
|
||||
|
||||
// Strip tracking
|
||||
urlGetParam = (url, name) => new URL(url).searchParams.get(name) || url,
|
||||
base64Url = data => atob(data.replace(/_/g,'/').replace(/-/g,'+')),
|
||||
|
@ -37,8 +43,8 @@ const
|
|||
}
|
||||
return d?.url || text;
|
||||
})
|
||||
.replace(/([?&])utm_[a-z]+=[^&?#]*/gi, '$1') // Urchin Tracking Module
|
||||
.replace(/([?&])ec_[a-z]+=[^&?#]*/gi, '$1') // Sitecore
|
||||
.replace(/(\?|&(amp;)?)utm_[a-z]+=[^&?#]*/gi, '$1') // Urchin Tracking Module
|
||||
.replace(/(\?|&(amp;)?)ec_[a-z]+=[^&?#]*/gi, '$1') // Sitecore
|
||||
/** 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
|
||||
|
@ -46,7 +52,7 @@ const
|
|||
* https://maxchadwick.xyz/tracking-query-params-registry/
|
||||
* https://github.com/M66B/FairEmail/blob/master/app/src/main/java/eu/faircode/email/UriHelper.java
|
||||
*/
|
||||
.replace(/([?&])&+/g, '$1');
|
||||
;
|
||||
|
||||
export const
|
||||
|
||||
|
@ -504,8 +510,7 @@ export const
|
|||
* @returns {string}
|
||||
*/
|
||||
plainToHtml = plain => {
|
||||
plain = stripTracking(plain)
|
||||
.toString()
|
||||
plain = plain.toString()
|
||||
.replace(/\r/g, '')
|
||||
.replace(/^>[> ]>+/gm, ([match]) => (match ? match.replace(/[ ]+/g, '') : match));
|
||||
|
||||
|
@ -553,6 +558,12 @@ export const
|
|||
.replace(/&/g, '&')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/</g, '<')
|
||||
.replace(url, (...m) => {
|
||||
m[2] = stripTracking(m[2]);
|
||||
return `${m[1]}<a href="${m[2]}" target="_blank">${m[2]}</a>`;
|
||||
})
|
||||
.replace(email, '$1<a href="mailto:$2">$2</a>')
|
||||
.replace(tel, '$1<a href="$2">$2</a>')
|
||||
.replace(/~~~blockquote~~~\s*/g, '<blockquote>')
|
||||
.replace(/\s*~~~\/blockquote~~~/g, '</blockquote>')
|
||||
.replace(/\n/g, '<br>');
|
||||
|
|
|
@ -22,12 +22,6 @@ import PreviewHTML from 'Html/PreviewMessage.html';
|
|||
import Remote from 'Remote/User/Fetch';
|
||||
|
||||
const
|
||||
url = /(^|\s|\n|\/?>)(https?:\/\/[-A-Z0-9+&#/%?=()~_|!:,.;]*[-A-Z0-9+&#/%=~()_|])/gi,
|
||||
// eslint-disable-next-line max-len
|
||||
email = /(^|\s|\n|\/?>)((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x21\x23-\x5b\x5d-\x7f]|\\[\x21\x23-\x5b\x5d-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x21-\x5a\x53-\x7f]|\\[\x21\x23-\x5b\x5d-\x7f])+)\]))/gi,
|
||||
// rfc3966
|
||||
tel = /(^|\s|\n|\/?>)(tel:(\+[0-9().-]+|[0-9*#().-]+(;phone-context=\+[0-9+().-]+)?))/g,
|
||||
|
||||
hcont = Element.fromHTML('<div area="hidden" style="position:absolute;left:-5000px"></div>'),
|
||||
getRealHeight = el => {
|
||||
hcont.innerHTML = el.outerHTML;
|
||||
|
@ -476,11 +470,7 @@ export class MessageModel extends AbstractModel {
|
|||
this.plain()
|
||||
.replace(/-----BEGIN PGP (SIGNED MESSAGE-----(\r?\n[a-z][^\r\n]+)+|SIGNATURE-----[\s\S]*)/, '')
|
||||
.trim()
|
||||
)
|
||||
// .replace(url, '$1<a href="$2" target="_blank" rel="noreferrer noopener">$2</a>')
|
||||
.replace(url, '$1<a href="$2" target="_blank">$2</a>')
|
||||
.replace(email, '$1<a href="mailto:$2">$2</a>')
|
||||
.replace(tel, '$1<a href="$2">$2</a>');
|
||||
);
|
||||
this.isHtml(false);
|
||||
this.hasImages(false);
|
||||
this.initView();
|
||||
|
|
Loading…
Reference in a new issue