From 85a3a3a7f37b7c459dac824ea837bcb1f5a12d4c Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Mon, 1 May 2017 01:04:48 -0500 Subject: adding hooks to interface and handler for addon enable/disable --- system/admin/handlers.go | 93 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 3 deletions(-) (limited to 'system/admin') diff --git a/system/admin/handlers.go b/system/admin/handlers.go index bb36e39..286b0a7 100644 --- a/system/admin/handlers.go +++ b/system/admin/handlers.go @@ -2698,7 +2698,21 @@ func addonsHandler(res http.ResponseWriter, req *http.Request) { id := req.PostFormValue("id") action := strings.ToLower(req.PostFormValue("action")) - _, err = db.Addon(id) + at, ok := addon.Types[id] + if !ok { + log.Println("Error: no addon type found for:", id) + log.Println(err) + res.WriteHeader(http.StatusNotFound) + errView, err := Error404() + if err != nil { + return + } + + res.Write(errView) + return + } + + b, err := db.Addon(id) if err == db.ErrNoAddonExists { log.Println(err) res.WriteHeader(http.StatusNotFound) @@ -2722,9 +2736,55 @@ func addonsHandler(res http.ResponseWriter, req *http.Request) { return } + adn := at() + err = json.Unmarshal(b, adn) + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + + h, ok := adn.(item.Hookable) + if !ok { + log.Println("Addon", adn, "does not implement the item.Hookable interface or embed item.Item") + return + } + switch action { case "enable": - err := addon.Enable(id) + err := h.BeforeEnable(res, req) + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + + 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 + } + + err = h.AfterEnable(res, req) if err != nil { log.Println(err) res.WriteHeader(http.StatusInternalServerError) @@ -2736,8 +2796,35 @@ func addonsHandler(res http.ResponseWriter, req *http.Request) { res.Write(errView) return } + case "disable": - err := addon.Disable(id) + err := h.BeforeDisable(res, req) + if err != nil { + log.Println(err) + res.WriteHeader(http.StatusInternalServerError) + errView, err := Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + + 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 + } + + err = h.AfterDisable(res, req) if err != nil { log.Println(err) res.WriteHeader(http.StatusInternalServerError) -- cgit v1.2.3 From d991bfd3e75a08ad38710975a2747bae197e5a4e Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Mon, 1 May 2017 01:18:30 -0500 Subject: adding admin action hooks to handlers and hookable interface --- system/admin/handlers.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'system/admin') diff --git a/system/admin/handlers.go b/system/admin/handlers.go index 286b0a7..23c7e50 100644 --- a/system/admin/handlers.go +++ b/system/admin/handlers.go @@ -1913,6 +1913,20 @@ func editHandler(res http.ResponseWriter, req *http.Request) { return } + if cid == "-1" { + err = hook.BeforeAdminCreate(res, req) + if err != nil { + log.Println("Error running BeforeAdminCreate method in editHandler for:", t, err) + return + } + } else { + err = hook.BeforeAdminUpdate(res, req) + if err != nil { + log.Println("Error running BeforeAdminUpdate method in editHandler for:", t, err) + return + } + } + err = hook.BeforeSave(res, req) if err != nil { log.Println("Error running BeforeSave method in editHandler for:", t, err) @@ -1942,6 +1956,20 @@ func editHandler(res http.ResponseWriter, req *http.Request) { return } + if cid == "-1" { + err = hook.AfterAdminCreate(res, req) + if err != nil { + log.Println("Error running AfterAdminUpdate method in editHandler for:", t, err) + return + } + } else { + err = hook.AfterAdminUpdate(res, req) + if err != nil { + log.Println("Error running AfterAdminUpdate method in editHandler for:", t, err) + return + } + } + scheme := req.URL.Scheme host := req.URL.Host path := req.URL.Path @@ -2029,6 +2057,12 @@ func deleteHandler(res http.ResponseWriter, req *http.Request) { } } + err = hook.BeforeAdminDelete(res, req) + if err != nil { + log.Println("Error running BeforeAdminDelete method in deleteHandler for:", t, err) + return + } + err = hook.BeforeDelete(res, req) if err != nil { log.Println("Error running BeforeDelete method in deleteHandler for:", t, err) @@ -2048,6 +2082,12 @@ func deleteHandler(res http.ResponseWriter, req *http.Request) { return } + err = hook.AfterAdminDelete(res, req) + if err != nil { + log.Println("Error running AfterDelete method in deleteHandler for:", t, err) + return + } + if reject == "true" { err = hook.AfterReject(res, req) if err != nil { -- cgit v1.2.3