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,28 +533,40 @@ 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 {
file := r.URL.Path return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
file := r.URL.Path
if file[0] == '/' { if file[0] == '/' {
file = file[1:] file = file[1:]
} }
if len(file) == 0 { if len(file) == 0 {
file = "index.html" file = "index.html"
} }
bs, ok := auto.Assets[file] if assetDir != "" {
if !ok { p := filepath.Join(assetDir, filepath.FromSlash(file))
return _, err := os.Stat(p)
} if err == nil {
http.ServeFile(w, r, p)
return
}
}
mtype := mime.TypeByExtension(filepath.Ext(r.URL.Path)) bs, ok := auto.Assets[file]
if len(mtype) != 0 { if !ok {
w.Header().Set("Content-Type", mtype) http.NotFound(w, r)
} return
w.Header().Set("Content-Length", fmt.Sprintf("%d", len(bs))) }
w.Header().Set("Last-Modified", modt)
w.Write(bs) mtype := mime.TypeByExtension(filepath.Ext(r.URL.Path))
if len(mtype) != 0 {
w.Header().Set("Content-Type", mtype)
}
w.Header().Set("Content-Length", fmt.Sprintf("%d", len(bs)))
w.Header().Set("Last-Modified", modt)
w.Write(bs)
})
} }