Documentation ¶
Overview ¶
Package models implements the types and structs needed in gophish.
Index ¶
- Constants
- Variables
- func AddEvent(e *Event, campaignID int64) error
- func CompleteCampaign(id int64, uid int64) error
- func DeleteCampaign(id int64) error
- func DeleteGroup(g *Group) error
- func DeleteIMAP(uid int64) error
- func DeletePage(id int64, uid int64) error
- func DeleteSMTP(id int64, uid int64) error
- func DeleteTemplate(id int64, uid int64) error
- func DeleteUser(id int64) error
- func DeleteWebhook(id int64) error
- func EnsureEnoughAdmins() error
- func ExecuteTemplate(text string, data interface{}) (string, error)
- func GenerateMailLog(c *Campaign, r *Result, sendDate time.Time) error
- func LockMailLogs(ms []*MailLog, lock bool) error
- func PostCampaign(c *Campaign, uid int64) error
- func PostEmailRequest(s *EmailRequest) error
- func PostGroup(g *Group) error
- func PostIMAP(im *IMAP, uid int64) error
- func PostPage(p *Page) error
- func PostSMTP(s *SMTP) error
- func PostTemplate(t *Template) error
- func PostWebhook(wh *Webhook) error
- func PutGroup(g *Group) error
- func PutPage(p *Page) error
- func PutSMTP(s *SMTP) error
- func PutTemplate(t *Template) error
- func PutUser(u *User) error
- func PutWebhook(wh *Webhook) error
- func Setup(c *config.Config) error
- func SuccessfulLogin(im *IMAP) error
- func UnlockAllMailLogs() error
- func UpdateTarget(tx *gorm.DB, target Target) error
- func ValidateTemplate(text string) error
- type Attachment
- type BaseRecipient
- type Campaign
- type CampaignResults
- type CampaignStats
- type CampaignSummaries
- type CampaignSummary
- type Dialer
- type EmailRequest
- type Event
- type EventDetails
- type EventError
- type Flash
- type Group
- type GroupSummaries
- type GroupSummary
- type GroupTarget
- type Header
- type IMAP
- type MailLog
- func (m *MailLog) Backoff(reason error) error
- func (m *MailLog) CacheCampaign(campaign *Campaign) error
- func (m *MailLog) Error(e error) error
- func (m *MailLog) Generate(msg *gomail.Message) error
- func (m *MailLog) GetDialer() (mailer.Dialer, error)
- func (m *MailLog) Lock() error
- func (m *MailLog) Success() error
- func (m *MailLog) Unlock() error
- type Page
- type Permission
- type PhishingTemplateContext
- type Response
- type Result
- func (r *Result) GenerateId(tx *gorm.DB) error
- func (r *Result) HandleClickedLink(details EventDetails) error
- func (r *Result) HandleEmailBackoff(err error, sendDate time.Time) error
- func (r *Result) HandleEmailError(err error) error
- func (r *Result) HandleEmailOpened(details EventDetails) error
- func (r *Result) HandleEmailReport(details EventDetails) error
- func (r *Result) HandleEmailSent() error
- func (r *Result) HandleFormSubmit(details EventDetails) error
- func (r *Result) UpdateGeo(addr string) error
- type Role
- type SMTP
- type Target
- type Template
- type TemplateContext
- type User
- type ValidationContext
- type Webhook
Constants ¶
const ( CampaignInProgress string = "In progress" CampaignQueued string = "Queued" CampaignCreated string = "Created" CampaignEmailsSent string = "Emails Sent" CampaignComplete string = "Completed" EventSent string = "Email Sent" EventSendingError string = "Error Sending Email" EventOpened string = "Email Opened" EventClicked string = "Clicked Link" EventDataSubmit string = "Submitted Data" EventReported string = "Email Reported" EventProxyRequest string = "Proxied request" StatusSuccess string = "Success" StatusQueued string = "Queued" StatusSending string = "Sending" StatusUnknown string = "Unknown" StatusScheduled string = "Scheduled" StatusRetry string = "Retrying" Error string = "Error" )
const ( // RoleAdmin is used for Gophish system administrators. Users with this // role have the ability to manage all objects within Gophish, as well as // system-level configuration, such as users and URLs. RoleAdmin = "admin" // RoleUser is used for standard Gophish users. Users with this role can // create, manage, and view Gophish objects and campaigns. RoleUser = "user" // PermissionViewObjects determines if a role can view standard Gophish // objects such as campaigns, groups, landing pages, etc. PermissionViewObjects = "view_objects" // PermissionModifyObjects determines if a role can create and modify // standard Gophish objects. PermissionModifyObjects = "modify_objects" // PermissionModifySystem determines if a role can manage system-level // configuration. PermissionModifySystem = "modify_system" )
const DefaultAdminUsername = "admin"
DefaultAdminUsername is the default username for the administrative user
const DefaultIMAPFolder = "INBOX"
const DefaultIMAPFreq = 60 // Every 60 seconds
const InitialAdminApiToken = "BLUEPHISH_INITIAL_ADMIN_API_TOKEN"
InitialAdminApiToken is the environment variable that specifies the API token to seed the initial root login instead of generating one randomly
const InitialAdminPassword = "BLUEPHISH_INITIAL_ADMIN_PASSWORD"
InitialAdminPassword is the environment variable that specifies which password to use for the initial root login instead of generating one randomly
const InitialAdminPasswortValue = "bluephish"
const MaxDatabaseConnectionAttempts int = 10
const PreviewPrefix = "preview-"
PreviewPrefix is the standard prefix added to the rid parameter when sending test emails.
const RecipientParameter = "rid"
RecipientParameter is the URL parameter that points to the result ID for a recipient.
Variables ¶
var ErrCampaignNameNotSpecified = errors.New("Campaign name not specified")
ErrCampaignNameNotSpecified indicates there was no template given by the user
var ErrEmailNotSpecified = errors.New("No email address specified")
ErrEmailNotSpecified is thrown when no email is specified for the Target
var ErrFromAddressNotSpecified = errors.New("No From Address specified")
ErrFromAddressNotSpecified is thrown when there is no "From" address specified in the SMTP configuration
var ErrGroupNameNotSpecified = errors.New("Group name not specified")
ErrGroupNameNotSpecified is thrown when a group name is not specified
var ErrGroupNotFound = errors.New("Group not found")
ErrGroupNotFound indicates a group specified by the user does not exist in the database
var ErrGroupNotSpecified = errors.New("No groups specified")
ErrGroupNotSpecified indicates there was no template given by the user
var ErrHostNotSpecified = errors.New("No SMTP Host specified")
ErrHostNotSpecified is thrown when there is no Host specified in the SMTP configuration
var ErrIMAPHostNotSpecified = errors.New("No IMAP Host specified")
ErrIMAPHostNotSpecified is thrown when there is no Host specified in the IMAP configuration
var ErrIMAPPasswordNotSpecified = errors.New("No Password specified")
ErrIMAPPasswordNotSpecified is thrown when there is no Password specified in the IMAP configuration
var ErrIMAPPortNotSpecified = errors.New("No IMAP Port specified")
ErrIMAPPortNotSpecified is thrown when there is no Port specified in the IMAP configuration
var ErrIMAPUsernameNotSpecified = errors.New("No Username specified")
ErrIMAPUsernameNotSpecified is thrown when there is no Username specified in the IMAP configuration
var ErrInvalidHost = errors.New("Invalid SMTP server address")
ErrInvalidHost indicates that the SMTP server string is invalid
var ErrInvalidIMAPFreq = errors.New("Invalid polling frequency")
ErrInvalidIMAPFreq is thrown when the frequency for polling the IMAP server is invalid
var ErrInvalidIMAPHost = errors.New("Invalid IMAP server address")
ErrInvalidIMAPHost indicates that the IMAP server string is invalid
var ErrInvalidIMAPPort = errors.New("Invalid IMAP Port")
ErrInvalidIMAPPort indicates that the IMAP Port is invalid
var ErrInvalidSendByDate = errors.New("The launch date must be before the \"send emails by\" date")
ErrInvalidSendByDate indicates that the user specified a send by date that occurs before the launch date
var ErrMaxSendAttempts = errors.New("max send attempts exceeded")
ErrMaxSendAttempts is thrown when the maximum number of sending attempts for a given MailLog is exceeded.
var ErrModifyingOnlyAdmin = errors.New("Cannot remove the only administrator")
ErrModifyingOnlyAdmin occurs when there is an attempt to modify the only user account with the Admin role in such a way that there will be no user accounts left in Gophish with that role.
var ErrNameNotSpecified = errors.New("Name can't be empty")
ErrNameNotSpecified indicates there was no name specified
var ErrNoTargetsSpecified = errors.New("No targets specified")
ErrNoTargetsSpecified is thrown when no targets are specified by the user
var ErrPageNameNotSpecified = errors.New("Page Name not specified")
ErrPageNameNotSpecified is thrown if the name of the landing page is blank.
var ErrPageNotFound = errors.New("Page not found")
ErrPageNotFound indicates a page specified by the user does not exist in the database
var ErrPageNotSpecified = errors.New("No landing page specified")
ErrPageNotSpecified indicates a landing page was not provided for the campaign
var ErrSMTPNotFound = errors.New("Sending profile not found")
ErrSMTPNotFound indicates a sending profile specified by the user does not exist in the database
var ErrSMTPNotSpecified = errors.New("No sending profile specified")
ErrSMTPNotSpecified indicates a sending profile was not provided for the campaign
var ErrTemplateMissingParameter = errors.New("Need to specify at least plaintext or HTML content")
ErrTemplateMissingParameter is thrown when a needed parameter is not provided
var ErrTemplateNameNotSpecified = errors.New("Template name not specified")
ErrTemplateNameNotSpecified is thrown when a template name is not specified
var ErrTemplateNotFound = errors.New("Template not found")
ErrTemplateNotFound indicates the template specified does not exist in the database
var ErrTemplateNotSpecified = errors.New("No email template specified")
ErrTemplateNotSpecified indicates there was no template given by the user
var ErrURLNotSpecified = errors.New("URL can't be empty")
ErrURLNotSpecified indicates there was no URL specified
var MaxSendAttempts = 8
MaxSendAttempts set to 8 since we exponentially backoff after each failed send attempt. This will give us a maximum send delay of 256 minutes, or about 4.2 hours.
Functions ¶
func CompleteCampaign ¶
CompleteCampaign effectively "ends" a campaign. Any future emails clicked will return a simple "404" page.
func DeleteCampaign ¶
DeleteCampaign deletes the specified campaign
func DeleteGroup ¶
DeleteGroup deletes a given group by group ID and user ID
func DeleteIMAP ¶
DeleteIMAP deletes the existing IMAP in the database.
func DeletePage ¶
DeletePage deletes an existing page in the database. An error is returned if a page with the given user id and page id is not found.
func DeleteSMTP ¶
DeleteSMTP deletes an existing SMTP in the database. An error is returned if a SMTP with the given user id and SMTP id is not found.
func DeleteTemplate ¶
DeleteTemplate deletes an existing template in the database. An error is returned if a template with the given user id and template id is not found.
func DeleteUser ¶
DeleteUser deletes the given user. To ensure that there is always at least one user account with the Admin role, this function will refuse to delete the last Admin.
func DeleteWebhook ¶
DeleteWebhook deletes an existing webhook in the database. An error is returned if a webhook with the given id isn't found.
func EnsureEnoughAdmins ¶
func EnsureEnoughAdmins() error
EnsureEnoughAdmins ensures that there is more than one user account in Gophish with the Admin role. This function is meant to be called before modifying a user account with the Admin role in a non-revokable way.
func ExecuteTemplate ¶
ExecuteTemplate creates a templated string based on the provided template body and data.
func GenerateMailLog ¶
GenerateMailLog creates a new maillog for the given campaign and result. It sets the initial send date to match the campaign's launch date.
func LockMailLogs ¶
LockMailLogs locks or unlocks a slice of maillogs for processing.
func PostCampaign ¶
PostCampaign inserts a campaign and all associated records into the database.
func PostEmailRequest ¶
func PostEmailRequest(s *EmailRequest) error
PostEmailRequest stores a SendTestEmailRequest in the database.
func PostTemplate ¶
PostTemplate creates a new template in the database.
func PostWebhook ¶
PostWebhook creates a new webhook in the database.
func PutPage ¶
PutPage edits an existing Page in the database. Per the PUT Method RFC, it presumes all data for a page is provided.
func PutSMTP ¶
PutSMTP edits an existing SMTP in the database. Per the PUT Method RFC, it presumes all data for a SMTP is provided.
func PutTemplate ¶
PutTemplate edits an existing template in the database. Per the PUT Method RFC, it presumes all data for a template is provided.
func PutWebhook ¶
PutWebhook edits an existing webhook in the database.
func Setup ¶
Setup initializes the database and runs any needed migrations.
First, it establishes a connection to the database, then runs any migrations newer than the version the database is on.
Once the database is up-to-date, we create an admin user (if needed) that has a randomly generated API key and password.
func SuccessfulLogin ¶
func UnlockAllMailLogs ¶
func UnlockAllMailLogs() error
UnlockAllMailLogs removes the processing lock for all maillogs in the database. This is intended to be called when Gophish is started so that any previously locked maillogs can resume processing.
func UpdateTarget ¶
UpdateTarget updates the given target information in the database.
func ValidateTemplate ¶
ValidateTemplate ensures that the provided text in the page or template uses the supported template variables correctly.
Types ¶
type Attachment ¶
type Attachment struct { Id int64 `json:"-"` TemplateId int64 `json:"-"` Content string `json:"content"` Type string `json:"type"` Name string `json:"name"` }
Attachment contains the fields and methods for an email attachment
type BaseRecipient ¶
type BaseRecipient struct { Email string `json:"email"` FirstName string `json:"first_name"` LastName string `json:"last_name"` Position string `json:"position"` }
BaseRecipient contains the fields for a single recipient. This is the base struct used in members of groups and campaign results.
func (*BaseRecipient) FormatAddress ¶
func (r *BaseRecipient) FormatAddress() string
FormatAddress returns the email address to use in the "To" header of the email
type Campaign ¶
type Campaign struct { Id int64 `json:"id"` UserId int64 `json:"-"` Name string `json:"name" sql:"not null"` CreatedDate time.Time `json:"created_date"` LaunchDate time.Time `json:"launch_date"` SendByDate time.Time `json:"send_by_date"` CompletedDate time.Time `json:"completed_date"` TemplateId int64 `json:"-"` Template Template `json:"template"` PageId int64 `json:"-"` Page Page `json:"page"` Status string `json:"status"` Results []Result `json:"results,omitempty"` Groups []Group `json:"groups,omitempty"` Events []Event `json:"timeline,omitempty"` SMTPId int64 `json:"-"` SMTP SMTP `json:"smtp"` URL string `json:"url"` }
Campaign is a struct representing a created campaign
func GetCampaign ¶
GetCampaign returns the campaign, if it exists, specified by the given id and user_id.
func GetCampaignMailContext ¶
GetCampaignMailContext returns a campaign object with just the relevant data needed to generate and send emails. This includes the top-level metadata, the template, and the sending profile.
This should only ever be used if you specifically want this lightweight context, since it returns a non-standard campaign object. ref: #1726
func GetCampaigns ¶
GetCampaigns returns the campaigns owned by the given user.
func GetQueuedCampaigns ¶
GetQueuedCampaigns returns the campaigns that are queued up for this given minute
func (*Campaign) UpdateStatus ¶
UpdateStatus changes the campaign status appropriately
type CampaignResults ¶
type CampaignResults struct { Id int64 `json:"id"` Name string `json:"name"` Status string `json:"status"` Results []Result `json:"results,omitempty"` Events []Event `json:"timeline,omitempty"` }
CampaignResults is a struct representing the results from a campaign
func GetCampaignResults ¶
func GetCampaignResults(id int64, uid int64) (CampaignResults, error)
GetCampaignResults returns just the campaign results for the given campaign
type CampaignStats ¶
type CampaignStats struct { Total int64 `json:"total"` EmailsSent int64 `json:"sent"` OpenedEmail int64 `json:"opened"` ClickedLink int64 `json:"clicked"` SubmittedData int64 `json:"submitted_data"` EmailReported int64 `json:"email_reported"` Error int64 `json:"error"` }
CampaignStats is a struct representing the statistics for a single campaign
type CampaignSummaries ¶
type CampaignSummaries struct { Total int64 `json:"total"` Campaigns []CampaignSummary `json:"campaigns"` }
CampaignSummaries is a struct representing the overview of campaigns
func GetCampaignSummaries ¶
func GetCampaignSummaries(uid int64) (CampaignSummaries, error)
GetCampaignSummaries gets the summary objects for all the campaigns owned by the current user
type CampaignSummary ¶
type CampaignSummary struct { Id int64 `json:"id"` CreatedDate time.Time `json:"created_date"` LaunchDate time.Time `json:"launch_date"` SendByDate time.Time `json:"send_by_date"` CompletedDate time.Time `json:"completed_date"` Status string `json:"status"` Name string `json:"name"` Stats CampaignStats `json:"stats"` }
CampaignSummary is a struct representing the overview of a single camaign
func GetCampaignSummary ¶
func GetCampaignSummary(id int64, uid int64) (CampaignSummary, error)
GetCampaignSummary gets the summary object for a campaign specified by the campaign ID
type Dialer ¶
Dialer is a wrapper around a standard gomail.Dialer in order to implement the mailer.Dialer interface. This allows us to better separate the mailer package as opposed to forcing a connection between mailer and gomail.
type EmailRequest ¶
type EmailRequest struct { Id int64 `json:"-"` Template Template `json:"template"` TemplateId int64 `json:"-"` Page Page `json:"page"` PageId int64 `json:"-"` SMTP SMTP `json:"smtp"` URL string `json:"url"` Tracker string `json:"tracker" gorm:"-"` TrackingURL string `json:"tracking_url" gorm:"-"` UserId int64 `json:"-"` ErrorChan chan (error) `json:"-" gorm:"-"` RId string `json:"id"` FromAddress string `json:"-"` BaseRecipient }
EmailRequest is the structure of a request to send a test email to test an SMTP connection. This type implements the mailer.Mail interface.
func GetEmailRequestByResultId ¶
func GetEmailRequestByResultId(id string) (EmailRequest, error)
GetEmailRequestByResultId retrieves the EmailRequest by the underlying rid parameter.
func (*EmailRequest) Backoff ¶
func (s *EmailRequest) Backoff(reason error) error
Backoff treats temporary errors as permanent since this is expected to be a synchronous operation. It returns any errors given back to the ErrorChan
func (*EmailRequest) Error ¶
func (s *EmailRequest) Error(err error) error
Error returns an error on the ErrorChan.
func (*EmailRequest) Generate ¶
func (s *EmailRequest) Generate(msg *gomail.Message) error
Generate fills in the details of a gomail.Message with the contents from the SendTestEmailRequest.
func (*EmailRequest) GetDialer ¶
func (s *EmailRequest) GetDialer() (mailer.Dialer, error)
GetDialer returns the mailer.Dialer for the underlying SMTP object
func (*EmailRequest) Success ¶
func (s *EmailRequest) Success() error
Success returns nil on the ErrorChan to indicate that the email was sent successfully.
func (*EmailRequest) Validate ¶
func (s *EmailRequest) Validate() error
Validate ensures the SendTestEmailRequest structure is valid.
type Event ¶
type Event struct { Id int64 `json:"-"` CampaignId int64 `json:"campaign_id"` Email string `json:"email"` Time time.Time `json:"time"` Message string `json:"message"` Details string `json:"details"` }
Event contains the fields for an event that occurs during the campaign
type EventDetails ¶
type EventDetails struct { Payload url.Values `json:"payload"` Browser map[string]string `json:"browser"` }
EventDetails is a struct that wraps common attributes we want to store in an event
type EventError ¶
type EventError struct {
Error string `json:"error"`
}
EventError is a struct that wraps an error that occurs when sending an email to a recipient
type Group ¶
type Group struct { Id int64 `json:"id"` UserId int64 `json:"-"` Name string `json:"name"` ModifiedDate time.Time `json:"modified_date"` Targets []Target `json:"targets" sql:"-"` }
Group contains the fields needed for a user -> group mapping Groups contain 1..* Targets
func GetGroupByName ¶
GetGroupByName returns the group, if it exists, specified by the given name and user_id.
type GroupSummaries ¶
type GroupSummaries struct { Total int64 `json:"total"` Groups []GroupSummary `json:"groups"` }
GroupSummaries is a struct representing the overview of Groups.
func GetGroupSummaries ¶
func GetGroupSummaries(uid int64) (GroupSummaries, error)
GetGroupSummaries returns the summaries for the groups created by the given uid.
type GroupSummary ¶
type GroupSummary struct { Id int64 `json:"id"` Name string `json:"name"` ModifiedDate time.Time `json:"modified_date"` NumTargets int64 `json:"num_targets"` }
GroupSummary represents a summary of the Group model. The only difference is that, instead of listing the Targets (which could be expensive for large groups), it lists the target count.
func GetGroupSummary ¶
func GetGroupSummary(id int64, uid int64) (GroupSummary, error)
GetGroupSummary returns the summary for the requested group
type GroupTarget ¶
GroupTarget is used for a many-to-many relationship between 1..* Groups and 1..* Targets
type Header ¶
type Header struct { Id int64 `json:"-"` SMTPId int64 `json:"-"` Key string `json:"key"` Value string `json:"value"` }
Header contains the fields and methods for a sending profile to have custom headers
type IMAP ¶
type IMAP struct { UserId int64 `json:"-" gorm:"column:user_id"` Enabled bool `json:"enabled"` Host string `json:"host"` Port uint16 `json:"port,string,omitempty"` Username string `json:"username"` Password string `json:"password"` TLS bool `json:"tls"` IgnoreCertErrors bool `json:"ignore_cert_errors"` Folder string `json:"folder"` RestrictDomain string `json:"restrict_domain"` DeleteReportedCampaignEmail bool `json:"delete_reported_campaign_email"` LastLogin time.Time `json:"last_login,omitempty"` ModifiedDate time.Time `json:"modified_date"` IMAPFreq uint32 `json:"imap_freq,string,omitempty"` }
IMAP contains the attributes needed to handle logging into an IMAP server to check for reported emails
type MailLog ¶
type MailLog struct { Id int64 `json:"-"` UserId int64 `json:"-"` CampaignId int64 `json:"campaign_id"` RId string `json:"id"` SendDate time.Time `json:"send_date"` SendAttempt int `json:"send_attempt"` Processing bool `json:"-"` // contains filtered or unexported fields }
MailLog is a struct that holds information about an email that is to be sent out.
func GetMailLogsByCampaign ¶
GetMailLogsByCampaign returns all of the mail logs for a given campaign.
func GetQueuedMailLogs ¶
GetQueuedMailLogs returns the mail logs that are queued up for the given minute.
func (*MailLog) Backoff ¶
Backoff sets the MailLog SendDate to be the next entry in an exponential backoff. ErrMaxRetriesExceeded is thrown if this maillog has been retried too many times. Backoff also unlocks the maillog so that it can be processed again in the future.
func (*MailLog) CacheCampaign ¶
CacheCampaign allows bulk-mail workers to cache the otherwise expensive campaign lookup operation by providing a pointer to the campaign here.
func (*MailLog) Error ¶
Error sets the error status on the models.Result that the maillog refers to. Since MailLog errors are permanent, this action also deletes the maillog.
func (*MailLog) Generate ¶
Generate fills in the details of a gomail.Message instance with the correct headers and body from the campaign and recipient listed in the maillog. We accept the gomail.Message as an argument so that the caller can choose to re-use the message across recipients.
func (*MailLog) GetDialer ¶
GetDialer returns a dialer based on the maillog campaign's SMTP configuration
func (*MailLog) Lock ¶
Lock sets the processing flag so that other processes cannot modify the maillog
type Page ¶
type Page struct { Id int64 `json:"id" gorm:"column:id; primary_key:yes"` UserId int64 `json:"-" gorm:"column:user_id"` Name string `json:"name"` HTML string `json:"html" gorm:"column:html"` CaptureCredentials bool `json:"capture_credentials" gorm:"column:capture_credentials"` CapturePasswords bool `json:"capture_passwords" gorm:"column:capture_passwords"` RedirectURL string `json:"redirect_url" gorm:"column:redirect_url"` ModifiedDate time.Time `json:"modified_date"` }
Page contains the fields used for a Page model
func GetPageByName ¶
GetPageByName returns the page, if it exists, specified by the given name and user_id.
type Permission ¶
type Permission struct { ID int64 `json:"id"` Slug string `json:"slug"` Name string `json:"name"` Description string `json:"description"` }
Permission determines what a particular role can do. Each role may have one or more permissions.
type PhishingTemplateContext ¶
type PhishingTemplateContext struct { From string URL string Tracker string TrackingURL string RId string BaseURL string BaseRecipient }
PhishingTemplateContext is the context that is sent to any template, such as the email or landing page content.
func NewPhishingTemplateContext ¶
func NewPhishingTemplateContext(ctx TemplateContext, r BaseRecipient, rid string) (PhishingTemplateContext, error)
NewPhishingTemplateContext returns a populated PhishingTemplateContext, parsing the correct fields from the provided TemplateContext and recipient.
type Response ¶
type Response struct { Message string `json:"message"` Success bool `json:"success"` Data interface{} `json:"data"` }
Response contains the attributes found in an API response
type Result ¶
type Result struct { Id int64 `json:"-"` CampaignId int64 `json:"-"` UserId int64 `json:"-"` RId string `json:"id"` Status string `json:"status" sql:"not null"` IP string `json:"ip"` Latitude float64 `json:"latitude"` Longitude float64 `json:"longitude"` SendDate time.Time `json:"send_date"` Reported bool `json:"reported" sql:"not null"` ModifiedDate time.Time `json:"modified_date"` BaseRecipient }
Result contains the fields for a result object, which is a representation of a target in a campaign.
func (*Result) GenerateId ¶
GenerateId generates a unique key to represent the result in the database
func (*Result) HandleClickedLink ¶
func (r *Result) HandleClickedLink(details EventDetails) error
HandleClickedLink updates a Result in the case where the recipient clicked the link in an email.
func (*Result) HandleEmailBackoff ¶
HandleEmailBackoff updates a Result to indicate that the email received a temporary error and needs to be retried
func (*Result) HandleEmailError ¶
HandleEmailError updates a Result to indicate that there was an error when attempting to send the email to the remote SMTP server.
func (*Result) HandleEmailOpened ¶
func (r *Result) HandleEmailOpened(details EventDetails) error
HandleEmailOpened updates a Result in the case where the recipient opened the email.
func (*Result) HandleEmailReport ¶
func (r *Result) HandleEmailReport(details EventDetails) error
HandleEmailReport updates a Result in the case where they report a simulated phishing email using the HTTP handler.
func (*Result) HandleEmailSent ¶
HandleEmailSent updates a Result to indicate that the email has been successfully sent to the remote SMTP server
func (*Result) HandleFormSubmit ¶
func (r *Result) HandleFormSubmit(details EventDetails) error
HandleFormSubmit updates a Result in the case where the recipient submitted credentials to the form on a Landing Page.
type Role ¶
type Role struct { ID int64 `json:"-"` Slug string `json:"slug"` Name string `json:"name"` Description string `json:"description"` Permissions []Permission `json:"-" gorm:"many2many:role_permissions;"` }
Role represents a user role within Gophish. Each user has a single role which maps to a set of permissions.
func GetRoleBySlug ¶
GetRoleBySlug returns a role that can be assigned to a user.
type SMTP ¶
type SMTP struct { Id int64 `json:"id" gorm:"column:id; primary_key:yes"` UserId int64 `json:"-" gorm:"column:user_id"` Interface string `json:"interface_type" gorm:"column:interface_type"` Name string `json:"name"` Host string `json:"host"` Username string `json:"username,omitempty"` Password string `json:"password,omitempty"` FromAddress string `json:"from_address"` IgnoreCertErrors bool `json:"ignore_cert_errors"` Headers []Header `json:"headers"` ModifiedDate time.Time `json:"modified_date"` }
SMTP contains the attributes needed to handle the sending of campaign emails
func GetSMTPByName ¶
GetSMTPByName returns the SMTP, if it exists, specified by the given name and user_id.
type Target ¶
type Target struct { Id int64 `json:"-"` BaseRecipient }
Target contains the fields needed for individual targets specified by the user Groups contain 1..* Targets, but 1 Target may belong to 1..* Groups
func GetTargets ¶
GetTargets performs a many-to-many select to get all the Targets for a Group
func (*Target) FormatAddress ¶
FormatAddress returns the email address to use in the "To" header of the email
type Template ¶
type Template struct { Id int64 `json:"id" gorm:"column:id; primary_key:yes"` UserId int64 `json:"-" gorm:"column:user_id"` Name string `json:"name"` Subject string `json:"subject"` Text string `json:"text"` HTML string `json:"html" gorm:"column:html"` ModifiedDate time.Time `json:"modified_date"` Attachments []Attachment `json:"attachments"` }
Template models hold the attributes for an email template to be sent to targets
func GetTemplate ¶
GetTemplate returns the template, if it exists, specified by the given id and user_id.
func GetTemplateByName ¶
GetTemplateByName returns the template, if it exists, specified by the given name and user_id.
func GetTemplates ¶
GetTemplates returns the templates owned by the given user.
type TemplateContext ¶
type TemplateContext interface {
// contains filtered or unexported methods
}
TemplateContext is an interface that allows both campaigns and email requests to have a PhishingTemplateContext generated for them.
type User ¶
type User struct { Id int64 `json:"id"` Username string `json:"username" sql:"not null;unique"` Hash string `json:"-"` ApiKey string `json:"api_key" sql:"not null;unique"` Role Role `json:"role" gorm:"association_autoupdate:false;association_autocreate:false"` RoleID int64 `json:"-"` PasswordChangeRequired bool `json:"password_change_required"` AccountLocked bool `json:"account_locked"` LastLogin time.Time `json:"last_login"` }
User represents the user model for gophish.
func GetUser ¶
GetUser returns the user that the given id corresponds to. If no user is found, an error is thrown.
func GetUserByAPIKey ¶
GetUserByAPIKey returns the user that the given API Key corresponds to. If no user is found, an error is thrown.
func GetUserByUsername ¶
GetUserByUsername returns the user that the given username corresponds to. If no user is found, an error is thrown.
type ValidationContext ¶
ValidationContext is used for validating templates and pages
type Webhook ¶
type Webhook struct { Id int64 `json:"id" gorm:"column:id; primary_key:yes"` Name string `json:"name"` URL string `json:"url"` Secret string `json:"secret"` IsActive bool `json:"is_active"` }
Webhook represents the webhook model
func GetActiveWebhooks ¶
GetActiveWebhooks returns the active webhooks
func GetWebhook ¶
GetWebhook returns the webhook that the given id corresponds to. If no webhook is found, an error is returned.