2022-03-20 08:21:59 +00:00
|
|
|
package web
|
|
|
|
|
|
|
|
import (
|
2022-03-20 09:28:51 +00:00
|
|
|
"github.com/bouncepaw/mycorrhiza/hyphae/categories"
|
2022-03-26 15:31:13 +00:00
|
|
|
"github.com/bouncepaw/mycorrhiza/user"
|
2022-03-20 08:21:59 +00:00
|
|
|
"github.com/bouncepaw/mycorrhiza/util"
|
|
|
|
"github.com/bouncepaw/mycorrhiza/views"
|
|
|
|
"github.com/gorilla/mux"
|
2022-03-26 15:31:13 +00:00
|
|
|
"io"
|
2022-03-29 16:41:12 +00:00
|
|
|
"log"
|
2022-03-20 08:21:59 +00:00
|
|
|
"net/http"
|
2022-03-29 16:41:12 +00:00
|
|
|
"strings"
|
2022-03-20 08:21:59 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func initCategories(r *mux.Router) {
|
|
|
|
r.PathPrefix("/add-to-category").HandlerFunc(handlerAddToCategory).Methods("POST")
|
|
|
|
r.PathPrefix("/remove-from-category").HandlerFunc(handlerRemoveFromCategory).Methods("POST")
|
|
|
|
r.PathPrefix("/category/").HandlerFunc(handlerCategory).Methods("GET")
|
2022-03-20 18:24:54 +00:00
|
|
|
r.PathPrefix("/category").HandlerFunc(handlerListCategory).Methods("GET")
|
|
|
|
}
|
|
|
|
|
|
|
|
func handlerListCategory(w http.ResponseWriter, rq *http.Request) {
|
2022-03-29 16:41:12 +00:00
|
|
|
log.Println("Viewing list of categories")
|
2022-03-20 21:24:40 +00:00
|
|
|
views.CategoryList(views.MetaFrom(w, rq))
|
2022-03-20 08:21:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func handlerCategory(w http.ResponseWriter, rq *http.Request) {
|
|
|
|
util.PrepareRq(rq)
|
2022-03-29 16:41:12 +00:00
|
|
|
catName := util.CanonicalName(strings.TrimPrefix(strings.TrimPrefix(rq.URL.Path, "/category"), "/"))
|
|
|
|
if catName == "" {
|
|
|
|
handlerListCategory(w, rq)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
log.Println("Viewing category", catName)
|
2022-03-20 21:24:40 +00:00
|
|
|
views.CategoryPage(views.MetaFrom(w, rq), catName)
|
2022-03-20 08:21:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func handlerRemoveFromCategory(w http.ResponseWriter, rq *http.Request) {
|
2022-03-20 09:28:51 +00:00
|
|
|
util.PrepareRq(rq)
|
|
|
|
var (
|
2022-03-20 11:50:18 +00:00
|
|
|
hyphaName = util.CanonicalName(rq.PostFormValue("hypha"))
|
|
|
|
catName = util.CanonicalName(rq.PostFormValue("cat"))
|
2022-03-20 09:28:51 +00:00
|
|
|
redirectTo = rq.PostFormValue("redirect-to")
|
|
|
|
)
|
2022-03-26 15:31:13 +00:00
|
|
|
if !user.FromRequest(rq).CanProceed("remove-from-category") {
|
|
|
|
w.WriteHeader(http.StatusForbidden)
|
|
|
|
_, _ = io.WriteString(w, "403 Forbidden")
|
|
|
|
return
|
|
|
|
}
|
2022-03-20 09:28:51 +00:00
|
|
|
categories.RemoveHyphaFromCategory(hyphaName, catName)
|
|
|
|
http.Redirect(w, rq, redirectTo, http.StatusSeeOther)
|
2022-03-20 08:21:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func handlerAddToCategory(w http.ResponseWriter, rq *http.Request) {
|
2022-03-20 09:28:51 +00:00
|
|
|
util.PrepareRq(rq)
|
|
|
|
var (
|
2022-03-20 11:50:18 +00:00
|
|
|
hyphaName = util.CanonicalName(rq.PostFormValue("hypha"))
|
|
|
|
catName = util.CanonicalName(rq.PostFormValue("cat"))
|
2022-03-20 09:28:51 +00:00
|
|
|
redirectTo = rq.PostFormValue("redirect-to")
|
|
|
|
)
|
2022-03-26 15:31:13 +00:00
|
|
|
if !user.FromRequest(rq).CanProceed("add-to-category") {
|
|
|
|
w.WriteHeader(http.StatusForbidden)
|
|
|
|
_, _ = io.WriteString(w, "403 Forbidden")
|
|
|
|
return
|
|
|
|
}
|
2022-03-20 09:28:51 +00:00
|
|
|
categories.AddHyphaToCategory(hyphaName, catName)
|
|
|
|
http.Redirect(w, rq, redirectTo, http.StatusSeeOther)
|
2022-03-20 08:21:59 +00:00
|
|
|
}
|