func (uis *UIServer) addDistro(w http.ResponseWriter, r *http.Request) { id, hasId := mux.Vars(r)["distro_id"] u := MustHaveUser(r) b, err := ioutil.ReadAll(r.Body) if err != nil { message := fmt.Sprintf("error adding distro: %v", err) PushFlash(uis.CookieStore, r, w, NewErrorFlash(message)) http.Error(w, err.Error(), http.StatusBadRequest) return } defer r.Body.Close() var d distro.Distro if err = json.Unmarshal(b, &d); err != nil { message := fmt.Sprintf("error adding distro: %v", err) PushFlash(uis.CookieStore, r, w, NewErrorFlash(message)) http.Error(w, message, http.StatusBadRequest) return } if hasId { d.Id = id } vErrs, err := validator.CheckDistro(&d, &uis.Settings, true) if err != nil { message := fmt.Sprintf("error retrieving distroIds: %v", err) PushFlash(uis.CookieStore, r, w, NewErrorFlash(message)) http.Error(w, message, http.StatusInternalServerError) return } if len(vErrs) != 0 { for _, e := range vErrs { PushFlash(uis.CookieStore, r, w, NewErrorFlash(e.Error())) } uis.WriteJSON(w, http.StatusBadRequest, vErrs) return } if err = d.Insert(); err != nil { message := fmt.Sprintf("error inserting distro '%v': %v", d.Id, err) PushFlash(uis.CookieStore, r, w, NewErrorFlash(message)) uis.WriteJSON(w, http.StatusInternalServerError, err) return } event.LogDistroAdded(d.Id, u.Username(), d) PushFlash(uis.CookieStore, r, w, NewSuccessFlash(fmt.Sprintf("Distro %v successfully added.", d.Id))) uis.WriteJSON(w, http.StatusOK, "distro successfully added") }
func (uis *UIServer) modifyDistro(w http.ResponseWriter, r *http.Request) { id := mux.Vars(r)["distro_id"] u := MustHaveUser(r) b, err := ioutil.ReadAll(r.Body) if err != nil { message := fmt.Sprintf("error reading request: %v", err) PushFlash(uis.CookieStore, r, w, NewErrorFlash(message)) http.Error(w, message, http.StatusBadRequest) return } defer r.Body.Close() oldDistro, err := distro.FindOne(distro.ById(id)) if err != nil { message := fmt.Sprintf("error finding distro: %v", err) PushFlash(uis.CookieStore, r, w, NewErrorFlash(message)) http.Error(w, message, http.StatusInternalServerError) return } newDistro := *oldDistro // attempt to unmarshal data into distros field for type validation if err = json.Unmarshal(b, &newDistro); err != nil { message := fmt.Sprintf("error unmarshaling request: %v", err) PushFlash(uis.CookieStore, r, w, NewErrorFlash(message)) http.Error(w, message, http.StatusBadRequest) return } // check that the resulting distro is valid vErrs := validator.CheckDistro(&newDistro, &uis.Settings, false) if len(vErrs) != 0 { for _, e := range vErrs { PushFlash(uis.CookieStore, r, w, NewErrorFlash(e.Error())) } uis.WriteJSON(w, http.StatusBadRequest, vErrs) return } if err = newDistro.Update(); err != nil { message := fmt.Sprintf("error updating distro: %v", err) PushFlash(uis.CookieStore, r, w, NewErrorFlash(message)) http.Error(w, message, http.StatusBadRequest) return } event.LogDistroModified(id, u.Username(), newDistro) PushFlash(uis.CookieStore, r, w, NewSuccessFlash(fmt.Sprintf("Distro %v successfully updated.", id))) uis.WriteJSON(w, http.StatusOK, "distro successfully updated") }