diff --git a/pkg/config/config.go b/pkg/config/config.go index 2ca6702..5346eea 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -57,10 +57,9 @@ type POP3 struct { // Web contains the HTTP server configuration. type Web struct { Addr string `required:"true" default:"0.0.0.0:9000" desc:"Web server IP4 host:port"` - TemplateDir string `required:"true" default:"ui/templates" desc:"Theme template dir"` - TemplateCache bool `required:"true" default:"true" desc:"Cache templates after first use?"` - PublicDir string `required:"true" default:"ui/static" desc:"Theme public dir"` + UIDir string `required:"true" default:"ui" desc:"User interface dir"` GreetingFile string `required:"true" default:"ui/greeting.html" desc:"Home page greeting HTML"` + TemplateCache bool `required:"true" default:"true" desc:"Cache templates after first use?"` MailboxPrompt string `required:"true" default:"@inbucket" desc:"Prompt next to mailbox input"` CookieAuthKey string `desc:"Session cipher key (text)"` MonitorVisible bool `required:"true" default:"true" desc:"Show monitor tab in UI?"` diff --git a/pkg/rest/testutils_test.go b/pkg/rest/testutils_test.go index e2f2e3d..b062083 100644 --- a/pkg/rest/testutils_test.go +++ b/pkg/rest/testutils_test.go @@ -36,8 +36,7 @@ func setupWebServer(mm message.Manager) *bytes.Buffer { http.DefaultServeMux = http.NewServeMux() cfg := &config.Root{ Web: config.Web{ - TemplateDir: "../themes/bootstrap/templates", - PublicDir: "../themes/bootstrap/public", + UIDir: "../ui", }, } shutdownChan := make(chan bool) diff --git a/pkg/server/web/server.go b/pkg/server/web/server.go index 96716f0..8e5524c 100644 --- a/pkg/server/web/server.go +++ b/pkg/server/web/server.go @@ -6,6 +6,7 @@ import ( "expvar" "net" "net/http" + "path/filepath" "time" "github.com/gorilla/mux" @@ -20,6 +21,11 @@ import ( // Handler is a function type that handles an HTTP request in Inbucket type Handler func(http.ResponseWriter, *http.Request, *Context) error +const ( + staticDir = "static" + templateDir = "templates" +) + var ( // msgHub holds a reference to the message pub/sub system msgHub *msghub.Hub @@ -59,10 +65,10 @@ func Initialize( manager = mm // Content Paths - log.Infof("HTTP templates mapped to %q", conf.Web.TemplateDir) - log.Infof("HTTP static content mapped to %q", conf.Web.PublicDir) + staticPath := filepath.Join(conf.Web.UIDir, staticDir) + log.Infof("Web UI content mapped to path: %s", conf.Web.UIDir) Router.PathPrefix("/public/").Handler(http.StripPrefix("/public/", - http.FileServer(http.Dir(conf.Web.PublicDir)))) + http.FileServer(http.Dir(staticPath)))) http.Handle("/", Router) // Session cookie setup diff --git a/pkg/server/web/template.go b/pkg/server/web/template.go index 2597ada..87675a5 100644 --- a/pkg/server/web/template.go +++ b/pkg/server/web/template.go @@ -5,7 +5,6 @@ import ( "net/http" "path" "path/filepath" - "strings" "sync" "github.com/jhillyerd/inbucket/pkg/log" @@ -49,8 +48,7 @@ func ParseTemplate(name string, partial bool) (*template.Template, error) { return t, nil } - tempPath := strings.Replace(name, "/", string(filepath.Separator), -1) - tempFile := filepath.Join(rootConfig.Web.TemplateDir, tempPath) + tempFile := filepath.Join(rootConfig.Web.UIDir, templateDir, filepath.FromSlash(name)) log.Tracef("Parsing template %v", tempFile) var err error @@ -62,7 +60,8 @@ func ParseTemplate(name string, partial bool) (*template.Template, error) { t, err = t.ParseFiles(tempFile) } else { t = template.New("_base.html").Funcs(TemplateFuncs) - t, err = t.ParseFiles(filepath.Join(rootConfig.Web.TemplateDir, "_base.html"), tempFile) + t, err = t.ParseFiles( + filepath.Join(rootConfig.Web.UIDir, templateDir, "_base.html"), tempFile) } if err != nil { return nil, err