mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 17:47:03 +00:00
web: Remove template related code
This commit is contained in:
@@ -30,7 +30,6 @@ variables it supports:
|
|||||||
INBUCKET_WEB_ADDR 0.0.0.0:9000 Web server IP4 host:port
|
INBUCKET_WEB_ADDR 0.0.0.0:9000 Web server IP4 host:port
|
||||||
INBUCKET_WEB_UIDIR ui User interface dir
|
INBUCKET_WEB_UIDIR ui User interface dir
|
||||||
INBUCKET_WEB_GREETINGFILE ui/greeting.html Home page greeting HTML
|
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_MAILBOXPROMPT @inbucket Prompt next to mailbox input
|
||||||
INBUCKET_WEB_MONITORVISIBLE true Show monitor tab in UI?
|
INBUCKET_WEB_MONITORVISIBLE true Show monitor tab in UI?
|
||||||
INBUCKET_WEB_MONITORHISTORY 30 Monitor remembered messages
|
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`
|
- 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
|
### Mailbox Prompt
|
||||||
|
|
||||||
`INBUCKET_WEB_MAILBOXPROMPT`
|
`INBUCKET_WEB_MAILBOXPROMPT`
|
||||||
@@ -332,17 +321,6 @@ Set to an empty string to hide the prompt.
|
|||||||
|
|
||||||
- Default: `@inbucket`
|
- 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
|
### Monitor Visible
|
||||||
|
|
||||||
`INBUCKET_WEB_MONITORVISIBLE`
|
`INBUCKET_WEB_MONITORVISIBLE`
|
||||||
|
|||||||
@@ -95,7 +95,6 @@ type Web struct {
|
|||||||
Addr string `required:"true" default:"0.0.0.0:9000" desc:"Web server IP4 host:port"`
|
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"`
|
UIDir string `required:"true" default:"ui" desc:"User interface dir"`
|
||||||
GreetingFile string `required:"true" default:"ui/greeting.html" desc:"Home page greeting HTML"`
|
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"`
|
MailboxPrompt string `required:"true" default:"@inbucket" desc:"Prompt next to mailbox input"`
|
||||||
MonitorVisible bool `required:"true" default:"true" desc:"Show monitor tab in UI?"`
|
MonitorVisible bool `required:"true" default:"true" desc:"Show monitor tab in UI?"`
|
||||||
MonitorHistory int `required:"true" default:"30" desc:"Monitor remembered messages"`
|
MonitorHistory int `required:"true" default:"30" desc:"Monitor remembered messages"`
|
||||||
|
|||||||
@@ -17,11 +17,6 @@ import (
|
|||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
staticDir = "static"
|
|
||||||
templateDir = "templates"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// msgHub holds a reference to the message pub/sub system
|
// msgHub holds a reference to the message pub/sub system
|
||||||
msgHub *msghub.Hub
|
msgHub *msghub.Hub
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -3,7 +3,6 @@ package webui
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"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
|
// This doesn't indicate empty, likely an IO error
|
||||||
return fmt.Errorf("GetMessage(%q) failed: %v", id, err)
|
return fmt.Errorf("GetMessage(%q) failed: %v", id, err)
|
||||||
}
|
}
|
||||||
// Render partial template
|
// Render HTML
|
||||||
w.Header().Set("Content-Type", "text/html; charset=UTF-8")
|
w.Header().Set("Content-Type", "text/html; charset=UTF-8")
|
||||||
return web.RenderPartial("mailbox/_html.html", w, map[string]interface{}{
|
_, err = w.Write([]byte(msg.HTML()))
|
||||||
"ctx": ctx,
|
return err
|
||||||
"name": name,
|
|
||||||
"message": msg,
|
|
||||||
"body": template.HTML(msg.HTML()),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MailboxSource displays the raw source of a message, including headers. Renders text/plain
|
// MailboxSource displays the raw source of a message, including headers. Renders text/plain
|
||||||
|
|||||||
Reference in New Issue
Block a user