func (as *APIServer) existingPatchRequest(w http.ResponseWriter, r *http.Request) { p, err := getPatchFromRequest(r) if err != nil { http.Error(w, err.Error(), http.StatusNotFound) return } if !getGlobalLock(r.RemoteAddr, p.Id.String()) { as.LoggedError(w, r, http.StatusInternalServerError, ErrLockTimeout) return } defer releaseGlobalLock(r.RemoteAddr, p.Id.String()) // dispatch to handlers based on specified action switch r.FormValue("action") { case "update": name := r.FormValue("desc") err := p.SetDescription(name) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } as.WriteJSON(w, http.StatusOK, "patch updated") case "finalize": if p.Activated == true { http.Error(w, "patch is already finalized", http.StatusBadRequest) return } patchedProject, err := validator.GetPatchedProject(p, &as.Settings) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } projectYamlBytes, err := yaml.Marshal(patchedProject) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, fmt.Errorf("error marshalling patched config: %v", err)) return } p.PatchedConfig = string(projectYamlBytes) _, err = model.FinalizePatch(p, &as.Settings) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } as.WriteJSON(w, http.StatusOK, "patch finalized") case "cancel": err = model.CancelPatch(p) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } as.WriteJSON(w, http.StatusOK, "patch deleted") default: http.Error(w, fmt.Sprintf("Unrecognized action: %v", r.FormValue("action")), http.StatusBadRequest) } }
func (as *APIServer) existingPatchRequest(w http.ResponseWriter, r *http.Request) { p, err := getPatchFromRequest(r) if err != nil { http.Error(w, err.Error(), http.StatusNotFound) return } if !getGlobalLock(PatchLockTitle) { as.LoggedError(w, r, http.StatusInternalServerError, ErrLockTimeout) return } defer releaseGlobalLock(PatchLockTitle) // dispatch to handlers based on specified action switch r.FormValue("action") { case "update": name := r.FormValue("desc") err := p.SetDescription(name) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } as.WriteJSON(w, http.StatusOK, "patch updated") case "finalize": if p.Activated == true { http.Error(w, "patch is already finalized", http.StatusBadRequest) return } _, err = validator.ValidateAndFinalize(p, &as.Settings) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } as.WriteJSON(w, http.StatusOK, "patch finalized") case "cancel": err = model.CancelPatch(p) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } as.WriteJSON(w, http.StatusOK, "patch deleted") default: http.Error(w, fmt.Sprintf("Unrecognized action: %v", r.FormValue("action")), http.StatusBadRequest) } }
func (as *APIServer) existingPatchRequest(w http.ResponseWriter, r *http.Request) { user := MustHaveUser(r) p, err := getPatchFromRequest(r) if err != nil { http.Error(w, err.Error(), http.StatusNotFound) return } if !getGlobalLock(r.RemoteAddr, p.Id.String()) { as.LoggedError(w, r, http.StatusInternalServerError, ErrLockTimeout) return } defer releaseGlobalLock(r.RemoteAddr, p.Id.String()) var action, desc string if r.Header.Get("Content-Type") == "application/x-www-form-urlencoded" { action = r.FormValue("action") } else { data := struct { PatchId string `json:"patch_id"` Action string `json:"action"` Description string `json:"description"` }{} if err := util.ReadJSONInto(r.Body, &data); err != nil { as.LoggedError(w, r, http.StatusBadRequest, err) return } action, desc = data.Action, data.Description } // dispatch to handlers based on specified action switch action { case "update": err := p.SetDescription(desc) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } as.WriteJSON(w, http.StatusOK, "patch updated") case "finalize": if p.Activated == true { http.Error(w, "patch is already finalized", http.StatusBadRequest) return } patchedProject, err := validator.GetPatchedProject(p, &as.Settings) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } projectYamlBytes, err := yaml.Marshal(patchedProject) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, fmt.Errorf("error marshalling patched config: %v", err)) return } p.PatchedConfig = string(projectYamlBytes) _, err = model.FinalizePatch(p, &as.Settings) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } as.WriteJSON(w, http.StatusOK, "patch finalized") case "cancel": err = model.CancelPatch(p, user.Id) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, err) return } as.WriteJSON(w, http.StatusOK, "patch deleted") default: http.Error(w, fmt.Sprintf("Unrecognized action: %v", action), http.StatusBadRequest) } }