Files
phishingclub/backend/cache/local.go
Ronni Skansing 33845aeec2 added delete campaign event when campaign is open
Signed-off-by: Ronni Skansing <rskansing@gmail.com>
2026-02-03 21:31:02 +01:00

97 lines
3.0 KiB
Go

package cache
import (
"sync/atomic"
"github.com/google/uuid"
"github.com/phishingclub/phishingclub/data"
)
// EventIDByName is a map of event names to event IDs
var EventIDByName = map[string]*uuid.UUID{}
// EventNameByID is a map of event ids to names
// this is not safe before the API is up an running entirely
var EventNameByID = map[string]string{}
var isUpdateAvailable atomic.Bool
func init() {
for _, name := range data.Events {
EventIDByName[name] = nil
}
isUpdateAvailable.Store(false)
}
func SetUpdateAvailable(updateAvailable bool) {
isUpdateAvailable.Store(updateAvailable)
}
func IsUpdateAvailable() bool {
return isUpdateAvailable.Load()
}
// TODO all priority event functions should be in utils or something, and the priority in the data package.
// var CampaignEventPriority = map[]
// Add priority rankings (higher number = higher priority)
// readonly
var CampaignEventPriority = map[string]int{
// campaign recipient events
data.EVENT_CAMPAIGN_RECIPIENT_REPORTED: 90,
data.EVENT_CAMPAIGN_RECIPIENT_CANCELLED: 80,
data.EVENT_CAMPAIGN_RECIPIENT_SUBMITTED_DATA: 70,
data.EVENT_CAMPAIGN_RECIPIENT_AFTER_PAGE_VISITED: 60,
data.EVENT_CAMPAIGN_RECIPIENT_BEFORE_PAGE_VISITED: 40,
data.EVENT_CAMPAIGN_RECIPIENT_PAGE_VISITED: 50,
data.EVENT_CAMPAIGN_RECIPIENT_DENY_PAGE_VISITED: 38,
data.EVENT_CAMPAIGN_RECIPIENT_EVASION_PAGE_VISITED: 35,
data.EVENT_CAMPAIGN_RECIPIENT_MESSAGE_READ: 30,
data.EVENT_CAMPAIGN_RECIPIENT_MESSAGE_FAILED: 20,
data.EVENT_CAMPAIGN_RECIPIENT_MESSAGE_SENT: 20,
data.EVENT_CAMPAIGN_RECIPIENT_SCHEDULED: 10,
// campaign events
data.EVENT_CAMPAIGN_CLOSED: 30,
data.EVENT_CAMPAIGN_ACTIVE: 20,
data.EVENT_CAMPAIGN_SELF_MANAGED: 20,
data.EVENT_CAMPAIGN_SCHEDULED: 10,
}
// IsMoreNotableCampaignRecipientEvent returns true if newEvent is more notable than currentEvent
func IsMoreNotableCampaignRecipientEvent(newEvent, currentEvent string) bool {
newPriority, newExists := CampaignEventPriority[newEvent]
currentPriority, currentExists := CampaignEventPriority[currentEvent]
// If either event doesn't exist in our priority map, treat it as lowest priority
if !newExists || !currentExists {
return false
}
return newPriority > currentPriority
}
func IsMoreNotableCampaignRecipientEventID(currentID, newID *uuid.UUID) bool {
if currentID == nil || currentID.String() == uuid.Nil.String() {
return true
}
if newID == nil {
return false
}
newEventName := EventNameByID[newID.String()]
currentEventName := EventNameByID[currentID.String()]
return IsMoreNotableCampaignRecipientEvent(newEventName, currentEventName)
}
// GetEventPriority returns the priority for an event type id, or -1 if not found
func GetEventPriority(eventTypeID *uuid.UUID) int {
if eventTypeID == nil {
return -1
}
eventName := EventNameByID[eventTypeID.String()]
priority, exists := CampaignEventPriority[eventName]
if !exists {
return -1
}
return priority
}