package srv import ( "net/http" "git.clearsky.net.au/cody/gex.git/utils" ) var rtr *http.ServeMux var permissions = make(map[string][]string) /* Our Special HandleFunc */ func Route(pattern string, roles []string, handler func(req *Req, res *Res)) { permissions[pattern] = roles realHandler := func(w http.ResponseWriter, r *http.Request) { var req Req var res Res var sess Sess req.Construct(r) res.Construct(w, r) sess.Construct(&req, &res) req.Sess = sess req.Sess.Save() // Route Access Check proceed := false pattern := req.Pattern for _, val := range permissions[pattern] { if sess.HasRole(val) { proceed = true break } } if !proceed { res.Redirect("/403?referrer=" + req.Path) return } // run middleware on request for _, fun := range middleware { err := fun(&req, &res) if err != nil { utils.Err(err) return } } handler(&req, &res) } rtr.HandleFunc(pattern, realHandler) } func InitRouter() { rtr = http.NewServeMux() // Public Files fs := http.FileServer(http.Dir("app/pub")) rtr.Handle("GET /app/pub/", http.StripPrefix("/app/pub/", fs)) }