From 89886843bdfe6f10c852f316f80fe2c8620dc499 Mon Sep 17 00:00:00 2001 From: James Hillyerd Date: Sat, 15 Dec 2018 09:20:57 -0800 Subject: [PATCH] web: Remove template related code --- doc/config.md | 22 --------- pkg/config/config.go | 1 - pkg/server/web/server.go | 5 -- pkg/server/web/template.go | 84 --------------------------------- pkg/webui/mailbox_controller.go | 11 ++--- 5 files changed, 3 insertions(+), 120 deletions(-) delete mode 100644 pkg/server/web/template.go diff --git a/doc/config.md b/doc/config.md index 00f1039..5e3336e 100644 --- a/doc/config.md +++ b/doc/config.md @@ -30,7 +30,6 @@ variables it supports: INBUCKET_WEB_ADDR 0.0.0.0:9000 Web server IP4 host:port INBUCKET_WEB_UIDIR ui User interface dir INBUCKET_WEB_GREETINGFILE ui/greeting.html Home page greeting HTML - INBUCKET_WEB_TEMPLATECACHE true Cache templates after first use? INBUCKET_WEB_MAILBOXPROMPT @inbucket Prompt next to mailbox input INBUCKET_WEB_MONITORVISIBLE true Show monitor tab in UI? INBUCKET_WEB_MONITORHISTORY 30 Monitor remembered messages @@ -310,16 +309,6 @@ Inbucket installation, as well as link to REST documentation, etc. - Default: `ui/greeting.html` -### Template Caching - -`INBUCKET_WEB_TEMPLATECACHE` - -Tells Inbucket to cache parsed template files. This should be left as default -unless you are a developer working on the Inbucket web interface. - -- Default: `true` -- Values: `true` or `false` - ### Mailbox Prompt `INBUCKET_WEB_MAILBOXPROMPT` @@ -332,17 +321,6 @@ Set to an empty string to hide the prompt. - Default: `@inbucket` -### Cookie Authentication Key - -`INBUCKET_WEB_COOKIEAUTHKEY` - -Inbucket stores session information in an encrypted browser cookie. Unless -specified, Inbucket generates a random key at startup. The only notable data -stored in a user session is the list of recently accessed mailboxes. - -- Default: None -- Value: Text string, no particular format required - ### Monitor Visible `INBUCKET_WEB_MONITORVISIBLE` diff --git a/pkg/config/config.go b/pkg/config/config.go index 60432cc..754b5bc 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -95,7 +95,6 @@ type Web struct { Addr string `required:"true" default:"0.0.0.0:9000" desc:"Web server IP4 host:port"` 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"` MonitorVisible bool `required:"true" default:"true" desc:"Show monitor tab in UI?"` MonitorHistory int `required:"true" default:"30" desc:"Monitor remembered messages"` diff --git a/pkg/server/web/server.go b/pkg/server/web/server.go index 4b3f944..957b7f7 100644 --- a/pkg/server/web/server.go +++ b/pkg/server/web/server.go @@ -17,11 +17,6 @@ import ( "github.com/rs/zerolog/log" ) -const ( - staticDir = "static" - templateDir = "templates" -) - var ( // msgHub holds a reference to the message pub/sub system msgHub *msghub.Hub diff --git a/pkg/server/web/template.go b/pkg/server/web/template.go deleted file mode 100644 index f9f8da2..0000000 --- a/pkg/server/web/template.go +++ /dev/null @@ -1,84 +0,0 @@ -package web - -import ( - "html/template" - "net/http" - "path" - "path/filepath" - "sync" - - "github.com/rs/zerolog/log" -) - -var cachedMutex sync.Mutex -var cachedTemplates = map[string]*template.Template{} -var cachedPartials = map[string]*template.Template{} - -// RenderTemplate fetches the named template and renders it to the provided -// ResponseWriter. -func RenderTemplate(name string, w http.ResponseWriter, data interface{}) error { - t, err := ParseTemplate(name, false) - if err != nil { - log.Error().Str("module", "web").Str("path", name).Err(err). - Msg("Error in template") - return err - } - w.Header().Set("Expires", "-1") - return t.Execute(w, data) -} - -// RenderPartial fetches the named template and renders it to the provided -// ResponseWriter. -func RenderPartial(name string, w http.ResponseWriter, data interface{}) error { - t, err := ParseTemplate(name, true) - if err != nil { - log.Error().Str("module", "web").Str("path", name).Err(err). - Msg("Error in template") - return err - } - w.Header().Set("Expires", "-1") - return t.Execute(w, data) -} - -// ParseTemplate loads the requested template along with _base.html, caching -// the result (if configured to do so) -func ParseTemplate(name string, partial bool) (*template.Template, error) { - cachedMutex.Lock() - defer cachedMutex.Unlock() - - if t, ok := cachedTemplates[name]; ok { - return t, nil - } - - tempFile := filepath.Join(rootConfig.Web.UIDir, templateDir, filepath.FromSlash(name)) - log.Debug().Str("module", "web").Str("path", name).Msg("Parsing template") - - var err error - var t *template.Template - if partial { - // Need to get basename of file to make it root template w/ funcs - base := path.Base(name) - t = template.New(base).Funcs(TemplateFuncs) - t, err = t.ParseFiles(tempFile) - } else { - t = template.New("_base.html").Funcs(TemplateFuncs) - t, err = t.ParseFiles( - filepath.Join(rootConfig.Web.UIDir, templateDir, "_base.html"), tempFile) - } - if err != nil { - return nil, err - } - - // Allows us to disable caching for theme development - if rootConfig.Web.TemplateCache { - if partial { - log.Debug().Str("module", "web").Str("path", name).Msg("Caching partial") - cachedTemplates[name] = t - } else { - log.Debug().Str("module", "web").Str("path", name).Msg("Caching template") - cachedTemplates[name] = t - } - } - - return t, nil -} diff --git a/pkg/webui/mailbox_controller.go b/pkg/webui/mailbox_controller.go index 8e4901b..c9423e1 100644 --- a/pkg/webui/mailbox_controller.go +++ b/pkg/webui/mailbox_controller.go @@ -3,7 +3,6 @@ package webui import ( "errors" "fmt" - "html/template" "io" "net/http" "strconv" @@ -110,14 +109,10 @@ func MailboxHTML(w http.ResponseWriter, req *http.Request, ctx *web.Context) (er // This doesn't indicate empty, likely an IO error return fmt.Errorf("GetMessage(%q) failed: %v", id, err) } - // Render partial template + // Render HTML w.Header().Set("Content-Type", "text/html; charset=UTF-8") - return web.RenderPartial("mailbox/_html.html", w, map[string]interface{}{ - "ctx": ctx, - "name": name, - "message": msg, - "body": template.HTML(msg.HTML()), - }) + _, err = w.Write([]byte(msg.HTML())) + return err } // MailboxSource displays the raw source of a message, including headers. Renders text/plain