github.com/merlinepedra/gopphish-attack@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  }