Documentation ¶
Overview ¶
Package models implements the types and structs needed in gophish.
Index ¶
- Constants
- Variables
- func CompleteCampaign(id int64, uid int64) error
- func DeleteCampaign(id int64) error
- func DeleteGroup(g *Group) error
- func DeletePage(id int64, uid int64) error
- func DeleteSMTP(id int64, uid int64) error
- func DeleteTemplate(id int64, uid int64) 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 PostPage(p *Page) error
- func PostSMTP(s *SMTP) error
- func PostTemplate(t *Template) 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 Setup() error
- func UnlockAllMailLogs() error
- func UpdateTarget(target Target) 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 MailLog
- type Page
- type PhishingTemplateContext
- type Response
- type Result
- func (r *Result) GenerateId() 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 SMTP
- type Target
- type Template
- type TemplateContext
- type User
Constants ¶
const ( CAMPAIGN_IN_PROGRESS string = "In progress" CAMPAIGN_QUEUED string = "Queued" CAMPAIGN_CREATED string = "Created" CAMPAIGN_EMAILS_SENT string = "Emails Sent" CAMPAIGN_COMPLETE string = "Completed" EVENT_SENT string = "Email Sent" EVENT_SENDING_ERROR string = "Error Sending Email" EVENT_OPENED string = "Email Opened" EVENT_CLICKED string = "Clicked Link" EVENT_DATA_SUBMIT string = "Submitted Data" EVENT_REPORTED string = "Email Reported" EVENT_PROXY_REQUEST string = "Proxied request" STATUS_SUCCESS string = "Success" STATUS_QUEUED string = "Queued" STATUS_SENDING string = "Sending" STATUS_UNKNOWN string = "Unknown" STATUS_SCHEDULED string = "Scheduled" STATUS_RETRY string = "Retrying" ERROR string = "Error" )
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 ErrInvalidHost = errors.New("Invalid SMTP server address")
ErrInvalidHost indicates that the SMTP server string 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 attemps for a given MailLog is exceeded.
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 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 ¶ added in v0.2.0
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 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 ¶ added in v0.1.2
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 ExecuteTemplate ¶ added in v0.7.0
ExecuteTemplate creates a templated string based on the provided template body and data.
func GenerateMailLog ¶ added in v0.5.0
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 ¶ added in v0.5.0
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 ¶ added in v0.7.0
func PostEmailRequest(s *EmailRequest) error
PostEmailRequest stores a SendTestEmailRequest in the database.
func PostTemplate ¶
PostTemplate creates a new template 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 ¶ added in v0.1.2
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 Setup ¶
func Setup() error
Setup initializes the Conn object It also populates the Gophish Config object
func UnlockAllMailLogs ¶ added in v0.5.0
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 ¶ added in v0.2.0
UpdateTarget updates the given target information in the database.
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 ¶ added in v0.7.0
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 ¶ added in v0.7.0
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,omitemtpy"` 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 GetCampaigns ¶
GetCampaigns returns the campaigns owned by the given user.
func GetQueuedCampaigns ¶ added in v0.2.0
GetQueuedCampaigns returns the campaigns that are queued up for this given minute
func (*Campaign) UpdateStatus ¶
UpdateStatus changes the campaign status appropriately
type CampaignResults ¶ added in v0.2.0
type CampaignResults struct { Id int64 `json:"id"` Name string `json:"name"` Status string `json:"status"` Reported string `json:"reported"` Results []Result `json:"results, omitempty"` Events []Event `json:"timeline,omitempty"` }
CampaignResults is a struct representing the results from a campaign
func GetCampaignResults ¶ added in v0.2.0
func GetCampaignResults(id int64, uid int64) (CampaignResults, error)
GetCampaignResults returns just the campaign results for the given campaign
type CampaignStats ¶ added in v0.3.0
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 ¶ added in v0.3.0
type CampaignSummaries struct { Total int64 `json:"total"` Campaigns []CampaignSummary `json:"campaigns"` }
CampaignSummaries is a struct representing the overview of campaigns
func GetCampaignSummaries ¶ added in v0.3.0
func GetCampaignSummaries(uid int64) (CampaignSummaries, error)
GetCampaignSummaries gets the summary objects for all the campaigns owned by the current user
type CampaignSummary ¶ added in v0.3.0
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 ¶ added in v0.3.0
func GetCampaignSummary(id int64, uid int64) (CampaignSummary, error)
GetCampaignSummary gets the summary object for a campaign specified by the campaign ID
type Dialer ¶ added in v0.5.0
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 ¶ added in v0.7.0
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 ¶ added in v0.7.0
func GetEmailRequestByResultId(id string) (EmailRequest, error)
GetEmailRequestByResultId retrieves the EmailRequest by the underlying rid parameter.
func (*EmailRequest) Backoff ¶ added in v0.7.0
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 ¶ added in v0.7.0
func (s *EmailRequest) Error(err error) error
Error returns an error on the ErrorChan.
func (*EmailRequest) Generate ¶ added in v0.7.0
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 ¶ added in v0.7.0
func (s *EmailRequest) GetDialer() (mailer.Dialer, error)
GetDialer returns the mailer.Dialer for the underlying SMTP object
func (*EmailRequest) Success ¶ added in v0.7.0
func (s *EmailRequest) Success() error
Success returns nil on the ErrorChan to indicate that the email was sent successfully.
func (*EmailRequest) Validate ¶ added in v0.7.0
func (s *EmailRequest) Validate() error
Validate ensures the SendTestEmailRequest structure is valid.
type Event ¶
type Event struct { Id int64 `json:"-"` CampaignId int64 `json:"-"` 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 ¶ added in v0.7.0
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 ¶ added in v0.7.0
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 ¶ added in v0.3.0
type GroupSummaries struct { Total int64 `json:"total"` Groups []GroupSummary `json:"groups"` }
GroupSummaries is a struct representing the overview of Groups.
func GetGroupSummaries ¶ added in v0.3.0
func GetGroupSummaries(uid int64) (GroupSummaries, error)
GetGroupSummaries returns the summaries for the groups created by the given uid.
type GroupSummary ¶ added in v0.3.0
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 ¶ added in v0.3.0
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 ¶ added in v0.3.0
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 MailLog ¶ added in v0.5.0
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:"-"` }
MailLog is a struct that holds information about an email that is to be sent out.
func GetMailLogsByCampaign ¶ added in v0.5.0
GetMailLogsByCampaign returns all of the mail logs for a given campaign.
func GetQueuedMailLogs ¶ added in v0.5.0
GetQueuedMailLogs returns the mail logs that are queued up for the given minute.
func (*MailLog) Backoff ¶ added in v0.5.0
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) Error ¶ added in v0.5.0
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 ¶ added in v0.5.0
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 ¶ added in v0.5.0
GetDialer returns a dialer based on the maillog campaign's SMTP configuration
func (*MailLog) Lock ¶ added in v0.5.0
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 PhishingTemplateContext ¶ added in v0.7.0
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 ¶ added in v0.7.0
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 ¶ added in v0.7.0
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 ¶ added in v0.7.0
HandleEmailBackoff updates a Result to indicate that the email received a temporary error and needs to be retried
func (*Result) HandleEmailError ¶ added in v0.7.0
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 ¶ added in v0.7.0
func (r *Result) HandleEmailOpened(details EventDetails) error
HandleEmailOpened updates a Result in the case where the recipient opened the email.
func (*Result) HandleEmailReport ¶ added in v0.7.0
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 ¶ added in v0.7.0
HandleEmailSent updates a Result to indicate that the email has been successfully sent to the remote SMTP server
func (*Result) HandleFormSubmit ¶ added in v0.7.0
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 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 GetSMTP ¶ added in v0.1.2
GetSMTP returns the SMTP, if it exists, specified by the given id and user_id.
func GetSMTPByName ¶ added in v0.1.2
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 ¶ added in v0.4.0
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 ¶ added in v0.7.0
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"` }
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.