github.com/amar224/phishing-tool@v0.9.0/controllers/api/imap.go (about) 1 package api 2 3 import ( 4 "encoding/json" 5 "net/http" 6 "time" 7 8 ctx "github.com/gophish/gophish/context" 9 "github.com/gophish/gophish/imap" 10 "github.com/gophish/gophish/models" 11 ) 12 13 // IMAPServerValidate handles requests for the /api/imapserver/validate endpoint 14 func (as *Server) IMAPServerValidate(w http.ResponseWriter, r *http.Request) { 15 switch { 16 case r.Method == "GET": 17 JSONResponse(w, models.Response{Success: false, Message: "Only POSTs allowed"}, http.StatusBadRequest) 18 case r.Method == "POST": 19 im := models.IMAP{} 20 err := json.NewDecoder(r.Body).Decode(&im) 21 if err != nil { 22 JSONResponse(w, models.Response{Success: false, Message: "Invalid request"}, http.StatusBadRequest) 23 return 24 } 25 err = imap.Validate(&im) 26 if err != nil { 27 JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusOK) 28 return 29 } 30 JSONResponse(w, models.Response{Success: true, Message: "Successful login."}, http.StatusCreated) 31 } 32 } 33 34 // IMAPServer handles requests for the /api/imapserver/ endpoint 35 func (as *Server) IMAPServer(w http.ResponseWriter, r *http.Request) { 36 switch { 37 case r.Method == "GET": 38 ss, err := models.GetIMAP(ctx.Get(r, "user_id").(int64)) 39 if err != nil { 40 JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) 41 return 42 } 43 JSONResponse(w, ss, http.StatusOK) 44 45 // POST: Update database 46 case r.Method == "POST": 47 im := models.IMAP{} 48 err := json.NewDecoder(r.Body).Decode(&im) 49 if err != nil { 50 JSONResponse(w, models.Response{Success: false, Message: "Invalid data. Please check your IMAP settings."}, http.StatusBadRequest) 51 return 52 } 53 im.ModifiedDate = time.Now().UTC() 54 im.UserId = ctx.Get(r, "user_id").(int64) 55 err = models.PostIMAP(&im, ctx.Get(r, "user_id").(int64)) 56 if err != nil { 57 JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) 58 return 59 } 60 JSONResponse(w, models.Response{Success: true, Message: "Successfully saved IMAP settings."}, http.StatusCreated) 61 } 62 }