models

package
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 29, 2016 License: MIT Imports: 14 Imported by: 0

Documentation

Overview

Package models implements the types and structs needed in gophish.

Index

Constants

View Source
const (
	CAMPAIGN_IN_PROGRESS string = "In progress"
	CAMPAIGN_QUEUED      string = "Queued"
	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"
	STATUS_SUCCESS       string = "Success"
	STATUS_UNKNOWN       string = "Unknown"
	ERROR                string = "Error"
)

Variables

View Source
var ErrCampaignNameNotSpecified = errors.New("Campaign name not specified")

ErrCampaignNameNotSpecified indicates there was no template given by the user

View Source
var ErrEmailNotSpecified = errors.New("No email address specified")

ErrNoEmailSpecified is thrown when no email is specified for the Target

View Source
var ErrGroupNameNotSpecified = errors.New("Group name not specified")

ErrGroupNameNotSpecified is thrown when a group name is not specified

View Source
var ErrGroupNotFound = errors.New("Group not found")

ErrGroupnNotFound indicates a group specified by the user does not exist in the database

View Source
var ErrGroupNotSpecified = errors.New("No groups specified")

ErrGroupNotSpecified indicates there was no template given by the user

View Source
var ErrNoTargetsSpecified = errors.New("No targets specified")

ErrNoTargetsSpecified is thrown when no targets are specified by the user

View Source
var ErrPageNameNotSpecified = errors.New("Page Name not specified")

ErrPageNameNotSpecified is thrown if the name of the landing page is blank.

View Source
var ErrPageNotFound = errors.New("Page not found")

ErrPageNotFound indicates a page specified by the user does not exist in the database

View Source
var ErrPageNotSpecified = errors.New("No landing page specified")

ErrPageNotSpecified indicates a landing page was not provided for the campaign

View Source
var ErrTemplateMissingParameter = errors.New("Need to specify at least plaintext or HTML content")

ErrTemplateMissingParameter is thrown when a needed parameter is not provided

View Source
var ErrTemplateNameNotSpecified = errors.New("Template name not specified")

ErrTemplateNameNotSpecified is thrown when a template name is not specified

View Source
var ErrTemplateNotFound = errors.New("Template not found")

ErrTemplateNotFound indicates the template specified does not exist in the database

View Source
var ErrTemplateNotSpecified = errors.New("No email template specified")

ErrTemplateNotSpecified indicates there was no template given by the user

View Source
var ErrUsernameTaken = errors.New("username already taken")

ErrUsernameTaken is thrown when a user attempts to register a username that is taken.

Logger is a global logger used to show informational, warning, and error messages

Functions

func DeleteCampaign

func DeleteCampaign(id int64) error

DeleteCampaign deletes the specified campaign

func DeleteGroup

func DeleteGroup(g *Group) error

DeleteGroup deletes a given group by group ID and user ID

func DeletePage

func DeletePage(id int64, uid int64) error

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 DeleteTemplate

func DeleteTemplate(id int64, uid int64) error

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 PostCampaign

func PostCampaign(c *Campaign, uid int64) error

PostCampaign inserts a campaign and all associated records into the database.

func PostGroup

func PostGroup(g *Group) error

PostGroup creates a new group in the database.

func PostPage

func PostPage(p *Page) error

PostPage creates a new page in the database.

func PostTemplate

func PostTemplate(t *Template) error

PostTemplate creates a new template in the database.

func PutGroup

func PutGroup(g *Group) error

PutGroup updates the given group if found in the database.

func PutPage

func PutPage(p *Page) error

PutPage edits an existing Page in the database. Per the PUT Method RFC, it presumes all data for a page is provided.

func PutTemplate

func PutTemplate(t *Template) error

PutTemplate edits an existing template in the database. Per the PUT Method RFC, it presumes all data for a template is provided.

func PutUser

func PutUser(u *User) error

PutUser updates the given user

func Setup

func Setup() error

Setup initializes the Conn object It also populates the Gophish Config object

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 Campaign

type Campaign struct {
	Id            int64     `json:"id"`
	UserId        int64     `json:"-"`
	Name          string    `json:"name" sql:"not null"`
	CreatedDate   time.Time `json:"created_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"`
	SMTP          SMTP      `json:"smtp"`
	URL           string    `json:"url"`
}

Campaign is a struct representing a created campaign

func GetCampaign

func GetCampaign(id int64, uid int64) (Campaign, error)

GetCampaign returns the campaign, if it exists, specified by the given id and user_id.

func GetCampaigns

func GetCampaigns(uid int64) ([]Campaign, error)

GetCampaigns returns the campaigns owned by the given user.

func (*Campaign) AddEvent

func (c *Campaign) AddEvent(e Event) error

AddEvent creates a new campaign event in the database

func (*Campaign) UpdateStatus

func (c *Campaign) UpdateStatus(s string) error

UpdateStatus changes the campaign status appropriately

func (*Campaign) Validate

func (c *Campaign) Validate() error

Validate checks to make sure there are no invalid fields in a submitted campaign

type Event

type Event struct {
	Id         int64     `json:"-"`
	CampaignId int64     `json:"-"`
	Email      string    `json:"email"`
	Time       time.Time `json:"time"`
	Message    string    `json:"message"`
}

Event contains the fields for an event that occurs during the campaign

type Flash

type Flash struct {
	Type    string
	Message string
}

Flash is used to hold flash information for use in templates.

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 GetGroup

func GetGroup(id int64, uid int64) (Group, error)

GetGroup returns the group, if it exists, specified by the given id and user_id.

func GetGroupByName

func GetGroupByName(n string, uid int64) (Group, error)

GetGroupByName returns the group, if it exists, specified by the given name and user_id.

func GetGroups

func GetGroups(uid int64) ([]Group, error)

GetGroups returns the groups owned by the given user.

func (*Group) Validate

func (g *Group) Validate() error

Validate performs validation on a group given by the user

type GroupTarget

type GroupTarget struct {
	GroupId  int64 `json:"-"`
	TargetId int64 `json:"-"`
}

GroupTarget is used for a many-to-many relationship between 1..* Groups and 1..* Targets

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"`
	ModifiedDate time.Time `json:"modified_date"`
}

Page contains the fields used for a Page model

func GetPage

func GetPage(id int64, uid int64) (Page, error)

GetPage returns the page, if it exists, specified by the given id and user_id.

func GetPageByName

func GetPageByName(n string, uid int64) (Page, error)

GetPageByName returns the page, if it exists, specified by the given name and user_id.

func GetPages

func GetPages(uid int64) ([]Page, error)

GetPages returns the pages owned by the given user.

func (*Page) Validate

func (p *Page) Validate() error

Validate ensures that a page contains the appropriate details

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"`
	Email      string  `json:"email"`
	FirstName  string  `json:"first_name"`
	LastName   string  `json:"last_name"`
	Status     string  `json:"status" sql:"not null"`
	IP         string  `json:"ip"`
	Latitude   float64 `json:"latitude"`
	Longitude  float64 `json:"longitude"`
}

Result contains the fields for a result object, which is a representation of a target in a campaign.

func GetResult

func GetResult(rid string) (Result, error)

GetResult returns the Result object from the database given the ResultId

func (*Result) GenerateId

func (r *Result) GenerateId()

GenerateId generates a unique key to represent the result in the database

func (*Result) UpdateGeo

func (r *Result) UpdateGeo(addr string) error

UpdateGeo updates the latitude and longitude of the result in the database given an IP address

func (*Result) UpdateStatus

func (r *Result) UpdateStatus(s string) error

UpdateStatus updates the status of the result in the database

type SMTP

type SMTP struct {
	SMTPId      int64  `json:"-" gorm:"column:smtp_id; primary_key:yes"`
	CampaignId  int64  `json:"-" gorm:"column:campaign_id"`
	Host        string `json:"host"`
	Username    string `json:"username,omitempty"`
	Password    string `json:"password,omitempty" sql:"-"`
	FromAddress string `json:"from_address"`
}

SMTP contains the attributes needed to handle the sending of campaign emails

func (SMTP) TableName

func (s SMTP) TableName() string

TableName specifies the database tablename for Gorm to use

func (*SMTP) Validate

func (s *SMTP) Validate() (string, bool)

Validate ensures that SMTP configs/connections are valid

type SendTestEmailRequest

type SendTestEmailRequest struct {
	Template    Template `json:"template"`
	Page        Page     `json:"page"`
	SMTP        SMTP     `json:"smtp"`
	URL         string   `json:"url"`
	Tracker     string   `json:"tracker"`
	TrackingURL string   `json:"tracking_url"`
	Target
}

SendTestEmailRequest is the structure of a request to send a test email to test an SMTP connection

func (*SendTestEmailRequest) Validate

func (s *SendTestEmailRequest) Validate() error

Validate ensures the SendTestEmailRequest structure is valid.

type Target

type Target struct {
	Id        int64  `json:"-"`
	FirstName string `json:"first_name"`
	LastName  string `json:"last_name"`
	Email     string `json:"email"`
	Position  string `json:"position"`
}

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

func GetTargets(gid int64) ([]Target, error)

GetTargets performs a many-to-many select to get all the Targets for a Group

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

func GetTemplate(id int64, uid int64) (Template, error)

GetTemplate returns the template, if it exists, specified by the given id and user_id.

func GetTemplateByName

func GetTemplateByName(n string, uid int64) (Template, error)

GetTemplateByName returns the template, if it exists, specified by the given name and user_id.

func GetTemplates

func GetTemplates(uid int64) ([]Template, error)

GetTemplates returns the templates owned by the given user.

func (*Template) Validate

func (t *Template) Validate() error

Validate checks the given template to make sure values are appropriate and complete

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

func GetUser(id int64) (User, error)

GetUser returns the user that the given id corresponds to. If no user is found, an error is thrown.

func GetUserByAPIKey

func GetUserByAPIKey(key string) (User, error)

GetUserByAPIKey returns the user that the given API Key corresponds to. If no user is found, an error is thrown.

func GetUserByUsername

func GetUserByUsername(username string) (User, error)

GetUserByUsername returns the user that the given username corresponds to. If no user is found, an error is thrown.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL