mirror of
https://github.com/phishingclub/phishingclub.git
synced 2026-02-12 16:12:44 +00:00
85 lines
2.9 KiB
Go
85 lines
2.9 KiB
Go
package database
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
const (
|
|
CAMPAIGN_TEMPLATE_TABLE = "campaign_templates"
|
|
)
|
|
|
|
// CampaignTemplate is gorm data model
|
|
type CampaignTemplate struct {
|
|
ID *uuid.UUID `gorm:"primary_key;not null;unique;type:uuid"`
|
|
CreatedAt *time.Time `gorm:"not null;index;"`
|
|
UpdatedAt *time.Time `gorm:"not null;index;"`
|
|
|
|
Name string `gorm:"not null;index;uniqueIndex:idx_campaign_templates_unique_name_and_company_id;"`
|
|
|
|
URLPath string `gorm:"not null;default:'';index"`
|
|
|
|
// IsUsable indicates if a template is usable based on if it has all the required
|
|
// data such as domainID, landingPage and etc to be used in a campaign
|
|
IsUsable bool `gorm:"not null;default:false;index"`
|
|
|
|
// has-a
|
|
LandingPageID *uuid.UUID `gorm:"type:uuid;index;"`
|
|
LandingPage *Page `gorm:"references:LandingPage;foreignKey:LandingPageID;references:ID;"`
|
|
|
|
// landing page can also be a proxy
|
|
LandingProxyID *uuid.UUID `gorm:"type:uuid;index;"`
|
|
LandingProxy *Proxy `gorm:"foreignKey:LandingProxyID;references:ID;"`
|
|
|
|
DomainID *uuid.UUID `gorm:"type:uuid;index;"`
|
|
Domain *Domain `gorm:"foreignKey:DomainID"`
|
|
|
|
URLIdentifierID *uuid.UUID `gorm:"not null;type:uuid;index"`
|
|
URLIdentifier *Identifier `gorm:"references:foreignKey:URLIdentifierID;references:ID"`
|
|
|
|
StateIdentifierID *uuid.UUID `gorm:"type:uuid;index"`
|
|
StateIdentifier *Identifier `gorm:"references:foreignKey:StateIdentifierID;references:ID"`
|
|
|
|
// has-a optional
|
|
BeforeLandingPageID *uuid.UUID `gorm:"type:uuid;index"`
|
|
BeforeLandingPage *Page `gorm:"foreignkey:BeforeLandingPageID;references:ID"`
|
|
|
|
// before landing page can also be a proxy
|
|
BeforeLandingProxyID *uuid.UUID `gorm:"type:uuid;index"`
|
|
BeforeLandingProxy *Proxy `gorm:"foreignKey:BeforeLandingProxyID;references:ID"`
|
|
|
|
AfterLandingPageID *uuid.UUID `gorm:"type:uuid;index"`
|
|
AfterLandingPage *Page `gorm:"foreignKey:AfterLandingPageID;references:ID"`
|
|
|
|
// after landing page can also be a proxy
|
|
AfterLandingProxyID *uuid.UUID `gorm:"type:uuid;index"`
|
|
AfterLandingProxy *Proxy `gorm:"foreignKey:AfterLandingProxyID;references:ID"`
|
|
|
|
AfterLandingPageRedirectURL string `gorm:"not null;default:'';"`
|
|
|
|
EmailID *uuid.UUID `gorm:"type:uuid;index;"`
|
|
Email *Email `gorm:"foreignKey:EmailID;references:ID;"`
|
|
|
|
SMTPConfigurationID *uuid.UUID `gorm:"type:uuid;index;"`
|
|
SMTPConfiguration *SMTPConfiguration `gorm:"foreignKey:SMTPConfigurationID"`
|
|
|
|
APISenderID *uuid.UUID `gorm:"type:uuid;index;"`
|
|
APISender *APISender `gorm:"foreignKey:APISenderID"`
|
|
|
|
// can belong-to
|
|
CompanyID *uuid.UUID `gorm:"type:uuid;index;uniqueIndex:idx_campaign_templates_unique_name_and_company_id"`
|
|
Company *Company `gorm:"foreignKey:CompanyID"`
|
|
}
|
|
|
|
func (e *CampaignTemplate) Migrate(db *gorm.DB) error {
|
|
// SQLITE
|
|
// ensure name + company id is unique
|
|
return UniqueIndexNameAndNullCompanyID(db, "campaign_templates")
|
|
}
|
|
|
|
func (CampaignTemplate) TableName() string {
|
|
return CAMPAIGN_TEMPLATE_TABLE
|
|
}
|