diff --git a/web/templates/_base.html b/web/templates/_base.html index 8fd42844c..6ad6e054e 100644 --- a/web/templates/_base.html +++ b/web/templates/_base.html @@ -13,6 +13,8 @@ Graph & Console Status Databases + {{ define "user_dashboard_link" }}{{ end }} + {{ template "user_dashboard_link" .}} Help diff --git a/web/web.go b/web/web.go index 987d2a6f1..d5375677a 100644 --- a/web/web.go +++ b/web/web.go @@ -31,6 +31,7 @@ import ( var ( listenAddress = flag.String("listenAddress", ":9090", "Address to listen on for web interface.") useLocalAssets = flag.Bool("useLocalAssets", false, "Read assets/templates from file instead of binary.") + userAssetsPath = flag.String("userAssets", "", "Path to static asset directory, available at /user") ) type WebService struct { @@ -65,17 +66,24 @@ func (w WebService) ServeForever() error { exp.Handle("/static/", http.StripPrefix("/static/", new(blob.Handler))) } + if *userAssetsPath != "" { + exp.Handle("/user/", http.StripPrefix("/user/", http.FileServer(http.Dir(*userAssetsPath)))) + } + log.Printf("listening on %s", *listenAddress) return http.ListenAndServe(*listenAddress, exp.DefaultCoarseMux) } -func getTemplate(name string) (t *template.Template, err error) { - if *useLocalAssets { - return template.ParseFiles("web/templates/_base.html", fmt.Sprintf("web/templates/%s.html", name)) - } +func getLocalTemplate(name string) (*template.Template, error) { + return template.ParseFiles( + "web/templates/_base.html", + fmt.Sprintf("web/templates/%s.html", name), + ) +} - t = template.New("_base") +func getEmbeddedTemplate(name string) (*template.Template, error) { + t := template.New("_base") file, err := blob.GetFile(blob.TemplateFiles, "_base.html") if err != nil { @@ -91,6 +99,26 @@ func getTemplate(name string) (t *template.Template, err error) { } t.Parse(string(file)) + return t, nil +} + + +func getTemplate(name string) (t *template.Template, err error) { + if *useLocalAssets { + t, err = getLocalTemplate(name) + } else { + t, err = getEmbeddedTemplate(name) + } + + if err != nil { + return + } + + if *userAssetsPath != "" { + // replace "user_dashboard_link" template + t.Parse(`{{define "user_dashboard_link"}}User Dashboard{{end}}`) + } + return }