aboutsummaryrefslogtreecommitdiffhomepage
path: root/http/response/json/json.go
diff options
context:
space:
mode:
Diffstat (limited to 'http/response/json/json.go')
-rw-r--r--http/response/json/json.go107
1 files changed, 107 insertions, 0 deletions
diff --git a/http/response/json/json.go b/http/response/json/json.go
new file mode 100644
index 0000000..ff0f06b
--- /dev/null
+++ b/http/response/json/json.go
@@ -0,0 +1,107 @@
+// Copyright 2018 Frédéric Guillot. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package json
+
+import (
+ "encoding/json"
+ "errors"
+ "net/http"
+
+ "github.com/miniflux/miniflux/logger"
+)
+
+// OK sends a JSON response with the status code 200.
+func OK(w http.ResponseWriter, v interface{}) {
+ commonHeaders(w)
+ w.WriteHeader(http.StatusOK)
+ w.Write(toJSON(v))
+}
+
+// Created sends a JSON response with the status code 201.
+func Created(w http.ResponseWriter, v interface{}) {
+ commonHeaders(w)
+ w.WriteHeader(http.StatusCreated)
+ w.Write(toJSON(v))
+}
+
+// NoContent sends a JSON response with the status code 204.
+func NoContent(w http.ResponseWriter) {
+ commonHeaders(w)
+ w.WriteHeader(http.StatusNoContent)
+}
+
+// NotFound sends a JSON response with the status code 404.
+func NotFound(w http.ResponseWriter, err error) {
+ logger.Error("[Not Found] %v", err)
+ commonHeaders(w)
+ w.WriteHeader(http.StatusNotFound)
+ w.Write(encodeError(err))
+}
+
+// ServerError sends a JSON response with the status code 500.
+func ServerError(w http.ResponseWriter, err error) {
+ logger.Error("[Internal Server Error] %v", err)
+ commonHeaders(w)
+ w.WriteHeader(http.StatusInternalServerError)
+
+ if err != nil {
+ w.Write(encodeError(err))
+ }
+}
+
+// Forbidden sends a JSON response with the status code 403.
+func Forbidden(w http.ResponseWriter) {
+ logger.Info("[Forbidden]")
+ commonHeaders(w)
+ w.WriteHeader(http.StatusForbidden)
+ w.Write(encodeError(errors.New("Access Forbidden")))
+}
+
+// Unauthorized sends a JSON response with the status code 401.
+func Unauthorized(w http.ResponseWriter) {
+ commonHeaders(w)
+ w.WriteHeader(http.StatusUnauthorized)
+ w.Write(encodeError(errors.New("Access Unauthorized")))
+}
+
+// BadRequest sends a JSON response with the status code 400.
+func BadRequest(w http.ResponseWriter, err error) {
+ logger.Error("[Bad Request] %v", err)
+ commonHeaders(w)
+ w.WriteHeader(http.StatusBadRequest)
+
+ if err != nil {
+ w.Write(encodeError(err))
+ }
+}
+
+func commonHeaders(w http.ResponseWriter) {
+ w.Header().Set("Accept", "application/json")
+ w.Header().Set("Content-Type", "application/json; charset=utf-8")
+}
+
+func encodeError(err error) []byte {
+ type errorMsg struct {
+ ErrorMessage string `json:"error_message"`
+ }
+
+ tmp := errorMsg{ErrorMessage: err.Error()}
+ data, err := json.Marshal(tmp)
+ if err != nil {
+ logger.Error("json encoding error: %v", err)
+ }
+
+ return data
+}
+
+func toJSON(v interface{}) []byte {
+ b, err := json.Marshal(v)
+ if err != nil {
+ logger.Error("json encoding error: %v", err)
+ return []byte("")
+ }
+
+ return b
+}