mirror of
https://github.com/warmbly/warmbly.git
synced 2026-09-05 16:02:48 +00:00
52 lines
1.8 KiB
Go
52 lines
1.8 KiB
Go
package tasks
|
|
|
|
import "github.com/warmbly/warmbly/internal/models"
|
|
|
|
// trackingOverrideIgnored is a tracking domain that was configured but not
|
|
// used, with the sentence the campaign log records for it.
|
|
type trackingOverrideIgnored struct {
|
|
Scope string
|
|
Domain string
|
|
Message string
|
|
}
|
|
|
|
// resolveTrackingHost picks the host open pixels and click tickets are built
|
|
// from: a VERIFIED campaign override wins, then a VERIFIED mailbox domain,
|
|
// otherwise this install's own tracking host.
|
|
//
|
|
// Only a verified override is honored. An unresolved host could point tracking
|
|
// at a target somebody else controls (SSRF-adjacent, matching the
|
|
// webhook-safety posture), and an unresolvable one is worse than no tracking:
|
|
// every link in the email becomes a ticket on a host that does not answer, so
|
|
// the recipient cannot reach the destination at all.
|
|
func resolveTrackingHost(defaultHost string, account *models.Email, campaign *models.Campaign) (string, []trackingOverrideIgnored) {
|
|
host := defaultHost
|
|
var ignored []trackingOverrideIgnored
|
|
|
|
if account != nil && account.TrackingDomain != "" {
|
|
if account.TrackingDomainVerified {
|
|
host = account.TrackingDomain
|
|
} else {
|
|
ignored = append(ignored, trackingOverrideIgnored{
|
|
Scope: "mailbox",
|
|
Domain: account.TrackingDomain,
|
|
Message: "Mailbox tracking domain is not verified; tracking through the shared host instead",
|
|
})
|
|
}
|
|
}
|
|
|
|
if campaign != nil && campaign.TrackingDomain != "" {
|
|
if campaign.TrackingDomainVerified {
|
|
host = campaign.TrackingDomain
|
|
} else {
|
|
ignored = append(ignored, trackingOverrideIgnored{
|
|
Scope: "campaign",
|
|
Domain: campaign.TrackingDomain,
|
|
Message: "Campaign tracking domain is not verified; tracking through the mailbox default instead",
|
|
})
|
|
}
|
|
}
|
|
|
|
return host, ignored
|
|
}
|