summaryrefslogtreecommitdiff
path: root/system/api/server.go
diff options
context:
space:
mode:
authorSteve Manuel <nilslice@gmail.com>2016-10-09 01:32:40 -0700
committerSteve Manuel <nilslice@gmail.com>2016-10-09 01:32:40 -0700
commit8c830d00ab77f8ec0dd535d824dd79503b6f3bad (patch)
treece2d3726c17bdef1129f54735d1766880b4341d6 /system/api/server.go
parentb2e4fd9372f27d3202f07a329a5077b93a4b7390 (diff)
adding CORS support and separaring some api handliers into own file
Diffstat (limited to 'system/api/server.go')
-rw-r--r--system/api/server.go127
1 files changed, 4 insertions, 123 deletions
diff --git a/system/api/server.go b/system/api/server.go
index 1fb9f02..da73382 100644
--- a/system/api/server.go
+++ b/system/api/server.go
@@ -1,131 +1,12 @@
package api
-import (
- "bytes"
- "encoding/json"
- "log"
- "net/http"
-
- "github.com/nilslice/cms/content"
- "github.com/nilslice/cms/system/db"
-)
+import "net/http"
// Run adds Handlers to default http listener for API
func Run() {
- http.HandleFunc("/api/types", func(res http.ResponseWriter, req *http.Request) {
- var types = []string{}
- for t := range content.Types {
- types = append(types, string(t))
- }
-
- j, err := toJSON(types)
- if err != nil {
- res.WriteHeader(http.StatusInternalServerError)
- return
- }
-
- res.Header().Set("Content-Type", "application/json")
- res.Write(j)
- })
-
- http.HandleFunc("/api/posts", func(res http.ResponseWriter, req *http.Request) {
- q := req.URL.Query()
- t := q.Get("type")
- // TODO: implement pagination
- // num := q.Get("num")
- // page := q.Get("page")
-
- if t == "" {
- res.WriteHeader(http.StatusBadRequest)
- return
- }
-
- posts := db.ContentAll(t)
- var all = []json.RawMessage{}
- for _, post := range posts {
- all = append(all, post)
- }
-
- j, err := fmtJSON(all...)
- if err != nil {
- res.WriteHeader(http.StatusInternalServerError)
- return
- }
-
- res.Header().Set("Content-Type", "application/json")
- res.Write(j)
- })
-
- http.HandleFunc("/api/post", func(res http.ResponseWriter, req *http.Request) {
- q := req.URL.Query()
- id := q.Get("id")
- t := q.Get("type")
-
- if t == "" || id == "" {
- res.WriteHeader(http.StatusBadRequest)
- return
- }
-
- post, err := db.Content(t + ":" + id)
- if err != nil {
- res.WriteHeader(http.StatusInternalServerError)
- return
- }
-
- j, err := fmtJSON(json.RawMessage(post))
- if err != nil {
- res.WriteHeader(http.StatusInternalServerError)
- return
- }
-
- res.Header().Set("Content-Type", "application/json")
- res.Write(j)
- })
-
-}
-
-func fmtJSON(data ...json.RawMessage) ([]byte, error) {
- var msg = []json.RawMessage{}
- for _, d := range data {
- msg = append(msg, d)
- }
-
- resp := map[string][]json.RawMessage{
- "data": msg,
- }
-
- var buf = &bytes.Buffer{}
- enc := json.NewEncoder(buf)
- err := enc.Encode(resp)
- if err != nil {
- log.Println("Failed to encode data to JSON:", err)
- return nil, err
- }
-
- return buf.Bytes(), nil
-}
-
-func toJSON(data []string) ([]byte, error) {
- var buf = &bytes.Buffer{}
- enc := json.NewEncoder(buf)
- resp := map[string][]string{
- "data": data,
- }
-
- err := enc.Encode(resp)
- if err != nil {
- log.Println("Failed to encode data to JSON:", err)
- return nil, err
- }
-
- return buf.Bytes(), nil
-}
+ http.HandleFunc("/api/types", CORS(typesHandler))
-func wrapJSON(json []byte) []byte {
- var buf = &bytes.Buffer{}
- buf.Write([]byte(`{"data":`))
- buf.Write(json)
- buf.Write([]byte(`}`))
+ http.HandleFunc("/api/posts", CORS(postsHandler))
- return buf.Bytes()
+ http.HandleFunc("/api/post", CORS(postHandler))
}