Use compiled in assets for those not in STGUIASSETS dir

This commit is contained in:
Jakob Borg 2014-07-22 20:11:36 +02:00
parent d3085a4127
commit 3b4fe19dfb
1 changed files with 33 additions and 24 deletions

View File

@ -15,6 +15,7 @@ import (
"mime" "mime"
"net" "net"
"net/http" "net/http"
"os"
"path/filepath" "path/filepath"
"reflect" "reflect"
"runtime" "runtime"
@ -128,11 +129,7 @@ func startGUI(cfg config.GUIConfiguration, assetDir string, m *model.Model) erro
mux.HandleFunc("/qr/", getQR) mux.HandleFunc("/qr/", getQR)
// Serve compiled in assets unless an asset directory was set (for development) // Serve compiled in assets unless an asset directory was set (for development)
if len(assetDir) > 0 { mux.Handle("/", embeddedStatic(assetDir))
mux.Handle("/", http.FileServer(http.Dir(assetDir)))
} else {
mux.HandleFunc("/", embeddedStatic)
}
// Wrap everything in CSRF protection. The /rest prefix should be // Wrap everything in CSRF protection. The /rest prefix should be
// protected, other requests will grant cookies. // protected, other requests will grant cookies.
@ -536,7 +533,8 @@ func validAPIKey(k string) bool {
return len(apiKey) > 0 && k == apiKey return len(apiKey) > 0 && k == apiKey
} }
func embeddedStatic(w http.ResponseWriter, r *http.Request) { func embeddedStatic(assetDir string) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
file := r.URL.Path file := r.URL.Path
if file[0] == '/' { if file[0] == '/' {
@ -547,8 +545,18 @@ func embeddedStatic(w http.ResponseWriter, r *http.Request) {
file = "index.html" file = "index.html"
} }
if assetDir != "" {
p := filepath.Join(assetDir, filepath.FromSlash(file))
_, err := os.Stat(p)
if err == nil {
http.ServeFile(w, r, p)
return
}
}
bs, ok := auto.Assets[file] bs, ok := auto.Assets[file]
if !ok { if !ok {
http.NotFound(w, r)
return return
} }
@ -560,4 +568,5 @@ func embeddedStatic(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Last-Modified", modt) w.Header().Set("Last-Modified", modt)
w.Write(bs) w.Write(bs)
})
} }