12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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))
- }
|