From 9766bddb974f70b54d5eb0074d3e5ce3f2da39fb Mon Sep 17 00:00:00 2001 From: Jan Eitzinger Date: Thu, 3 Feb 2022 07:25:36 +0100 Subject: [PATCH] Parametrize route generation --- routes.go | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 routes.go diff --git a/routes.go b/routes.go new file mode 100644 index 0000000..62f82fe --- /dev/null +++ b/routes.go @@ -0,0 +1,56 @@ +package main + +import ( + "net/http" + "strings" + + "github.com/ClusterCockpit/cc-backend/auth" + "github.com/ClusterCockpit/cc-backend/config" + "github.com/ClusterCockpit/cc-backend/graph" + "github.com/ClusterCockpit/cc-backend/templates" + "github.com/gorilla/mux" +) + +type InfoType map[string]interface{} + +type Route struct { + Route string + Template string + Title string + Filter bool + Setup func(i InfoType, r *http.Request) InfoType +} + +func setupRoutes(router *mux.Router, resolver *graph.Resolver, routes []Route) { + for _, route := range routes { + router.HandleFunc(route.Route, func(rw http.ResponseWriter, r *http.Request) { + conf, err := config.GetUIConfig(r) + if err != nil { + http.Error(rw, err.Error(), http.StatusInternalServerError) + return + } + + infos := map[string]interface{}{ + "admin": true, + } + + if user := auth.GetUser(r.Context()); user != nil { + infos["username"] = user.Username + infos["admin"] = user.HasRole(auth.RoleAdmin) + } else { + infos["username"] = false + infos["admin"] = false + } + + infos = route.Setup(infos, r) + route.Title = strings.Replace(route.Title, "", infos["id"].(string), 1) + + templates.Render(rw, r, route.Template, &templates.Page{ + Title: route.Title, + Config: conf, + Infos: infos, + FilterPresets: buildFilterPresets(r.URL.Query()), + }) + }) + } +}