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
}