diff --git a/admin/handlers-post.go b/admin/handlers-post.go index 955098d7..2856e962 100644 --- a/admin/handlers-post.go +++ b/admin/handlers-post.go @@ -15,8 +15,15 @@ import ( "github.com/gorilla/mux" ) +const ( + metricAdminReq = "admin-req" + metricAdminErr = "admin-err" + metricAdminOK = "admin-ok" +) + // Handler for login page for POST requests func loginPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), false) responseMessage := "OK" responseCode := http.StatusOK @@ -48,27 +55,17 @@ func loginPOSTHandler(w http.ResponseWriter, r *http.Request) { } } } - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Login response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handle POST requests to logout func logoutHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "OK" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), false) @@ -78,6 +75,7 @@ func logoutHandler(w http.ResponseWriter, r *http.Request) { // Parse request JSON body err := json.NewDecoder(r.Body).Decode(&l) if err != nil { + incMetric(metricAdminErr) responseMessage = "error parsing POST body" responseCode = http.StatusInternalServerError if settingsmgr.DebugService(settings.ServiceAdmin) { @@ -101,27 +99,17 @@ func logoutHandler(w http.ResponseWriter, r *http.Request) { } } } - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Logout response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler for POST requests to run queries func queryRunPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "The query was created successfully" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -251,24 +239,17 @@ func queryRunPOSTHandler(w http.ResponseWriter, r *http.Request) { log.Printf("%s", responseMessage) } send_response: - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - log.Printf("error formating response [ %v ]", err) - responseCode = http.StatusInternalServerError - response = []byte("error formating response") - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Query run response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler for POST requests to run file carves func carvesRunPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "The carve was created successfully" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -410,24 +391,17 @@ func carvesRunPOSTHandler(w http.ResponseWriter, r *http.Request) { log.Printf("%s", responseMessage) } send_response: - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - log.Printf("error formating response [ %v ]", err) - responseCode = http.StatusInternalServerError - response = []byte("error formating response") - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Carve run response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler for POST requests to queries func queryActionsPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "OK" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -493,27 +467,17 @@ func queryActionsPOSTHandler(w http.ResponseWriter, r *http.Request) { } } send_response: - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Query run response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler for POST requests to carves func carvesActionsPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "OK" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -561,27 +525,17 @@ func carvesActionsPOSTHandler(w http.ResponseWriter, r *http.Request) { } } send_response: - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Carves action response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler POST requests for saving configuration func confPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "Configuration saved successfully" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -655,27 +609,17 @@ func confPOSTHandler(w http.ResponseWriter, r *http.Request) { } } send_response: - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Configuration response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler POST requests for saving intervals func intervalsPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "Intervals updated successfully" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -743,27 +687,17 @@ func intervalsPOSTHandler(w http.ResponseWriter, r *http.Request) { } } } - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Intervals response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler POST requests for expiring enroll links func expirationPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "OK" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -849,27 +783,17 @@ func expirationPOSTHandler(w http.ResponseWriter, r *http.Request) { } } } - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Expiration response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler POST requests for multi node action func nodeActionsPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "OK" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -919,27 +843,17 @@ func nodeActionsPOSTHandler(w http.ResponseWriter, r *http.Request) { } } } - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s", responseMessage) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Multi-node action response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler for POST request for /environments func envsPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "OK" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -1036,27 +950,17 @@ func envsPOSTHandler(w http.ResponseWriter, r *http.Request) { } } send_response: - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Environments response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler for POST request for /settings func settingsPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "OK" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -1159,27 +1063,17 @@ func settingsPOSTHandler(w http.ResponseWriter, r *http.Request) { } } send_response: - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Settings response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler for POST request for /users func usersPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "OK" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -1317,27 +1211,17 @@ func usersPOSTHandler(w http.ResponseWriter, r *http.Request) { } } send_response: - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Users response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } // Handler POST requests enroll data func enrollPOSTHandler(w http.ResponseWriter, r *http.Request) { + incMetric(metricAdminReq) responseMessage := "Enroll data saved successfully" responseCode := http.StatusOK utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) @@ -1411,21 +1295,10 @@ func enrollPOSTHandler(w http.ResponseWriter, r *http.Request) { } } send_response: - // Prepare response - response, err := json.Marshal(AdminResponse{Message: responseMessage}) - if err != nil { - responseMessage = "error formating response" - if settingsmgr.DebugService(settings.ServiceAdmin) { - log.Printf("DebugService: %s %v", responseMessage, err) - } - responseCode = http.StatusInternalServerError - response = []byte(responseMessage) - } - // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(responseCode) - _, _ = w.Write(response) + // Serialize and send response if settingsmgr.DebugService(settings.ServiceAdmin) { log.Println("DebugService: Configuration response sent") } + utils.HTTPResponse(w, utils.JSONApplicationUTF8, responseCode, AdminResponse{Message: responseMessage}) + incMetric(metricAdminOK) } diff --git a/admin/handlers-tokens.go b/admin/handlers-tokens.go index 9807bd91..3723acaf 100644 --- a/admin/handlers-tokens.go +++ b/admin/handlers-tokens.go @@ -10,6 +10,12 @@ import ( "github.com/jmpsec/osctrl/utils" ) +const ( + metricTokenReq = "admin-token-req" + metricTokenErr = "admin-token-err" + metricTokenOK = "admin-token-ok" +) + // TokenJSON to be used to populate a JSON token type TokenJSON struct { Token string `json:"token"` @@ -52,17 +58,8 @@ func tokensGETHandler(w http.ResponseWriter, r *http.Request) { ExpiresTS: user.TokenExpire.String(), } } - // Serialize JSON - returnedJSON, err := json.Marshal(returned) - if err != nil { - log.Printf("error serializing JSON %v", err) - incMetric(metricTokenErr) - return - } - // Header to serve JSON - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(http.StatusOK) - _, _ = w.Write(returnedJSON) + // Serve JSON + utils.HTTPResponse(w, utils.JSONApplicationUTF8, http.StatusOK, returned) incMetric(metricTokenOK) } @@ -131,6 +128,6 @@ func tokensPOSTHandler(w http.ResponseWriter, r *http.Request) { return } // Serialize and serve JSON - apiHTTPResponse(w, utils.JSONApplicationUTF8, http.StatusOK, response) + utils.HTTPResponse(w, utils.JSONApplicationUTF8, http.StatusOK, response) incMetric(metricTokenOK) } diff --git a/admin/handlers.go b/admin/handlers.go index e1f07fe2..caa751e4 100644 --- a/admin/handlers.go +++ b/admin/handlers.go @@ -8,15 +8,9 @@ import ( ) const ( - metricAdminReq = "admin-req" - metricAdminErr = "admin-err" - metricAdminOK = "admin-ok" metricJSONReq = "admin-json-req" metricJSONErr = "admin-json-err" metricJSONOK = "admin-json-ok" - metricTokenReq = "admin-token-req" - metricTokenErr = "admin-token-err" - metricTokenOK = "admin-token-ok" metricHealthReq = "health-req" metricHealthOK = "health-ok" ) @@ -24,14 +18,15 @@ const ( // Empty default osquery configuration const emptyConfiguration string = "data/osquery-empty.json" +const errorContent = "❌" +const okContent = "✅" + // Handle health requests func healthHTTPHandler(w http.ResponseWriter, r *http.Request) { incMetric(metricHealthReq) utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(http.StatusOK) - _, _ = w.Write([]byte("✅")) + utils.HTTPResponse(w, "", http.StatusOK, okContent) incMetric(metricHealthOK) } @@ -39,17 +34,14 @@ func healthHTTPHandler(w http.ResponseWriter, r *http.Request) { func errorHTTPHandler(w http.ResponseWriter, r *http.Request) { utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) // Send response - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(http.StatusInternalServerError) - _, _ = w.Write([]byte("oh no...")) + utils.HTTPResponse(w, "", http.StatusInternalServerError, []byte("oh no...")) } // Handle forbidden error requests func forbiddenHTTPHandler(w http.ResponseWriter, r *http.Request) { utils.DebugHTTPDump(r, settingsmgr.DebugHTTP(settings.ServiceAdmin), true) // Send response - w.WriteHeader(http.StatusForbidden) - _, _ = w.Write([]byte("❌")) + utils.HTTPResponse(w, "", http.StatusForbidden, errorContent) } // Handler for the favicon diff --git a/admin/json-carves.go b/admin/json-carves.go index a344e47e..e22c56e0 100644 --- a/admin/json-carves.go +++ b/admin/json-carves.go @@ -1,7 +1,6 @@ package main import ( - "encoding/json" "log" "net/http" @@ -66,24 +65,21 @@ func jsonCarvesHandler(w http.ResponseWriter, r *http.Request) { // Extract target target, ok := vars["target"] if !ok { - incMetric(metricAdminErr) - log.Println("error getting target") incMetric(metricJSONErr) + log.Println("error getting target") return } // Verify target if !CarvesTargets[target] { - incMetric(metricAdminErr) - log.Printf("invalid target %s", target) incMetric(metricJSONErr) + log.Printf("invalid target %s", target) return } // Retrieve carves for that target qs, err := queriesmgr.GetCarves(target) if err != nil { - incMetric(metricAdminErr) - log.Printf("error getting query carves %v", err) incMetric(metricJSONErr) + log.Printf("error getting query carves %v", err) return } // Prepare data to be returned @@ -137,18 +133,7 @@ func jsonCarvesHandler(w http.ResponseWriter, r *http.Request) { returned := ReturnedCarves{ Data: cJSON, } - // Serialize JSON - returnedJSON, err := json.Marshal(returned) - if err != nil { - incMetric(metricAdminErr) - log.Printf("error serializing JSON %v", err) - incMetric(metricJSONErr) - return - } - incMetric(metricAdminOK) - // Header to serve JSON - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(http.StatusOK) - _, _ = w.Write(returnedJSON) + // Serve JSON + utils.HTTPResponse(w, utils.JSONApplicationUTF8, http.StatusOK, returned) incMetric(metricJSONOK) } diff --git a/admin/json-logs.go b/admin/json-logs.go index 61e8c10b..b9bea584 100644 --- a/admin/json-logs.go +++ b/admin/json-logs.go @@ -1,7 +1,6 @@ package main import ( - "encoding/json" "log" "net/http" "strconv" @@ -142,18 +141,8 @@ func jsonLogsHandler(w http.ResponseWriter, r *http.Request) { returned := ReturnedLogs{ Data: logJSON, } - // Serialize JSON - returnedJSON, err := json.Marshal(returned) - if err != nil { - log.Printf("error serializing JSON %v", err) - incMetric(metricJSONErr) - return - } - incMetric(metricAdminOK) - // Header to serve JSON - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(http.StatusOK) - _, _ = w.Write(returnedJSON) + // Serialize and serve JSON + utils.HTTPResponse(w, utils.JSONApplicationUTF8, http.StatusOK, returned) incMetric(metricJSONOK) } @@ -193,17 +182,7 @@ func jsonQueryLogsHandler(w http.ResponseWriter, r *http.Request) { returned := ReturnedQueryLogs{ Data: queryLogJSON, } - // Serialize JSON - returnedJSON, err := json.Marshal(returned) - if err != nil { - log.Printf("error serializing JSON %v", err) - incMetric(metricJSONErr) - return - } - incMetric(metricAdminOK) - // Header to serve JSON - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(http.StatusOK) - _, _ = w.Write(returnedJSON) + // Serialize and serve JSON + utils.HTTPResponse(w, utils.JSONApplicationUTF8, http.StatusOK, returned) incMetric(metricJSONOK) } diff --git a/admin/json-nodes.go b/admin/json-nodes.go index c353c9a4..121acec1 100644 --- a/admin/json-nodes.go +++ b/admin/json-nodes.go @@ -1,7 +1,6 @@ package main import ( - "encoding/json" "log" "net/http" @@ -95,17 +94,8 @@ func jsonEnvironmentHandler(w http.ResponseWriter, r *http.Request) { returned := ReturnedNodes{ Data: nJSON, } - // Serialize JSON - returnedJSON, err := json.Marshal(returned) - if err != nil { - log.Printf("error serializing JSON %v", err) - incMetric(metricJSONErr) - return - } - // Header to serve JSON - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(http.StatusOK) - _, _ = w.Write(returnedJSON) + // Serve JSON + utils.HTTPResponse(w, utils.JSONApplicationUTF8, http.StatusOK, returned) incMetric(metricJSONOK) } @@ -161,16 +151,7 @@ func jsonPlatformHandler(w http.ResponseWriter, r *http.Request) { returned := ReturnedNodes{ Data: nJSON, } - // Serialize JSON - returnedJSON, err := json.Marshal(returned) - if err != nil { - log.Printf("error serializing JSON %v", err) - incMetric(metricJSONErr) - return - } - // Header to serve JSON - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(http.StatusOK) - _, _ = w.Write(returnedJSON) + // Serve JSON + utils.HTTPResponse(w, utils.JSONApplicationUTF8, http.StatusOK, returned) incMetric(metricJSONOK) } diff --git a/admin/json-queries.go b/admin/json-queries.go index 5105e4ec..7afbda41 100644 --- a/admin/json-queries.go +++ b/admin/json-queries.go @@ -1,7 +1,6 @@ package main import ( - "encoding/json" "log" "net/http" @@ -126,16 +125,7 @@ func jsonQueryHandler(w http.ResponseWriter, r *http.Request) { returned := ReturnedQueries{ Data: qJSON, } - // Serialize JSON - returnedJSON, err := json.Marshal(returned) - if err != nil { - log.Printf("error serializing JSON %v", err) - incMetric(metricJSONErr) - return - } - // Header to serve JSON - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(http.StatusOK) - _, _ = w.Write(returnedJSON) + // Serve JSON + utils.HTTPResponse(w, utils.JSONApplicationUTF8, http.StatusOK, returned) incMetric(metricJSONOK) } diff --git a/admin/json-stats.go b/admin/json-stats.go index a0f069ea..736f3781 100644 --- a/admin/json-stats.go +++ b/admin/json-stats.go @@ -1,7 +1,6 @@ package main import ( - "encoding/json" "log" "net/http" @@ -62,16 +61,7 @@ func jsonStatsHandler(w http.ResponseWriter, r *http.Request) { return } } - // Serialize JSON - returnedJSON, err := json.Marshal(stats) - if err != nil { - incMetric(metricAdminErr) - log.Printf("error serializing JSON %v", err) - return - } - incMetric(metricAdminOK) - // Header to serve JSON - w.Header().Set(utils.ContentType, utils.JSONApplicationUTF8) - w.WriteHeader(http.StatusOK) - _, _ = w.Write(returnedJSON) + // Serve JSON + utils.HTTPResponse(w, utils.JSONApplicationUTF8, http.StatusOK, stats) + incMetric(metricJSONOK) } diff --git a/admin/templates/carves.html b/admin/templates/carves.html index 21a4a97b..cd23a63f 100644 --- a/admin/templates/carves.html +++ b/admin/templates/carves.html @@ -21,7 +21,7 @@
- {{ .Title }} + {{ .Title }}
diff --git a/admin/templates/queries.html b/admin/templates/queries.html index 5b09309d..41328980 100644 --- a/admin/templates/queries.html +++ b/admin/templates/queries.html @@ -21,7 +21,7 @@
- {{ .Title }} + {{ .Title }}