package main import ( "io" "net/http" "net/url" "path" "github.com/julienschmidt/httprouter" ) var DevProxy string func serveOrReverse(forced_url string) func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { if DevProxy != "" { if u, err := url.Parse(DevProxy); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } else { if forced_url != "" { u.Path = path.Join(u.Path, forced_url) } else { u.Path = path.Join(u.Path, r.URL.Path) } if r, err := http.NewRequest(r.Method, u.String(), r.Body); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } else if resp, err := http.DefaultClient.Do(r); err != nil { http.Error(w, err.Error(), http.StatusBadGateway) } else { defer resp.Body.Close() for key := range resp.Header { w.Header().Add(key, resp.Header.Get(key)) } w.WriteHeader(resp.StatusCode) io.Copy(w, resp.Body) } } } else { if forced_url != "" { r.URL.Path = forced_url } http.FileServer(Assets).ServeHTTP(w, r) } } } func init() { Router().GET("/@fs/*_", serveOrReverse("")) Router().GET("/", serveOrReverse("")) Router().GET("/auth", serveOrReverse("")) Router().GET("/bug-bounty", serveOrReverse("")) Router().GET("/grades", serveOrReverse("")) Router().GET("/surveys", serveOrReverse("")) Router().GET("/surveys/*_", serveOrReverse("")) Router().GET("/users", serveOrReverse("")) Router().GET("/users/*_", serveOrReverse("")) Router().GET("/css/*_", serveOrReverse("")) Router().GET("/fonts/*_", serveOrReverse("")) Router().GET("/img/*_", serveOrReverse("")) Router().GET("/js/*_", serveOrReverse("")) Router().GET("/views/*_", serveOrReverse("")) }