2014-03-28 04:31:51 +00:00
|
|
|
package worker
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
2014-06-05 04:54:46 +00:00
|
|
|
"net/smtp"
|
2014-03-28 04:31:51 +00:00
|
|
|
"os"
|
2014-06-05 04:54:46 +00:00
|
|
|
"strings"
|
2014-03-28 04:31:51 +00:00
|
|
|
|
2014-06-05 04:54:46 +00:00
|
|
|
"github.com/jordan-wright/email"
|
2014-03-28 04:31:51 +00:00
|
|
|
"github.com/jordan-wright/gophish/models"
|
|
|
|
)
|
|
|
|
|
|
|
|
var Logger = log.New(os.Stdout, " ", log.Ldate|log.Ltime|log.Lshortfile)
|
|
|
|
|
|
|
|
type Worker struct {
|
|
|
|
Queue chan *models.Campaign
|
|
|
|
}
|
|
|
|
|
|
|
|
func New() *Worker {
|
|
|
|
return &Worker{
|
|
|
|
Queue: make(chan *models.Campaign),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Start launches the worker to monitor the database for any jobs.
|
|
|
|
// If a job is found, it launches the job
|
|
|
|
func (w *Worker) Start() {
|
|
|
|
Logger.Println("Background Worker Started Successfully - Waiting for Campaigns")
|
|
|
|
for {
|
|
|
|
processCampaign(<-w.Queue)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func processCampaign(c *models.Campaign) {
|
|
|
|
Logger.Printf("Worker received: %s", c.Name)
|
2014-06-26 02:01:01 +00:00
|
|
|
err := c.UpdateStatus(models.IN_PROGRESS)
|
2014-03-28 04:31:51 +00:00
|
|
|
if err != nil {
|
|
|
|
Logger.Println(err)
|
|
|
|
}
|
2014-06-05 04:54:46 +00:00
|
|
|
e := email.Email{
|
|
|
|
Subject: c.Template.Subject,
|
|
|
|
From: c.SMTP.FromAddress,
|
|
|
|
Text: []byte(c.Template.Text),
|
|
|
|
HTML: []byte(c.Template.HTML),
|
|
|
|
}
|
|
|
|
Logger.Println(c.SMTP.Username)
|
|
|
|
Logger.Println(c.SMTP.Password)
|
|
|
|
Logger.Println(c.SMTP.FromAddress)
|
|
|
|
var auth smtp.Auth
|
|
|
|
if c.SMTP.Username != "" && c.SMTP.Password != "" {
|
|
|
|
auth = smtp.PlainAuth("", c.SMTP.Username, c.SMTP.Password, strings.Split(c.SMTP.Host, ":")[0])
|
|
|
|
}
|
2014-03-28 04:31:51 +00:00
|
|
|
for _, t := range c.Results {
|
|
|
|
Logger.Println("Creating email using template")
|
2014-06-05 04:54:46 +00:00
|
|
|
e.To = []string{t.Email}
|
|
|
|
Logger.Println(e.To)
|
|
|
|
Logger.Println(e.From)
|
|
|
|
err := e.Send(c.SMTP.Host, auth)
|
|
|
|
if err != nil {
|
|
|
|
Logger.Println(err)
|
2014-06-26 02:01:01 +00:00
|
|
|
err = t.UpdateStatus("Error")
|
|
|
|
if err != nil {
|
|
|
|
Logger.Println(err)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
err = t.UpdateStatus("Email Sent")
|
|
|
|
if err != nil {
|
|
|
|
Logger.Println(err)
|
|
|
|
}
|
2014-06-05 04:54:46 +00:00
|
|
|
}
|
2014-06-26 02:01:01 +00:00
|
|
|
|
2014-03-28 04:31:51 +00:00
|
|
|
Logger.Printf("Sending Email to %s\n", t.Email)
|
|
|
|
}
|
|
|
|
}
|