Mailspring/internal_packages/message-list/lib/plugins/tracking-pixels-extension.coffee
Juan Tejada cd1ee3f672 fix(extension-adapter): Update adapter to support all versions of extension api we've used
Summary:
- Rewrites composer extension adpater to support all versions of the
  ComposerExtension API we've ever declared. This will allow old plugins (or
  plugins that haven't been reinstalled after update) to keep functioning
  without breaking N1
- Adds specs

Test Plan: - Unit tests

Reviewers: evan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2399
2015-12-30 15:11:37 -05:00

122 lines
3.2 KiB
CoffeeScript

{MessageViewExtension, RegExpUtils} = require 'nylas-exports'
TrackingBlacklist = [{
name: 'Sidekick',
pattern: 't.signaux',
homepage: 'http://getsidekick.com'
}, {
name: 'Sidekick',
pattern: 't.senal',
homepage: 'http://getsidekick.com'
}, {
name: 'Sidekick',
pattern: 't.sidekickopen',
homepage: 'http://getsidekick.com'
}, {
name: 'Sidekick',
pattern: 't.sigopn',
homepage: 'http://getsidekick.com'
}, {
name: 'Banana Tag',
pattern: 'bl-1.com',
homepage: 'http://bananatag.com'
}, {
name: 'Boomerang',
pattern: 'mailstat.us/tr',
homepage: 'http://boomeranggmail.com'
}, {
name: 'Cirrus Inisght',
pattern: 'tracking.cirrusinsight.com',
homepage: 'http://cirrusinsight.com'
}, {
name: 'Yesware',
pattern: 'app.yesware.com',
homepage: 'http://yesware.com'
}, {
name: 'Yesware',
pattern: 't.yesware.com',
homepage: 'http://yesware.com'
}, {
name: 'Streak',
pattern: 'mailfoogae.appspot.com',
homepage: 'http://streak.com'
}, {
name: 'LaunchBit',
pattern: 'launchbit.com/taz-pixel',
homepage: 'http://launchbit.com'
}, {
name: 'MailChimp',
pattern: 'list-manage.com/track',
homepage: 'http://mailchimp.com'
}, {
name: 'Postmark',
pattern: 'cmail1.com/t',
homepage: 'http://postmarkapp.com'
}, {
name: 'iContact',
pattern: 'click.icptrack.com/icp/',
homepage: 'http://icontact.com'
}, {
name: 'Infusionsoft',
pattern: 'infusionsoft.com/app/emailOpened',
homepage: 'http://infusionsoft.com'
}, {
name: 'Intercom',
pattern: 'via.intercom.io/o',
homepage: 'http://intercom.io'
}, {
name: 'Mandrill',
pattern: 'mandrillapp.com/track',
homepage: 'http://mandrillapp.com'
}, {
name: 'Hubspot',
pattern: 't.hsms06.com',
homepage: 'http://hubspot.com'
}, {
name: 'RelateIQ',
pattern: 'app.relateiq.com/t.png',
homepage: 'http://relateiq.com'
}, {
name: 'RJ Metrics',
pattern: 'go.rjmetrics.com',
homepage: 'http://rjmetrics.com'
}, {
name: 'Mixpanel',
pattern: 'api.mixpanel.com/track',
homepage: 'http://mixpanel.com'
}, {
name: 'Front App',
pattern: 'web.frontapp.com/api',
homepage: 'http://frontapp.com'
}, {
name: 'Mailtrack.io',
pattern: 'mailtrack.io/trace',
homepage: 'http://mailtrack.io'
}, {
name: 'Salesloft',
pattern: 'sdr.salesloft.com/email_trackers',
homepage: 'http://salesloft.com'
}]
class TrackingPixelsExtension extends MessageViewExtension
@formatMessageBody: ({message}) ->
return unless message.isFromMe()
regex = RegExpUtils.imageTagRegex()
body = message.body
spliceRegions = []
# Identify img tags that should be cut out
while (result = regex.exec(body)) isnt null
for item in TrackingBlacklist
if result[1].indexOf(item.pattern) > 0
spliceRegions.push(start: result.index, end: result.index + result[0].length)
continue
# Remove them all, from the end of the string to the start
spliceRegions.reverse().forEach ({start, end}) ->
body = body.substr(0, start) + body.substr(end)
message.body = body
module.exports = TrackingPixelsExtension