From ce46313dd1aa5cbf113a7b9aa4d590e9890cd6b3 Mon Sep 17 00:00:00 2001 From: nemunaire Date: Thu, 26 Oct 2017 14:14:18 +0200 Subject: [PATCH] admin: make baseurl optional --- admin/main.go | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/admin/main.go b/admin/main.go index 81df825f..91f15942 100644 --- a/admin/main.go +++ b/admin/main.go @@ -5,9 +5,11 @@ import ( "fmt" "log" "net/http" + "net/url" "os" "path" "path/filepath" + "strings" "text/template" "srs.epita.fr/fic-server/admin/api" @@ -17,6 +19,24 @@ import ( var PKIDir string var StaticDir string +func StripPrefix(prefix string, h http.Handler) http.Handler { + if prefix == "" { + return h + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if p := strings.TrimPrefix(r.URL.Path, prefix); len(p) < len(r.URL.Path) { + r2 := new(http.Request) + *r2 = *r + r2.URL = new(url.URL) + *r2.URL = *r.URL + r2.URL.Path = p + h.ServeHTTP(w, r2) + } else { + h.ServeHTTP(w, r) + } + }) +} + func main() { var bind = flag.String("bind", "127.0.0.1:8081", "Bind port/socket") var dsn = flag.String("dsn", fic.DSNGenerator(), "DSN to connect to the MySQL server") @@ -75,7 +95,7 @@ func main() { log.Fatal("Cannot create database: ", err) } - log.Println("Changing base URL to", *baseURL,"...") + log.Println("Changing base URL to", *baseURL + "/", "...") if file, err := os.OpenFile(path.Join(StaticDir, "index.html"), os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.FileMode(0644)); err != nil { log.Println("Unable to open index.html: ", err) } else if indexTmpl, err := template.New("index").Parse(indextpl); err != nil { @@ -86,7 +106,7 @@ func main() { log.Println(fmt.Sprintf("Ready, listening on %s", *bind)) - if err := http.ListenAndServe(*bind, http.StripPrefix(*baseURL, api.Router())); err != nil { + if err := http.ListenAndServe(*bind, StripPrefix(*baseURL, api.Router())); err != nil { log.Fatal("Unable to listen and serve: ", err) } }