From cb545173a6f33aff050a1855dcb87184d50b79a6 Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Tue, 20 Sep 2016 00:24:31 -0700 Subject: adding support for boltdb storage, updating and inserting content, some reorganization --- system/server.go | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 system/server.go (limited to 'system/server.go') diff --git a/system/server.go b/system/server.go new file mode 100644 index 0000000..4a83706 --- /dev/null +++ b/system/server.go @@ -0,0 +1,85 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/nilslice/cms/content" + "github.com/nilslice/cms/management/editor" + "github.com/nilslice/cms/management/manager" + "github.com/nilslice/cms/system/db" +) + +func main() { + http.HandleFunc("/admin/edit", func(res http.ResponseWriter, req *http.Request) { + switch req.Method { + case http.MethodGet: + q := req.URL.Query() + i := q.Get("id") + t := q.Get("type") + contentType, ok := content.Types[t] + if !ok { + fmt.Fprintf(res, content.ErrTypeNotRegistered, t) + return + } + post := contentType() + + if i != "" { + fmt.Println("Need to show post id:", i, "(", t, ")") + + data, err := db.Get(t + ":" + i) + if err != nil { + fmt.Println(err) + res.WriteHeader(http.StatusInternalServerError) + return + } + + err = json.Unmarshal(data, post) + if err != nil { + fmt.Println(err) + res.WriteHeader(http.StatusInternalServerError) + return + } + } + + view, err := manager.Manage(post.(editor.Editable), t) + if err != nil { + fmt.Println(err) + res.WriteHeader(http.StatusInternalServerError) + return + } + res.Header().Set("Content-Type", "text/html") + res.Write(view) + + case http.MethodPost: + err := req.ParseForm() + if err != nil { + fmt.Println(err) + res.WriteHeader(http.StatusBadRequest) + return + } + + cid := req.FormValue("id") + t := req.FormValue("type") + fmt.Println("query data: t=", t, "id=", cid) + + id, err := db.Set(t+":"+cid, req.PostForm) + if err != nil { + fmt.Println(err) + res.WriteHeader(http.StatusInternalServerError) + return + } + + fmt.Println(t, "post created:", id) + scheme := req.URL.Scheme + host := req.URL.Host + path := req.URL.Path + desURL := scheme + host + path + "?type=" + t + "&id=" + fmt.Sprintf("%d", id) + http.Redirect(res, req, desURL, http.StatusFound) + } + }) + + http.ListenAndServe(":8080", nil) + +} -- cgit v1.2.3