Files
phishingclub/backend/model/campaignEvent.go
T
RonniSkansing 0c5f7dcf37 rewrite for perf
Signed-off-by: RonniSkansing <rskansing@gmail.com>
2026-09-05 12:18:30 +02:00

42 lines
1.7 KiB
Go

package model
import (
"time"
"github.com/google/uuid"
"github.com/phishingclub/phishingclub/vo"
)
type CampaignEvent struct {
ID *uuid.UUID `json:"id"`
CreatedAt *time.Time `json:"createdAt"`
CampaignID *uuid.UUID `json:"campaignID"`
Campaign *Campaign `json:"campaign,omitempty"`
IP *vo.OptionalString64 `json:"ip"`
UserAgent *vo.OptionalString255 `json:"userAgent"`
Data *vo.OptionalString1MB `json:"data"`
Metadata *vo.OptionalString1MB `json:"metadata"`
// AnonymizedID is the pseudonym that links an anonymous campaign's events to each
// other and to the recipient row. It must never be sent to a client: a reader with
// it could group one person's events together and work out who they are by matching
// the send event to a recipient. Stats and grouping read it on the server.
AnonymizedID *uuid.UUID `json:"-"`
// if null the recipient has been anonymized
RecipientID *uuid.UUID `json:"recipientID"`
Recipient *Recipient `json:"recipient,omitempty"`
EventID *uuid.UUID `json:"eventID"`
}
// Anonymize strips identity from an event and stamps the stable pseudonym in its
// place. The event stays countable and groupable through the pseudonym but
// carries no recipient link, ip, user agent, submitted data or metadata. Used by
// anonymous campaigns, where every event is written this way from the outset.
func (e *CampaignEvent) Anonymize(anonymizedID *uuid.UUID) {
e.RecipientID = nil
e.AnonymizedID = anonymizedID
e.IP = vo.NewEmptyOptionalString64()
e.UserAgent = vo.NewEmptyOptionalString255()
e.Data = vo.NewEmptyOptionalString1MB()
e.Metadata = vo.NewEmptyOptionalString1MB()
}