skipped 3 lines 4 4 "errors" 5 5 "time" 6 6 7 + log "github.com/gophish/gophish/logger" 7 8 "github.com/jinzhu/gorm" 9 + "github.com/sirupsen/logrus" 8 10 ) 9 11 10 12 // Campaign is a struct representing a created campaign skipped 19 lines 30 32 31 33 // CampaignResults is a struct representing the results from a campaign 32 34 type CampaignResults struct { 33 - Id int64 `json:"id"` 34 - Name string `json:"name"` 35 - Status string `json:"status"` 36 - Reported string `json:"reported"` 37 - Results []Result `json:"results, omitempty"` 38 - Events []Event `json:"timeline,omitempty"` 35 + Id int64 `json:"id"` 36 + Name string `json:"name"` 37 + Status string `json:"status"` 38 + Reported string `json:"reported"` 39 + Results []Result `json:"results, omitempty"` 40 + Events []Event `json:"timeline,omitempty"` 39 41 } 40 42 41 - // CampaignsSummary is a struct representing the overview of campaigns 43 + // CampaignSummaries is a struct representing the overview of campaigns 42 44 type CampaignSummaries struct { 43 45 Total int64 `json:"total"` 44 46 Campaigns []CampaignSummary `json:"campaigns"` skipped 39 lines 84 86 // ErrTemplateNotFound indicates the template specified does not exist in the database 85 87 var ErrTemplateNotFound = errors.New("Template not found") 86 88 87 - // ErrGroupnNotFound indicates a group specified by the user does not exist in the database 89 + // ErrGroupNotFound indicates a group specified by the user does not exist in the database 88 90 var ErrGroupNotFound = errors.New("Group not found") 89 91 90 92 // ErrPageNotFound indicates a page specified by the user does not exist in the database skipped 42 lines 133 135 func (c *Campaign) getDetails() error { 134 136 err = db.Model(c).Related(&c.Results).Error 135 137 if err != nil { 136 - Logger .Printf ("%s: results not found for campaign\ n ", err) 138 + log .Warnf ("%s: results not found for campaign", err) 137 139 return err 138 140 } 139 141 err = db.Model(c).Related(&c.Events).Error 140 142 if err != nil { 141 - Logger .Printf ("%s: events not found for campaign\ n ", err) 143 + log .Warnf ("%s: events not found for campaign", err) 142 144 return err 143 145 } 144 146 err = db.Table("templates").Where("id=?", c.TemplateId).Find(&c.Template).Error skipped 2 lines 147 149 return err 148 150 } 149 151 c.Template = Template{Name: "[Deleted]"} 150 - Logger .Printf ("%s: template not found for campaign\ n ", err) 152 + log .Warnf ("%s: template not found for campaign", err) 151 153 } 152 154 err = db.Where("template_id=?", c.Template.Id).Find(&c.Template.Attachments).Error 153 155 if err != nil && err != gorm.ErrRecordNotFound { 154 - Logger.Println(err) 156 + log.Warn(err) 155 157 return err 156 158 } 157 159 err = db.Table("pages").Where("id=?", c.PageId).Find(&c.Page).Error skipped 2 lines 160 162 return err 161 163 } 162 164 c.Page = Page{Name: "[Deleted]"} 163 - Logger .Printf ("%s: page not found for campaign\ n ", err) 165 + log .Warnf ("%s: page not found for campaign", err) 164 166 } 165 167 err = db.Table("smtp").Where("id=?", c.SMTPId).Find(&c.SMTP).Error 166 168 if err != nil { skipped 2 lines 169 171 return err 170 172 } 171 173 c.SMTP = SMTP{Name: "[Deleted]"} 172 - Logger .Printf ("%s: sending profile not found for campaign\ n ", err) 174 + log .Warnf ("%s: sending profile not found for campaign", err) 173 175 } 174 176 err = db.Where("smtp_id=?", c.SMTP.Id).Find(&c.SMTP.Headers).Error 175 177 if err != nil && err != gorm.ErrRecordNotFound { 176 - Logger.Println(err) 178 + log.Warn(err) 177 179 return err 178 180 } 179 181 return nil skipped 54 lines 234 236 cs := []Campaign{} 235 237 err := db.Model(&User{Id: uid}).Related(&cs).Error 236 238 if err != nil { 237 - Logger.Println(err) 239 + log.Error(err) 238 240 } 239 - for i, _ := range cs { 241 + for i := range cs { 240 242 err = cs[i].getDetails() 241 243 if err != nil { 242 - Logger.Println(err) 244 + log.Error(err) 243 245 } 244 246 } 245 247 return cs, err skipped 9 lines 255 257 query = query.Select("id, name, created_date, launch_date, completed_date, status") 256 258 err := query.Scan(&cs).Error 257 259 if err != nil { 258 - Logger.Println(err) 260 + log.Error(err) 259 261 return overview, err 260 262 } 261 263 for i := range cs { 262 264 s, err := getCampaignStats(cs[i].Id) 263 265 if err != nil { 264 - Logger.Println(err) 266 + log.Error(err) 265 267 return overview, err 266 268 } 267 269 cs[i].Stats = s skipped 10 lines 278 280 query = query.Select("id, name, created_date, launch_date, completed_date, status") 279 281 err := query.Scan(&cs).Error 280 282 if err != nil { 281 - Logger.Println(err) 283 + log.Error(err) 282 284 return cs, err 283 285 } 284 286 s, err := getCampaignStats(cs.Id) 285 287 if err != nil { 286 - Logger.Println(err) 288 + log.Error(err) 287 289 return cs, err 288 290 } 289 291 cs.Stats = s skipped 5 lines 295 297 c := Campaign{} 296 298 err := db.Where("id = ?", id).Where("user_id = ?", uid).Find(&c).Error 297 299 if err != nil { 298 - Logger .Printf ("%s: campaign not found\ n ", err) 300 + log .Errorf ("%s: campaign not found", err) 299 301 return c, err 300 302 } 301 303 err = c.getDetails() 302 304 return c, err 303 305 } 304 306 307 + // GetCampaignResults returns just the campaign results for the given campaign 305 308 func GetCampaignResults(id int64, uid int64) (CampaignResults, error) { 306 309 cr := CampaignResults{} 307 310 err := db.Table("campaigns").Where("id=? and user_id=?", id, uid).Find(&cr).Error 308 311 if err != nil { 309 - Logger.Printf("%s: campaign not found\n", err) 312 + log.WithFields(logrus.Fields{ 313 + "campaign_id": id, 314 + "error": err, 315 + }).Error(err) 310 316 return cr, err 311 317 } 312 318 err = db.Table("results").Where("campaign_id=? and user_id=?", cr.Id, uid).Find(&cr.Results).Error 313 319 if err != nil { 314 - Logger .Printf ("%s: results not found for campaign\ n ", err) 320 + log .Errorf ("%s: results not found for campaign", err) 315 321 return cr, err 316 322 } 317 323 err = db.Table("events").Where("campaign_id=?", cr.Id).Find(&cr.Events).Error 318 324 if err != nil { 319 - Logger .Printf ("%s: events not found for campaign\ n ", err) 325 + log .Errorf ("%s: events not found for campaign", err) 320 326 return cr, err 321 327 } 322 328 return cr, err skipped 5 lines 328 334 err := db.Where("launch_date <= ?", t). 329 335 Where("status = ?", CAMPAIGN_QUEUED).Find(&cs).Error 330 336 if err != nil { 331 - Logger.Println(err) 337 + log.Error(err) 332 338 } 333 - Logger .Printf ("Found %d Campaigns to run\n", len(cs)) 334 - for i, _ := range cs { 339 + log .Infof ("Found %d Campaigns to run\n", len(cs)) 340 + for i := range cs { 335 341 err = cs[i].getDetails() 336 342 if err != nil { 337 - Logger.Println(err) 343 + log.Error(err) 338 344 } 339 345 } 340 346 return cs, err skipped 21 lines 362 368 for i, g := range c.Groups { 363 369 c.Groups[i], err = GetGroupByName(g.Name, uid) 364 370 if err == gorm.ErrRecordNotFound { 365 - Logger.Printf("Error - Group %s does not exist", g.Name) 371 + log.WithFields(logrus.Fields{ 372 + "group": g.Name, 373 + }).Error("Group does not exist") 366 374 return ErrGroupNotFound 367 375 } else if err != nil { 368 - Logger.Println(err) 376 + log.Error(err) 369 377 return err 370 378 } 371 379 } 372 380 // Check to make sure the template exists 373 381 t, err := GetTemplateByName(c.Template.Name, uid) 374 382 if err == gorm.ErrRecordNotFound { 375 - Logger.Printf("Error - Template %s does not exist", t.Name) 383 + log.WithFields(logrus.Fields{ 384 + "template": t.Name, 385 + }).Error("Template does not exist") 376 386 return ErrTemplateNotFound 377 387 } else if err != nil { 378 - Logger.Println(err) 388 + log.Error(err) 379 389 return err 380 390 } 381 391 c.Template = t skipped 1 lines 383 393 // Check to make sure the page exists 384 394 p, err := GetPageByName(c.Page.Name, uid) 385 395 if err == gorm.ErrRecordNotFound { 386 - Logger.Printf("Error - Page %s does not exist", p.Name) 396 + log.WithFields(logrus.Fields{ 397 + "page": p.Name, 398 + }).Error("Page does not exist") 387 399 return ErrPageNotFound 388 400 } else if err != nil { 389 - Logger.Println(err) 401 + log.Error(err) 390 402 return err 391 403 } 392 404 c.Page = p skipped 1 lines 394 406 // Check to make sure the sending profile exists 395 407 s, err := GetSMTPByName(c.SMTP.Name, uid) 396 408 if err == gorm.ErrRecordNotFound { 397 - Logger.Printf("Error - Sending profile %s does not exist", s.Name) 398 - return ErrPageNotFound 409 + log.WithFields(logrus.Fields{ 410 + "smtp": s.Name, 411 + }).Error("Sending profile does not exist") 412 + return ErrSMTPNotFound 399 413 } else if err != nil { 400 - Logger.Println(err) 414 + log.Error(err) 401 415 return err 402 416 } 403 417 c.SMTP = s skipped 1 lines 405 419 // Insert into the DB 406 420 err = db.Save(c).Error 407 421 if err != nil { 408 - Logger.Println(err) 422 + log.Error(err) 409 423 return err 410 424 } 411 425 err = c.AddEvent(Event{Message: "Campaign Created"}) 412 426 if err != nil { 413 - Logger.Println(err) 427 + log.Error(err) 414 428 } 415 429 // Insert all the results 416 430 resultMap := make(map[string]bool) skipped 22 lines 439 453 } 440 454 err = r.GenerateId() 441 455 if err != nil { 442 - Logger.Println(err) 456 + log.Error(err) 443 457 continue 444 458 } 445 459 err = db.Save(r).Error 446 460 if err != nil { 447 - Logger.Printf("Error adding result record for target %s\n", t.Email) 448 - Logger.Println(err) 461 + log.WithFields(logrus.Fields{ 462 + "email": t.Email, 463 + }).Error(err) 449 464 } 450 465 c.Results = append(c.Results, *r) 451 466 err = GenerateMailLog(c, r) 452 467 if err != nil { 453 - Logger.Println(err) 468 + log.Error(err) 454 469 continue 455 470 } 456 471 } skipped 4 lines 461 476 462 477 //DeleteCampaign deletes the specified campaign 463 478 func DeleteCampaign(id int64) error { 464 - Logger.Printf("Deleting campaign %d\n", id) 479 + log.WithFields(logrus.Fields{ 480 + "campaign_id": id, 481 + }).Info("Deleting campaign") 465 482 // Delete all the campaign results 466 483 err := db.Where("campaign_id=?", id).Delete(&Result{}).Error 467 484 if err != nil { 468 - Logger.Println(err) 485 + log.Error(err) 469 486 return err 470 487 } 471 488 err = db.Where("campaign_id=?", id).Delete(&Event{}).Error 472 489 if err != nil { 473 - Logger.Println(err) 490 + log.Error(err) 474 491 return err 475 492 } 476 493 // Delete the campaign 477 494 err = db.Delete(&Campaign{Id: id}).Error 478 495 if err != nil { 479 - Logger.Println(err) 496 + log.Error(err) 480 497 } 481 498 return err 482 499 } skipped 1 lines 484 501 // CompleteCampaign effectively "ends" a campaign. 485 502 // Any future emails clicked will return a simple "404" page. 486 503 func CompleteCampaign(id int64, uid int64) error { 487 - Logger.Printf("Marking campaign %d as complete\n", id) 504 + log.WithFields(logrus.Fields{ 505 + "campaign_id": id, 506 + }).Info("Marking campaign as complete") 488 507 c, err := GetCampaign(id, uid) 489 508 if err != nil { 490 509 return err skipped 7 lines 498 517 c.Status = CAMPAIGN_COMPLETE 499 518 err = db.Where("id=? and user_id=?", id, uid).Save(&c).Error 500 519 if err != nil { 501 - Logger.Println(err) 520 + log.Error(err) 502 521 } 503 522 return err 504 523 } skipped 1 lines