diff --git a/Makefile b/Makefile index e423fa54..05cf6321 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,9 @@ IMAGE_TAG = garm-build USER_ID=$(shell ((docker --version | grep -q podman) && echo "0" || id -u)) USER_GROUP=$(shell ((docker --version | grep -q podman) && echo "0" || id -g)) +ROOTDIR=$(dir $(abspath $(lastword $(MAKEFILE_LIST)))) +GO ?= go + default: build-static @@ -17,3 +20,11 @@ build-static: .PHONY: test test: go test -race -mod=vendor -tags testing -v $(TEST_ARGS) -timeout=15m -parallel=4 -count=1 ./... + +verify-vendor: ## verify if all the go.mod/go.sum files are up-to-date + $(eval TMPDIR := $(shell mktemp -d)) + @cp -R ${ROOTDIR} ${TMPDIR} + @(cd ${TMPDIR}/garm && ${GO} mod tidy) + @diff -r -u -q ${ROOTDIR} ${TMPDIR}/garm + @rm -rf ${TMPDIR} + diff --git a/apiserver/controllers/controllers.go b/apiserver/controllers/controllers.go index ec918ce2..be27d92b 100644 --- a/apiserver/controllers/controllers.go +++ b/apiserver/controllers/controllers.go @@ -16,7 +16,7 @@ package controllers import ( "encoding/json" - "io/ioutil" + "io" "log" "net/http" @@ -79,29 +79,14 @@ func handleError(w http.ResponseWriter, err error) { apiErr.Details = "" } - json.NewEncoder(w).Encode(apiErr) -} - -func (a *APIController) authenticateHook(body []byte, headers http.Header) error { - // signature := headers.Get("X-Hub-Signature-256") - hookType := headers.Get("X-Github-Hook-Installation-Target-Type") - var workflowJob runnerParams.WorkflowJob - if err := json.Unmarshal(body, &workflowJob); err != nil { - return gErrors.NewBadRequestError("invalid post body: %s", err) + if err := json.NewEncoder(w).Encode(apiErr); err != nil { + log.Printf("failed to encode response: %q", err) } - - switch hookType { - case "repository": - case "organization": - default: - return gErrors.NewBadRequestError("invalid hook type: %s", hookType) - } - return nil } func (a *APIController) handleWorkflowJobEvent(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() - body, err := ioutil.ReadAll(r.Body) + body, err := io.ReadAll(r.Body) if err != nil { handleError(w, gErrors.NewBadRequestError("invalid post body: %s", err)) return @@ -137,7 +122,9 @@ func (a *APIController) WSHandler(writer http.ResponseWriter, req *http.Request) ctx := req.Context() if !auth.IsAdmin(ctx) { writer.WriteHeader(http.StatusForbidden) - writer.Write([]byte("you need admin level access to view logs")) + if _, err := writer.Write([]byte("you need admin level access to view logs")); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -177,7 +164,9 @@ func (a *APIController) NotFoundHandler(w http.ResponseWriter, r *http.Request) } w.WriteHeader(http.StatusNotFound) w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(apiErr) + if err := json.NewEncoder(w).Encode(apiErr); err != nil { + log.Printf("failet to write response: %q", err) + } } // LoginHandler returns a jwt token @@ -206,7 +195,9 @@ func (a *APIController) LoginHandler(w http.ResponseWriter, r *http.Request) { return } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(runnerParams.JWTResponse{Token: tokenString}) + if err := json.NewEncoder(w).Encode(runnerParams.JWTResponse{Token: tokenString}); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) FirstRunHandler(w http.ResponseWriter, r *http.Request) { @@ -230,7 +221,9 @@ func (a *APIController) FirstRunHandler(w http.ResponseWriter, r *http.Request) return } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(newUser) + if err := json.NewEncoder(w).Encode(newUser); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListCredentials(w http.ResponseWriter, r *http.Request) { @@ -242,7 +235,9 @@ func (a *APIController) ListCredentials(w http.ResponseWriter, r *http.Request) } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(creds) + if err := json.NewEncoder(w).Encode(creds); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListProviders(w http.ResponseWriter, r *http.Request) { @@ -254,5 +249,7 @@ func (a *APIController) ListProviders(w http.ResponseWriter, r *http.Request) { } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(providers) + if err := json.NewEncoder(w).Encode(providers); err != nil { + log.Printf("failed to encode response: %q", err) + } } diff --git a/apiserver/controllers/enterprises.go b/apiserver/controllers/enterprises.go index 8591953f..704e1516 100644 --- a/apiserver/controllers/enterprises.go +++ b/apiserver/controllers/enterprises.go @@ -43,7 +43,9 @@ func (a *APIController) CreateEnterpriseHandler(w http.ResponseWriter, r *http.R } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(enterprise) + if err := json.NewEncoder(w).Encode(enterprise); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListEnterprisesHandler(w http.ResponseWriter, r *http.Request) { @@ -57,7 +59,9 @@ func (a *APIController) ListEnterprisesHandler(w http.ResponseWriter, r *http.Re } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(enterprise) + if err := json.NewEncoder(w).Encode(enterprise); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) GetEnterpriseByIDHandler(w http.ResponseWriter, r *http.Request) { @@ -67,10 +71,12 @@ func (a *APIController) GetEnterpriseByIDHandler(w http.ResponseWriter, r *http. enterpriseID, ok := vars["enterpriseID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No enterprise ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -82,7 +88,9 @@ func (a *APIController) GetEnterpriseByIDHandler(w http.ResponseWriter, r *http. } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(enterprise) + if err := json.NewEncoder(w).Encode(enterprise); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) DeleteEnterpriseHandler(w http.ResponseWriter, r *http.Request) { @@ -92,10 +100,12 @@ func (a *APIController) DeleteEnterpriseHandler(w http.ResponseWriter, r *http.R enterpriseID, ok := vars["enterpriseID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No enterprise ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -117,10 +127,12 @@ func (a *APIController) UpdateEnterpriseHandler(w http.ResponseWriter, r *http.R enterpriseID, ok := vars["enterpriseID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No enterprise ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -138,7 +150,9 @@ func (a *APIController) UpdateEnterpriseHandler(w http.ResponseWriter, r *http.R } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(enterprise) + if err := json.NewEncoder(w).Encode(enterprise); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) CreateEnterprisePoolHandler(w http.ResponseWriter, r *http.Request) { @@ -148,10 +162,12 @@ func (a *APIController) CreateEnterprisePoolHandler(w http.ResponseWriter, r *ht enterpriseID, ok := vars["enterpriseID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No enterprise ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -170,7 +186,9 @@ func (a *APIController) CreateEnterprisePoolHandler(w http.ResponseWriter, r *ht } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListEnterprisePoolsHandler(w http.ResponseWriter, r *http.Request) { @@ -179,10 +197,12 @@ func (a *APIController) ListEnterprisePoolsHandler(w http.ResponseWriter, r *htt enterpriseID, ok := vars["enterpriseID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No enterprise ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -194,7 +214,10 @@ func (a *APIController) ListEnterprisePoolsHandler(w http.ResponseWriter, r *htt } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pools) + if err := json.NewEncoder(w).Encode(pools); err != nil { + log.Printf("failed to encode response: %q", err) + } + } func (a *APIController) GetEnterprisePoolHandler(w http.ResponseWriter, r *http.Request) { @@ -204,10 +227,12 @@ func (a *APIController) GetEnterprisePoolHandler(w http.ResponseWriter, r *http. poolID, poolOk := vars["poolID"] if !enterpriseOk || !poolOk { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No enterprise or pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -219,7 +244,9 @@ func (a *APIController) GetEnterprisePoolHandler(w http.ResponseWriter, r *http. } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) DeleteEnterprisePoolHandler(w http.ResponseWriter, r *http.Request) { @@ -230,10 +257,12 @@ func (a *APIController) DeleteEnterprisePoolHandler(w http.ResponseWriter, r *ht poolID, poolOk := vars["poolID"] if !enterpriseOk || !poolOk { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No enterprise or pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -256,10 +285,12 @@ func (a *APIController) UpdateEnterprisePoolHandler(w http.ResponseWriter, r *ht poolID, poolOk := vars["poolID"] if !enterpriseOk || !poolOk { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No enterprise or pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -278,5 +309,7 @@ func (a *APIController) UpdateEnterprisePoolHandler(w http.ResponseWriter, r *ht } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } } diff --git a/apiserver/controllers/instances.go b/apiserver/controllers/instances.go index 7ace7fc6..f62d0d59 100644 --- a/apiserver/controllers/instances.go +++ b/apiserver/controllers/instances.go @@ -32,10 +32,12 @@ func (a *APIController) ListPoolInstancesHandler(w http.ResponseWriter, r *http. poolID, ok := vars["poolID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -47,7 +49,9 @@ func (a *APIController) ListPoolInstancesHandler(w http.ResponseWriter, r *http. } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(instances) + if err := json.NewEncoder(w).Encode(instances); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) GetInstanceHandler(w http.ResponseWriter, r *http.Request) { @@ -56,10 +60,12 @@ func (a *APIController) GetInstanceHandler(w http.ResponseWriter, r *http.Reques instanceName, ok := vars["instanceName"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No runner name specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -71,7 +77,9 @@ func (a *APIController) GetInstanceHandler(w http.ResponseWriter, r *http.Reques } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(instance) + if err := json.NewEncoder(w).Encode(instance); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) DeleteInstanceHandler(w http.ResponseWriter, r *http.Request) { @@ -80,10 +88,12 @@ func (a *APIController) DeleteInstanceHandler(w http.ResponseWriter, r *http.Req instanceName, ok := vars["instanceName"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No instance name specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -103,10 +113,12 @@ func (a *APIController) ListRepoInstancesHandler(w http.ResponseWriter, r *http. repoID, ok := vars["repoID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No repo ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -118,7 +130,9 @@ func (a *APIController) ListRepoInstancesHandler(w http.ResponseWriter, r *http. } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(instances) + if err := json.NewEncoder(w).Encode(instances); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListOrgInstancesHandler(w http.ResponseWriter, r *http.Request) { @@ -127,10 +141,12 @@ func (a *APIController) ListOrgInstancesHandler(w http.ResponseWriter, r *http.R orgID, ok := vars["orgID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No org ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -142,7 +158,9 @@ func (a *APIController) ListOrgInstancesHandler(w http.ResponseWriter, r *http.R } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(instances) + if err := json.NewEncoder(w).Encode(instances); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListEnterpriseInstancesHandler(w http.ResponseWriter, r *http.Request) { @@ -151,10 +169,12 @@ func (a *APIController) ListEnterpriseInstancesHandler(w http.ResponseWriter, r enterpriseID, ok := vars["enterpriseID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No enterprise ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -166,7 +186,9 @@ func (a *APIController) ListEnterpriseInstancesHandler(w http.ResponseWriter, r } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(instances) + if err := json.NewEncoder(w).Encode(instances); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListAllInstancesHandler(w http.ResponseWriter, r *http.Request) { @@ -180,7 +202,9 @@ func (a *APIController) ListAllInstancesHandler(w http.ResponseWriter, r *http.R } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(instances) + if err := json.NewEncoder(w).Encode(instances); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) InstanceStatusMessageHandler(w http.ResponseWriter, r *http.Request) { @@ -214,5 +238,7 @@ func (a *APIController) InstanceGithubRegistrationTokenHandler(w http.ResponseWr w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) - w.Write([]byte(token)) + if _, err := w.Write([]byte(token)); err != nil { + log.Printf("failed to encode response: %q", err) + } } diff --git a/apiserver/controllers/organizations.go b/apiserver/controllers/organizations.go index a76049c1..9bc7aa98 100644 --- a/apiserver/controllers/organizations.go +++ b/apiserver/controllers/organizations.go @@ -43,7 +43,9 @@ func (a *APIController) CreateOrgHandler(w http.ResponseWriter, r *http.Request) } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(repo) + if err := json.NewEncoder(w).Encode(repo); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListOrgsHandler(w http.ResponseWriter, r *http.Request) { @@ -57,7 +59,9 @@ func (a *APIController) ListOrgsHandler(w http.ResponseWriter, r *http.Request) } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(orgs) + if err := json.NewEncoder(w).Encode(orgs); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) GetOrgByIDHandler(w http.ResponseWriter, r *http.Request) { @@ -67,10 +71,12 @@ func (a *APIController) GetOrgByIDHandler(w http.ResponseWriter, r *http.Request orgID, ok := vars["orgID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No org ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -82,7 +88,9 @@ func (a *APIController) GetOrgByIDHandler(w http.ResponseWriter, r *http.Request } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(org) + if err := json.NewEncoder(w).Encode(org); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) DeleteOrgHandler(w http.ResponseWriter, r *http.Request) { @@ -92,10 +100,12 @@ func (a *APIController) DeleteOrgHandler(w http.ResponseWriter, r *http.Request) orgID, ok := vars["orgID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No org ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -117,10 +127,12 @@ func (a *APIController) UpdateOrgHandler(w http.ResponseWriter, r *http.Request) orgID, ok := vars["orgID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No org ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -138,7 +150,9 @@ func (a *APIController) UpdateOrgHandler(w http.ResponseWriter, r *http.Request) } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(org) + if err := json.NewEncoder(w).Encode(org); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) CreateOrgPoolHandler(w http.ResponseWriter, r *http.Request) { @@ -148,10 +162,12 @@ func (a *APIController) CreateOrgPoolHandler(w http.ResponseWriter, r *http.Requ orgID, ok := vars["orgID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No org ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -170,7 +186,9 @@ func (a *APIController) CreateOrgPoolHandler(w http.ResponseWriter, r *http.Requ } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListOrgPoolsHandler(w http.ResponseWriter, r *http.Request) { @@ -179,10 +197,12 @@ func (a *APIController) ListOrgPoolsHandler(w http.ResponseWriter, r *http.Reque orgID, ok := vars["orgID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No org ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -194,7 +214,9 @@ func (a *APIController) ListOrgPoolsHandler(w http.ResponseWriter, r *http.Reque } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pools) + if err := json.NewEncoder(w).Encode(pools); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) GetOrgPoolHandler(w http.ResponseWriter, r *http.Request) { @@ -204,10 +226,12 @@ func (a *APIController) GetOrgPoolHandler(w http.ResponseWriter, r *http.Request poolID, poolOk := vars["poolID"] if !repoOk || !poolOk { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No org or pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -219,7 +243,9 @@ func (a *APIController) GetOrgPoolHandler(w http.ResponseWriter, r *http.Request } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) DeleteOrgPoolHandler(w http.ResponseWriter, r *http.Request) { @@ -230,10 +256,12 @@ func (a *APIController) DeleteOrgPoolHandler(w http.ResponseWriter, r *http.Requ poolID, poolOk := vars["poolID"] if !orgOk || !poolOk { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No org or pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -256,10 +284,12 @@ func (a *APIController) UpdateOrgPoolHandler(w http.ResponseWriter, r *http.Requ poolID, poolOk := vars["poolID"] if !orgOk || !poolOk { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No org or pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -278,5 +308,7 @@ func (a *APIController) UpdateOrgPoolHandler(w http.ResponseWriter, r *http.Requ } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } } diff --git a/apiserver/controllers/pools.go b/apiserver/controllers/pools.go index 6f5fee96..4d6c3f88 100644 --- a/apiserver/controllers/pools.go +++ b/apiserver/controllers/pools.go @@ -38,7 +38,9 @@ func (a *APIController) ListAllPoolsHandler(w http.ResponseWriter, r *http.Reque } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pools) + if err := json.NewEncoder(w).Encode(pools); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) GetPoolByIDHandler(w http.ResponseWriter, r *http.Request) { @@ -48,10 +50,12 @@ func (a *APIController) GetPoolByIDHandler(w http.ResponseWriter, r *http.Reques poolID, ok := vars["poolID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -65,7 +69,9 @@ func (a *APIController) GetPoolByIDHandler(w http.ResponseWriter, r *http.Reques pool.RunnerBootstrapTimeout = pool.RunnerTimeout() w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) DeletePoolByIDHandler(w http.ResponseWriter, r *http.Request) { @@ -75,10 +81,12 @@ func (a *APIController) DeletePoolByIDHandler(w http.ResponseWriter, r *http.Req poolID, ok := vars["poolID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -99,10 +107,12 @@ func (a *APIController) UpdatePoolByIDHandler(w http.ResponseWriter, r *http.Req poolID, ok := vars["poolID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -121,6 +131,7 @@ func (a *APIController) UpdatePoolByIDHandler(w http.ResponseWriter, r *http.Req } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) - + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } } diff --git a/apiserver/controllers/repositories.go b/apiserver/controllers/repositories.go index 6bdb2af2..2357497a 100644 --- a/apiserver/controllers/repositories.go +++ b/apiserver/controllers/repositories.go @@ -43,7 +43,9 @@ func (a *APIController) CreateRepoHandler(w http.ResponseWriter, r *http.Request } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(repo) + if err := json.NewEncoder(w).Encode(repo); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListReposHandler(w http.ResponseWriter, r *http.Request) { @@ -57,7 +59,9 @@ func (a *APIController) ListReposHandler(w http.ResponseWriter, r *http.Request) } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(repos) + if err := json.NewEncoder(w).Encode(repos); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) GetRepoByIDHandler(w http.ResponseWriter, r *http.Request) { @@ -67,10 +71,12 @@ func (a *APIController) GetRepoByIDHandler(w http.ResponseWriter, r *http.Reques repoID, ok := vars["repoID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No repo ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -82,7 +88,9 @@ func (a *APIController) GetRepoByIDHandler(w http.ResponseWriter, r *http.Reques } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(repo) + if err := json.NewEncoder(w).Encode(repo); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) DeleteRepoHandler(w http.ResponseWriter, r *http.Request) { @@ -92,10 +100,12 @@ func (a *APIController) DeleteRepoHandler(w http.ResponseWriter, r *http.Request repoID, ok := vars["repoID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No repo ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -117,10 +127,12 @@ func (a *APIController) UpdateRepoHandler(w http.ResponseWriter, r *http.Request repoID, ok := vars["repoID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No repo ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -138,7 +150,9 @@ func (a *APIController) UpdateRepoHandler(w http.ResponseWriter, r *http.Request } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(repo) + if err := json.NewEncoder(w).Encode(repo); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) CreateRepoPoolHandler(w http.ResponseWriter, r *http.Request) { @@ -148,10 +162,12 @@ func (a *APIController) CreateRepoPoolHandler(w http.ResponseWriter, r *http.Req repoID, ok := vars["repoID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No repo ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -170,7 +186,9 @@ func (a *APIController) CreateRepoPoolHandler(w http.ResponseWriter, r *http.Req } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) ListRepoPoolsHandler(w http.ResponseWriter, r *http.Request) { @@ -179,10 +197,12 @@ func (a *APIController) ListRepoPoolsHandler(w http.ResponseWriter, r *http.Requ repoID, ok := vars["repoID"] if !ok { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No repo ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -194,7 +214,9 @@ func (a *APIController) ListRepoPoolsHandler(w http.ResponseWriter, r *http.Requ } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pools) + if err := json.NewEncoder(w).Encode(pools); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) GetRepoPoolHandler(w http.ResponseWriter, r *http.Request) { @@ -204,10 +226,12 @@ func (a *APIController) GetRepoPoolHandler(w http.ResponseWriter, r *http.Reques poolID, poolOk := vars["poolID"] if !repoOk || !poolOk { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No repo or pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -219,7 +243,9 @@ func (a *APIController) GetRepoPoolHandler(w http.ResponseWriter, r *http.Reques } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } } func (a *APIController) DeleteRepoPoolHandler(w http.ResponseWriter, r *http.Request) { @@ -230,10 +256,12 @@ func (a *APIController) DeleteRepoPoolHandler(w http.ResponseWriter, r *http.Req poolID, poolOk := vars["poolID"] if !repoOk || !poolOk { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No repo or pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -256,10 +284,12 @@ func (a *APIController) UpdateRepoPoolHandler(w http.ResponseWriter, r *http.Req poolID, poolOk := vars["poolID"] if !repoOk || !poolOk { w.WriteHeader(http.StatusBadRequest) - json.NewEncoder(w).Encode(params.APIErrorResponse{ + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ Error: "Bad Request", Details: "No repo or pool ID specified", - }) + }); err != nil { + log.Printf("failed to encode response: %q", err) + } return } @@ -278,5 +308,7 @@ func (a *APIController) UpdateRepoPoolHandler(w http.ResponseWriter, r *http.Req } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pool) + if err := json.NewEncoder(w).Encode(pool); err != nil { + log.Printf("failed to encode response: %q", err) + } }