github.com/8samaka/gophish@v0.9.0/controllers/api/page.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 // Pages handles requests for the /api/pages/ endpoint 17 func (as *Server) Pages(w http.ResponseWriter, r *http.Request) { 18 switch { 19 case r.Method == "GET": 20 ps, err := models.GetPages(ctx.Get(r, "user_id").(int64)) 21 if err != nil { 22 log.Error(err) 23 } 24 JSONResponse(w, ps, http.StatusOK) 25 //POST: Create a new page and return it as JSON 26 case r.Method == "POST": 27 p := models.Page{} 28 // Put the request into a page 29 err := json.NewDecoder(r.Body).Decode(&p) 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.GetPageByName(p.Name, ctx.Get(r, "user_id").(int64)) 36 if err != gorm.ErrRecordNotFound { 37 JSONResponse(w, models.Response{Success: false, Message: "Page name already in use"}, http.StatusConflict) 38 log.Error(err) 39 return 40 } 41 p.ModifiedDate = time.Now().UTC() 42 p.UserId = ctx.Get(r, "user_id").(int64) 43 err = models.PostPage(&p) 44 if err != nil { 45 JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) 46 return 47 } 48 JSONResponse(w, p, http.StatusCreated) 49 } 50 } 51 52 // Page contains functions to handle the GET'ing, DELETE'ing, and PUT'ing 53 // of a Page object 54 func (as *Server) Page(w http.ResponseWriter, r *http.Request) { 55 vars := mux.Vars(r) 56 id, _ := strconv.ParseInt(vars["id"], 0, 64) 57 p, err := models.GetPage(id, ctx.Get(r, "user_id").(int64)) 58 if err != nil { 59 JSONResponse(w, models.Response{Success: false, Message: "Page not found"}, http.StatusNotFound) 60 return 61 } 62 switch { 63 case r.Method == "GET": 64 JSONResponse(w, p, http.StatusOK) 65 case r.Method == "DELETE": 66 err = models.DeletePage(id, ctx.Get(r, "user_id").(int64)) 67 if err != nil { 68 JSONResponse(w, models.Response{Success: false, Message: "Error deleting page"}, http.StatusInternalServerError) 69 return 70 } 71 JSONResponse(w, models.Response{Success: true, Message: "Page Deleted Successfully"}, http.StatusOK) 72 case r.Method == "PUT": 73 p = models.Page{} 74 err = json.NewDecoder(r.Body).Decode(&p) 75 if err != nil { 76 log.Error(err) 77 } 78 if p.Id != id { 79 JSONResponse(w, models.Response{Success: false, Message: "/:id and /:page_id mismatch"}, http.StatusBadRequest) 80 return 81 } 82 p.ModifiedDate = time.Now().UTC() 83 p.UserId = ctx.Get(r, "user_id").(int64) 84 err = models.PutPage(&p) 85 if err != nil { 86 JSONResponse(w, models.Response{Success: false, Message: "Error updating page: " + err.Error()}, http.StatusInternalServerError) 87 return 88 } 89 JSONResponse(w, p, http.StatusOK) 90 } 91 }