1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-18 01:57:02 +00:00

Make monitor configurable for #44

This commit is contained in:
James Hillyerd
2017-01-21 19:15:44 -08:00
parent c346372c85
commit 9ae428ca44
11 changed files with 108 additions and 8 deletions

View File

@@ -40,6 +40,8 @@ type WebConfig struct {
PublicDir string PublicDir string
GreetingFile string GreetingFile string
CookieAuthKey string CookieAuthKey string
MonitorVisible bool
MonitorHistory int
} }
// DataStoreConfig contains the mail store configuration // DataStoreConfig contains the mail store configuration
@@ -130,6 +132,8 @@ func LoadConfig(filename string) error {
requireOption(messages, "web", "template.dir") requireOption(messages, "web", "template.dir")
requireOption(messages, "web", "template.cache") requireOption(messages, "web", "template.cache")
requireOption(messages, "web", "public.dir") requireOption(messages, "web", "public.dir")
requireOption(messages, "web", "monitor.visible")
requireOption(messages, "web", "monitor.history")
requireOption(messages, "datastore", "path") requireOption(messages, "datastore", "path")
requireOption(messages, "datastore", "retention.minutes") requireOption(messages, "datastore", "retention.minutes")
requireOption(messages, "datastore", "retention.sleep.millis") requireOption(messages, "datastore", "retention.sleep.millis")
@@ -349,6 +353,19 @@ func parseWebConfig() error {
} }
webConfig.GreetingFile = str webConfig.GreetingFile = str
option = "monitor.visible"
flag, err = Config.Bool(section, option)
if err != nil {
return fmt.Errorf("Failed to parse [%v]%v: '%v'", section, option, err)
}
webConfig.MonitorVisible = flag
option = "monitor.history"
webConfig.MonitorHistory, err = Config.Int(section, option)
if err != nil {
return fmt.Errorf("Failed to parse [%v]%v: '%v'", section, option, err)
}
option = "cookie.auth.key" option = "cookie.auth.key"
if Config.HasOption(section, option) { if Config.HasOption(section, option) {
str, err = Config.String(section, option) str, err = Config.String(section, option)

View File

@@ -91,6 +91,18 @@ greeting.file=%(install.dir)s/themes/greeting.html
# and previous sessions will be invalidated. # and previous sessions will be invalidated.
cookie.auth.key=secret-inbucket-session-cookie-key cookie.auth.key=secret-inbucket-session-cookie-key
# Enable or disable the live message monitor tab for the web UI. This will let
# anybody see all messages delivered to Inbucket. This setting has no impact
# on the availability of the underlying WebSocket.
monitor.visible=true
# How many historical message headers should be cached for display by new
# monitor connections. It does not limit the number of messages displayed by
# the browser once the monitor is open; all freshly received messages will be
# appended to the on screen list. This setting also affects the underlying
# API/WebSocket.
monitor.history=30
############################################################################# #############################################################################
[datastore] [datastore]

View File

@@ -93,6 +93,18 @@ greeting.file=/con/configuration/greeting.html
# and previous sessions will be invalidated. # and previous sessions will be invalidated.
#cookie.auth.key=secret-inbucket-session-cookie-key #cookie.auth.key=secret-inbucket-session-cookie-key
# Enable or disable the live message monitor tab for the web UI. This will let
# anybody see all messages delivered to Inbucket. This setting has no impact
# on the availability of the underlying WebSocket.
monitor.visible=true
# How many historical message headers should be cached for display by new
# monitor connections. It does not limit the number of messages displayed by
# the browser once the monitor is open; all freshly received messages will be
# appended to the on screen list. This setting also affects the underlying
# API/WebSocket.
monitor.history=30
############################################################################# #############################################################################
[datastore] [datastore]

View File

@@ -93,6 +93,18 @@ greeting.file=%(themes.dir)s/greeting.html
# and previous sessions will be invalidated. # and previous sessions will be invalidated.
cookie.auth.key=secret-inbucket-session-cookie-key cookie.auth.key=secret-inbucket-session-cookie-key
# Enable or disable the live message monitor tab for the web UI. This will let
# anybody see all messages delivered to Inbucket. This setting has no impact
# on the availability of the underlying WebSocket.
monitor.visible=true
# How many historical message headers should be cached for display by new
# monitor connections. It does not limit the number of messages displayed by
# the browser once the monitor is open; all freshly received messages will be
# appended to the on screen list. This setting also affects the underlying
# API/WebSocket.
monitor.history=30
############################################################################# #############################################################################
[datastore] [datastore]

View File

@@ -91,6 +91,18 @@ greeting.file=%(install.dir)s/themes/greeting.html
# and previous sessions will be invalidated. # and previous sessions will be invalidated.
#cookie.auth.key=secret-inbucket-session-cookie-key #cookie.auth.key=secret-inbucket-session-cookie-key
# Enable or disable the live message monitor tab for the web UI. This will let
# anybody see all messages delivered to Inbucket. This setting has no impact
# on the availability of the underlying WebSocket.
monitor.visible=true
# How many historical message headers should be cached for display by new
# monitor connections. It does not limit the number of messages displayed by
# the browser once the monitor is open; all freshly received messages will be
# appended to the on screen list. This setting also affects the underlying
# API/WebSocket.
monitor.history=30
############################################################################# #############################################################################
[datastore] [datastore]

View File

@@ -91,6 +91,18 @@ greeting.file=%(install.dir)s/themes/greeting.html
# and previous sessions will be invalidated. # and previous sessions will be invalidated.
#cookie.auth.key=secret-inbucket-session-cookie-key #cookie.auth.key=secret-inbucket-session-cookie-key
# Enable or disable the live message monitor tab for the web UI. This will let
# anybody see all messages delivered to Inbucket. This setting has no impact
# on the availability of the underlying WebSocket.
monitor.visible=true
# How many historical message headers should be cached for display by new
# monitor connections. It does not limit the number of messages displayed by
# the browser once the monitor is open; all freshly received messages will be
# appended to the on screen list. This setting also affects the underlying
# API/WebSocket.
monitor.history=30
############################################################################# #############################################################################
[datastore] [datastore]

View File

@@ -91,6 +91,18 @@ greeting.file=%(install.dir)s\themes\greeting.html
# and previous sessions will be invalidated. # and previous sessions will be invalidated.
#cookie.auth.key=secret-inbucket-session-cookie-key #cookie.auth.key=secret-inbucket-session-cookie-key
# Enable or disable the live message monitor tab for the web UI. This will let
# anybody see all messages delivered to Inbucket. This setting has no impact
# on the availability of the underlying WebSocket.
monitor.visible=true
# How many historical message headers should be cached for display by new
# monitor connections. It does not limit the number of messages displayed by
# the browser once the monitor is open; all freshly received messages will be
# appended to the on screen list. This setting also affects the underlying
# API/WebSocket.
monitor.history=30
############################################################################# #############################################################################
[datastore] [datastore]

View File

@@ -6,6 +6,7 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/gorilla/sessions" "github.com/gorilla/sessions"
"github.com/jhillyerd/inbucket/config"
"github.com/jhillyerd/inbucket/msghub" "github.com/jhillyerd/inbucket/msghub"
"github.com/jhillyerd/inbucket/smtpd" "github.com/jhillyerd/inbucket/smtpd"
) )
@@ -16,6 +17,7 @@ type Context struct {
Session *sessions.Session Session *sessions.Session
DataStore smtpd.DataStore DataStore smtpd.DataStore
MsgHub *msghub.Hub MsgHub *msghub.Hub
WebConfig config.WebConfig
IsJSON bool IsJSON bool
} }
@@ -59,6 +61,7 @@ func NewContext(req *http.Request) (*Context, error) {
Session: sess, Session: sess,
DataStore: DataStore, DataStore: DataStore,
MsgHub: msgHub, MsgHub: msgHub,
WebConfig: webConfig,
IsJSON: headerMatch(req, "Accept", "application/json"), IsJSON: headerMatch(req, "Accept", "application/json"),
} }
return ctx, err return ctx, err

View File

@@ -97,7 +97,7 @@ func main() {
} }
// Create message hub // Create message hub
msgHub := msghub.New(rootCtx, 30) msgHub := msghub.New(rootCtx, config.GetWebConfig().MonitorHistory)
// Grab our datastore // Grab our datastore
ds := smtpd.DefaultFileDataStore() ds := smtpd.DefaultFileDataStore()

View File

@@ -48,7 +48,9 @@
</ul> </ul>
</li> </li>
{{end}} {{end}}
{{if .ctx.WebConfig.MonitorVisible}}
<li id="nav-monitor"><a href="/monitor" accesskey="2">Monitor</a></li> <li id="nav-monitor"><a href="/monitor" accesskey="2">Monitor</a></li>
{{end}}
<li id="nav-status"><a href="/status" accesskey="3">Status</a></li> <li id="nav-status"><a href="/status" accesskey="3">Status</a></li>
</ul> </ul>
<form class="navbar-form navbar-right" action="{{reverse "MailboxIndex"}}" method="GET"> <form class="navbar-form navbar-right" action="{{reverse "MailboxIndex"}}" method="GET">

View File

@@ -31,6 +31,12 @@ func RootIndex(w http.ResponseWriter, req *http.Request, ctx *httpd.Context) (er
// RootMonitor serves the Inbucket monitor page // RootMonitor serves the Inbucket monitor page
func RootMonitor(w http.ResponseWriter, req *http.Request, ctx *httpd.Context) (err error) { func RootMonitor(w http.ResponseWriter, req *http.Request, ctx *httpd.Context) (err error) {
if !config.GetWebConfig().MonitorVisible {
ctx.Session.AddFlash("Monitor is disabled in configuration", "errors")
_ = ctx.Session.Save(req, w)
http.Redirect(w, req, httpd.Reverse("RootIndex"), http.StatusSeeOther)
return nil
}
// Get flash messages, save session // Get flash messages, save session
errorFlash := ctx.Session.Flashes("errors") errorFlash := ctx.Session.Flashes("errors")
if err = ctx.Session.Save(req, w); err != nil { if err = ctx.Session.Save(req, w); err != nil {