github.com/merlinepedra/gophish1@v0.9.0/controllers/api/smtp.go (about) 1 package api 2 3 import ( 4 "encoding/json" 5 "net/http" 6 "strconv" 7 "time" 8 9 ctx "github.com/gophish/gophish/context" 10 log "github.com/gophish/gophish/logger" 11 "github.com/gophish/gophish/models" 12 "github.com/gorilla/mux" 13 "github.com/jinzhu/gorm" 14 ) 15 16 // SendingProfiles handles requests for the /api/smtp/ endpoint 17 func (as *Server) SendingProfiles(w http.ResponseWriter, r *http.Request) { 18 switch { 19 case r.Method == "GET": 20 ss, err := models.GetSMTPs(ctx.Get(r, "user_id").(int64)) 21 if err != nil { 22 log.Error(err) 23 } 24 JSONResponse(w, ss, http.StatusOK) 25 //POST: Create a new SMTP and return it as JSON 26 case r.Method == "POST": 27 s := models.SMTP{} 28 // Put the request into a page 29 err := json.NewDecoder(r.Body).Decode(&s) 30 if err != nil { 31 JSONResponse(w, models.Response{Success: false, Message: "Invalid request"}, http.StatusBadRequest) 32 return 33 } 34 // Check to make sure the name is unique 35 _, err = models.GetSMTPByName(s.Name, ctx.Get(r, "user_id").(int64)) 36 if err != gorm.ErrRecordNotFound { 37 JSONResponse(w, models.Response{Success: false, Message: "SMTP name already in use"}, http.StatusConflict) 38 log.Error(err) 39 return 40 } 41 s.ModifiedDate = time.Now().UTC() 42 s.UserId = ctx.Get(r, "user_id").(int64) 43 err = models.PostSMTP(&s) 44 if err != nil { 45 JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) 46 return 47 } 48 JSONResponse(w, s, http.StatusCreated) 49 } 50 } 51 52 // SendingProfile contains functions to handle the GET'ing, DELETE'ing, and PUT'ing 53 // of a SMTP object 54 func (as *Server) SendingProfile(w http.ResponseWriter, r *http.Request) { 55 vars := mux.Vars(r) 56 id, _ := strconv.ParseInt(vars["id"], 0, 64) 57 s, err := models.GetSMTP(id, ctx.Get(r, "user_id").(int64)) 58 if err != nil { 59 JSONResponse(w, models.Response{Success: false, Message: "SMTP not found"}, http.StatusNotFound) 60 return 61 } 62 switch { 63 case r.Method == "GET": 64 JSONResponse(w, s, http.StatusOK) 65 case r.Method == "DELETE": 66 err = models.DeleteSMTP(id, ctx.Get(r, "user_id").(int64)) 67 if err != nil { 68 JSONResponse(w, models.Response{Success: false, Message: "Error deleting SMTP"}, http.StatusInternalServerError) 69 return 70 } 71 JSONResponse(w, models.Response{Success: true, Message: "SMTP Deleted Successfully"}, http.StatusOK) 72 case r.Method == "PUT": 73 s = models.SMTP{} 74 err = json.NewDecoder(r.Body).Decode(&s) 75 if err != nil { 76 log.Error(err) 77 } 78 if s.Id != id { 79 JSONResponse(w, models.Response{Success: false, Message: "/:id and /:smtp_id mismatch"}, http.StatusBadRequest) 80 return 81 } 82 err = s.Validate() 83 if err != nil { 84 JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) 85 return 86 } 87 s.ModifiedDate = time.Now().UTC() 88 s.UserId = ctx.Get(r, "user_id").(int64) 89 err = models.PutSMTP(&s) 90 if err != nil { 91 JSONResponse(w, models.Response{Success: false, Message: "Error updating page"}, http.StatusInternalServerError) 92 return 93 } 94 JSONResponse(w, s, http.StatusOK) 95 } 96 }