diff --git a/src/adminserver/api/base.go b/src/adminserver/api/base.go index e4221bb64..a5335cb74 100644 --- a/src/adminserver/api/base.go +++ b/src/adminserver/api/base.go @@ -16,6 +16,7 @@ package api import ( + "encoding/json" "net/http" ) @@ -32,3 +33,17 @@ func handleUnauthorized(w http.ResponseWriter) { http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) } + +// response status code will be written automatically if there is an error +func writeJSON(w http.ResponseWriter, v interface{}) error { + b, err := json.Marshal(v) + if err != nil { + handleInternalServerError(w) + return err + } + + if _, err = w.Write(b); err != nil { + return err + } + return nil +} diff --git a/src/adminserver/api/cfg.go b/src/adminserver/api/cfg.go index f61141554..94f44e87d 100644 --- a/src/adminserver/api/cfg.go +++ b/src/adminserver/api/cfg.go @@ -33,14 +33,9 @@ func ListCfgs(w http.ResponseWriter, r *http.Request) { return } - b, err := json.MarshalIndent(cfg, "", " ") - if err != nil { - log.Errorf("failed to marshal configurations: %v", err) - handleInternalServerError(w) - return - } - if _, err = w.Write(b); err != nil { + if err = writeJSON(w, cfg); err != nil { log.Errorf("failed to write response: %v", err) + return } } diff --git a/src/adminserver/api/systeminfo.go b/src/adminserver/api/systeminfo.go index e5f345b2b..fe0ecda4f 100644 --- a/src/adminserver/api/systeminfo.go +++ b/src/adminserver/api/systeminfo.go @@ -16,7 +16,6 @@ package api import ( - "encoding/json" "net/http" "github.com/vmware/harbor/src/adminserver/systeminfo/imagestorage" @@ -32,14 +31,8 @@ func Capacity(w http.ResponseWriter, r *http.Request) { return } - b, err := json.Marshal(capacity) - if err != nil { - log.Errorf("failed to marshal capacity: %v", err) - handleInternalServerError(w) + if err = writeJSON(w, capacity); err != nil { + log.Errorf("failed to write response: %v", err) return } - - if _, err = w.Write(b); err != nil { - log.Errorf("failed to write response: %v", err) - } } diff --git a/src/adminserver/handlers/handler.go b/src/adminserver/handlers/handler.go index 3ebc621cd..8278f63d2 100644 --- a/src/adminserver/handlers/handler.go +++ b/src/adminserver/handlers/handler.go @@ -24,6 +24,8 @@ import ( "github.com/vmware/harbor/src/common/utils/log" ) +// NewHandler returns a gorilla router which is wrapped by authenticate handler +// and logging handler func NewHandler() http.Handler { h := newRouter() secrets := map[string]string{