diff options
author | Steve Manuel <nilslice@gmail.com> | 2017-01-11 18:44:15 -0800 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2017-01-11 18:44:15 -0800 |
commit | 6428f9982e7f1d42e70a18d2e210873eb730959c (patch) | |
tree | ed4168d5c765e50b57f54a2604dd7a078b6d8926 | |
parent | dd233c720e32b1c19e8bb344dff2c19b2d803277 (diff) |
moving addon handlers to addon package to avoid import issues
-rw-r--r-- | system/addon/handlers.go | 372 | ||||
-rw-r--r-- | system/addon/server.go | 13 | ||||
-rw-r--r-- | system/admin/handlers.go | 360 | ||||
-rw-r--r-- | system/admin/server.go | 3 |
4 files changed, 385 insertions, 363 deletions
diff --git a/system/addon/handlers.go b/system/addon/handlers.go new file mode 100644 index 0000000..346dd29 --- /dev/null +++ b/system/addon/handlers.go @@ -0,0 +1,372 @@ +package addon + +import ( + "bytes" + "log" + "net/http" + "strings" + + "github.com/ponzu-cms/ponzu/system/admin" + "github.com/ponzu-cms/ponzu/system/db" + "github.com/ponzu-cms/ponzu/system/item" + + "github.com/tidwall/gjson" +) + +func addonsHandler(res http.ResponseWriter, req *http.Request) { + switch req.Method { + case http.MethodGet: + all := db.AddonAll() + list := &bytes.Buffer{} + + for i := range all { + v := adminAddonListItem(all[i]) + _, err := list.Write(v) + if err != nil { + log.Println("Error writing bytes to addon list view:", err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + log.Println(err) + return + } + + res.Write(errView) + return + } + } + + html := &bytes.Buffer{} + open := `<div class="col s9 card"> + <div class="card-content"> + <div class="row"> + <div class="card-title col s7">Addons</div> + </div> + <ul class="posts row">` + + _, err := html.WriteString(open) + if err != nil { + log.Println("Error writing open html to addon html view:", err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + log.Println(err) + return + } + + res.Write(errView) + return + } + + _, err = html.Write(list.Bytes()) + if err != nil { + log.Println("Error writing list bytes to addon html view:", err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + log.Println(err) + return + } + + res.Write(errView) + return + } + + _, err = html.WriteString(`</ul></div></div>`) + if err != nil { + log.Println("Error writing close html to addon html view:", err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + log.Println(err) + return + } + + res.Write(errView) + return + } + + if html.Len() == 0 { + _, err := html.WriteString(`<p>No addons available.</p>`) + if err != nil { + log.Println("Error writing default addon html to admin view:", err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + log.Println(err) + return + } + + res.Write(errView) + return + } + } + + view, err := admin.Admin(html.Bytes()) + if err != nil { + log.Println("Error writing addon html to admin view:", err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + log.Println(err) + return + } + + res.Write(errView) + return + } + + res.Write(view) + + case http.MethodPost: + err := req.ParseMultipartForm(1024 * 1024 * 4) // maxMemory 4MB + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + + id := req.PostFormValue("id") + action := strings.ToLower(req.PostFormValue("action")) + + _, err = db.Addon(id) + if err == db.ErrNoAddonExists { + log.Println(err) + res.WriteHeader(http.StatusNotFound) + errView, err := admin.Error404() + if err != nil { + return + } + + res.Write(errView) + return + } + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + + switch action { + case "enable": + err := Enable(id) + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + case "disable": + err := Disable(id) + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + default: + res.WriteHeader(http.StatusBadRequest) + errView, err := admin.Error400() + if err != nil { + return + } + + res.Write(errView) + return + } + + http.Redirect(res, req, req.URL.String(), http.StatusFound) + + default: + res.WriteHeader(http.StatusBadRequest) + errView, err := admin.Error400() + if err != nil { + log.Println(err) + return + } + + res.Write(errView) + return + } +} + +func addonHandler(res http.ResponseWriter, req *http.Request) { + switch req.Method { + case http.MethodGet: + id := req.FormValue("id") + + data, err := db.Addon(id) + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + + _, ok := Types[id] + if !ok { + log.Println("Addon: ", id, "is not found in addon.Types map") + res.WriteHeader(http.StatusNotFound) + errView, err := admin.Error404() + if err != nil { + return + } + + res.Write(errView) + return + } + + m, err := Manage(data, id) + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + + addonView, err := admin.Admin(m) + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + return + } + + res.Header().Set("Content-Type", "text/html") + res.Write(addonView) + + case http.MethodPost: + // save req.Form + err := req.ParseMultipartForm(1024 * 1024 * 4) // maxMemory 4MB + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + + name := req.FormValue("addon_name") + id := req.FormValue("addon_reverse_dns") + + at, ok := Types[id] + if !ok { + log.Println("Error: addon", name, "has no record in addon.Types map at", id) + res.WriteHeader(http.StatusBadRequest) + errView, err := admin.Error400() + if err != nil { + return + } + + res.Write(errView) + return + } + + // if Hookable, call BeforeSave prior to saving + h, ok := at().(item.Hookable) + if ok { + err := h.BeforeSave(req) + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + } + + err = db.SetAddon(req.Form, at()) + if err != nil { + log.Println("Error saving addon:", name, err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := admin.Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + + http.Redirect(res, req, "/admin/addon?id="+id, http.StatusFound) + + default: + res.WriteHeader(http.StatusBadRequest) + errView, err := admin.Error405() + if err != nil { + log.Println(err) + return + } + + res.Write(errView) + return + } +} + +func adminAddonListItem(data []byte) []byte { + id := gjson.GetBytes(data, "addon_reverse_dns").String() + status := gjson.GetBytes(data, "addon_status").String() + name := gjson.GetBytes(data, "addon_name").String() + + var action string + var buttonClass string + if status != StatusEnabled { + action = "Enable" + buttonClass = "green" + } else { + action = "Disable" + buttonClass = "red" + } + + a := ` + <li class="col s12"> + <a href="/admin/addon?id=` + id + `" alt="Configure '` + name + `'">` + name + `</a> + + <form enctype="multipart/form-data" class="quick-` + strings.ToLower(action) + `-addon __ponzu right" action="/admin/addons" method="post"> + <button class="btn waves-effect waves-effect-light ` + buttonClass + `">` + action + `</button> + <input type="hidden" name="id" value="` + id + `" /> + <input type="hidden" name="action" value="` + action + `" /> + </form> + </li>` + + return []byte(a) +} diff --git a/system/addon/server.go b/system/addon/server.go new file mode 100644 index 0000000..8e5ab3b --- /dev/null +++ b/system/addon/server.go @@ -0,0 +1,13 @@ +package addon + +import ( + "net/http" + + "github.com/ponzu-cms/ponzu/system/admin/user" +) + +// Run adds Handlers to default http listener for Addon +func Run() { + http.HandleFunc("/admin/addons", user.Auth(addonsHandler)) + http.HandleFunc("/admin/addon", user.Auth(addonHandler)) +} diff --git a/system/admin/handlers.go b/system/admin/handlers.go index 02d9d92..ac2aea5 100644 --- a/system/admin/handlers.go +++ b/system/admin/handlers.go @@ -14,7 +14,6 @@ import ( "github.com/ponzu-cms/ponzu/management/editor" "github.com/ponzu-cms/ponzu/management/manager" - "github.com/ponzu-cms/ponzu/system/addon" "github.com/ponzu-cms/ponzu/system/admin/config" "github.com/ponzu-cms/ponzu/system/admin/upload" "github.com/ponzu-cms/ponzu/system/admin/user" @@ -25,7 +24,6 @@ import ( "github.com/gorilla/schema" emailer "github.com/nilslice/email" "github.com/nilslice/jwt" - "github.com/tidwall/gjson" ) func adminHandler(res http.ResponseWriter, req *http.Request) { @@ -1926,361 +1924,3 @@ func searchHandler(res http.ResponseWriter, req *http.Request) { res.Header().Set("Content-Type", "text/html") res.Write(adminView) } - -func addonsHandler(res http.ResponseWriter, req *http.Request) { - switch req.Method { - case http.MethodGet: - all := db.AddonAll() - list := &bytes.Buffer{} - - for i := range all { - v := adminAddonListItem(all[i]) - _, err := list.Write(v) - if err != nil { - log.Println("Error writing bytes to addon list view:", err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - log.Println(err) - return - } - - res.Write(errView) - return - } - } - - html := &bytes.Buffer{} - open := `<div class="col s9 card"> - <div class="card-content"> - <div class="row"> - <div class="card-title col s7">Addons</div> - </div> - <ul class="posts row">` - - _, err := html.WriteString(open) - if err != nil { - log.Println("Error writing open html to addon html view:", err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - log.Println(err) - return - } - - res.Write(errView) - return - } - - _, err = html.Write(list.Bytes()) - if err != nil { - log.Println("Error writing list bytes to addon html view:", err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - log.Println(err) - return - } - - res.Write(errView) - return - } - - _, err = html.WriteString(`</ul></div></div>`) - if err != nil { - log.Println("Error writing close html to addon html view:", err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - log.Println(err) - return - } - - res.Write(errView) - return - } - - if html.Len() == 0 { - _, err := html.WriteString(`<p>No addons available.</p>`) - if err != nil { - log.Println("Error writing default addon html to admin view:", err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - log.Println(err) - return - } - - res.Write(errView) - return - } - } - - view, err := Admin(html.Bytes()) - if err != nil { - log.Println("Error writing addon html to admin view:", err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - log.Println(err) - return - } - - res.Write(errView) - return - } - - res.Write(view) - - case http.MethodPost: - err := req.ParseMultipartForm(1024 * 1024 * 4) // maxMemory 4MB - if err != nil { - log.Println(err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - return - } - - res.Write(errView) - return - } - - id := req.PostFormValue("id") - action := strings.ToLower(req.PostFormValue("action")) - - _, err = db.Addon(id) - if err == db.ErrNoAddonExists { - log.Println(err) - res.WriteHeader(http.StatusNotFound) - errView, err := Error404() - if err != nil { - return - } - - res.Write(errView) - return - } - if err != nil { - log.Println(err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - return - } - - res.Write(errView) - return - } - - switch action { - case "enable": - err := addon.Enable(id) - if err != nil { - log.Println(err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - return - } - - res.Write(errView) - return - } - case "disable": - err := addon.Disable(id) - if err != nil { - log.Println(err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - return - } - - res.Write(errView) - return - } - default: - res.WriteHeader(http.StatusBadRequest) - errView, err := Error400() - if err != nil { - return - } - - res.Write(errView) - return - } - - http.Redirect(res, req, req.URL.String(), http.StatusFound) - - default: - res.WriteHeader(http.StatusBadRequest) - errView, err := Error400() - if err != nil { - log.Println(err) - return - } - - res.Write(errView) - return - } -} - -func addonHandler(res http.ResponseWriter, req *http.Request) { - switch req.Method { - case http.MethodGet: - id := req.FormValue("id") - - data, err := db.Addon(id) - if err != nil { - log.Println(err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - return - } - - res.Write(errView) - return - } - - _, ok := addon.Types[id] - if !ok { - log.Println("Addon: ", id, "is not found in addon.Types map") - res.WriteHeader(http.StatusNotFound) - errView, err := Error404() - if err != nil { - return - } - - res.Write(errView) - return - } - - m, err := addon.Manage(data, id) - if err != nil { - log.Println(err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - return - } - - res.Write(errView) - return - } - - addonView, err := Admin(m) - if err != nil { - log.Println(err) - res.WriteHeader(http.StatusInternalServerError) - return - } - - res.Header().Set("Content-Type", "text/html") - res.Write(addonView) - - case http.MethodPost: - // save req.Form - err := req.ParseMultipartForm(1024 * 1024 * 4) // maxMemory 4MB - if err != nil { - log.Println(err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - return - } - - res.Write(errView) - return - } - - name := req.FormValue("addon_name") - id := req.FormValue("addon_reverse_dns") - - at, ok := addon.Types[id] - if !ok { - log.Println("Error: addon", name, "has no record in addon.Types map at", id) - res.WriteHeader(http.StatusBadRequest) - errView, err := Error400() - if err != nil { - return - } - - res.Write(errView) - return - } - - // if Hookable, call BeforeSave prior to saving - h, ok := at().(item.Hookable) - if ok { - err := h.BeforeSave(req) - if err != nil { - log.Println(err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - return - } - - res.Write(errView) - return - } - } - - err = db.SetAddon(req.Form, at()) - if err != nil { - log.Println("Error saving addon:", name, err) - res.WriteHeader(http.StatusInternalServerError) - errView, err := Error500() - if err != nil { - return - } - - res.Write(errView) - return - } - - http.Redirect(res, req, "/admin/addon?id="+id, http.StatusFound) - - default: - res.WriteHeader(http.StatusBadRequest) - errView, err := Error405() - if err != nil { - log.Println(err) - return - } - - res.Write(errView) - return - } -} - -func adminAddonListItem(data []byte) []byte { - id := gjson.GetBytes(data, "addon_reverse_dns").String() - status := gjson.GetBytes(data, "addon_status").String() - name := gjson.GetBytes(data, "addon_name").String() - - var action string - var buttonClass string - if status != addon.StatusEnabled { - action = "Enable" - buttonClass = "green" - } else { - action = "Disable" - buttonClass = "red" - } - - a := ` - <li class="col s12"> - <a href="/admin/addon?id=` + id + `" alt="Configure '` + name + `'">` + name + `</a> - - <form enctype="multipart/form-data" class="quick-` + strings.ToLower(action) + `-addon __ponzu right" action="/admin/addons" method="post"> - <button class="btn waves-effect waves-effect-light ` + buttonClass + `">` + action + `</button> - <input type="hidden" name="id" value="` + id + `" /> - <input type="hidden" name="action" value="` + action + `" /> - </form> - </li>` - - return []byte(a) -} diff --git a/system/admin/server.go b/system/admin/server.go index f2bf244..155892a 100644 --- a/system/admin/server.go +++ b/system/admin/server.go @@ -23,9 +23,6 @@ func Run() { http.HandleFunc("/admin/recover", forgotPasswordHandler) http.HandleFunc("/admin/recover/key", recoveryKeyHandler) - http.HandleFunc("/admin/addons", user.Auth(addonsHandler)) - http.HandleFunc("/admin/addon", user.Auth(addonHandler)) - http.HandleFunc("/admin/configure", user.Auth(configHandler)) http.HandleFunc("/admin/configure/users", user.Auth(configUsersHandler)) http.HandleFunc("/admin/configure/users/edit", user.Auth(configUsersEditHandler)) |