func (u *updateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var err error var res *server.Result if r.Method == "POST" { defer func() { if err := r.Body.Close(); err != nil { log.Debugf("Unable to close request body: %v", err) } }() var params server.Params decoder := json.NewDecoder(r.Body) if err = decoder.Decode(¶ms); err != nil { u.closeWithStatus(w, http.StatusBadRequest) return } if res, err = releaseManager.CheckForUpdate(¶ms); err != nil { log.Debugf("CheckForUpdate failed with error: %q", err) if err == server.ErrNoUpdateAvailable { log.Debugf("Got query from client %q/%q, no update available.", params.AppVersion, params.OS) u.closeWithStatus(w, http.StatusNoContent) return } log.Debugf("Got query from client %q/%q: %q.", err) u.closeWithStatus(w, http.StatusExpectationFailed) return } log.Debugf("Got query from client %q/%q, resolved to upgrade to %q using %q strategy.", params.AppVersion, params.OS, res.Version, res.PatchType) if res.PatchURL != "" { res.PatchURL = *flagPublicAddr + res.PatchURL } var content []byte if content, err = json.Marshal(res); err != nil { u.closeWithStatus(w, http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) w.Header().Set("Content-Type", "application/json") if _, err := w.Write(content); err != nil { log.Debugf("Unable to write response: %v", err) } return } u.closeWithStatus(w, http.StatusNotFound) return }
func (u *updateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var err error var res *server.Result if r.Method == "POST" { defer r.Body.Close() var params server.Params decoder := json.NewDecoder(r.Body) if err = decoder.Decode(¶ms); err != nil { u.closeWithStatus(w, http.StatusBadRequest) return } if res, err = releaseManager.CheckForUpdate(¶ms); err != nil { log.Debugf("CheckForUpdate failed with error: %q", err) if err == server.ErrNoUpdateAvailable { u.closeWithStatus(w, http.StatusNoContent) return } u.closeWithStatus(w, http.StatusExpectationFailed) return } if res.PatchURL != "" { res.PatchURL = *flagPublicAddr + res.PatchURL } var content []byte if content, err = json.Marshal(res); err != nil { u.closeWithStatus(w, http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) w.Header().Set("Content-Type", "application/json") w.Write(content) return } u.closeWithStatus(w, http.StatusNotFound) return }