mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 09:37:02 +00:00
Make monitor configurable for #44
This commit is contained in:
@@ -33,13 +33,15 @@ type POP3Config struct {
|
|||||||
|
|
||||||
// WebConfig contains the HTTP server configuration
|
// WebConfig contains the HTTP server configuration
|
||||||
type WebConfig struct {
|
type WebConfig struct {
|
||||||
IP4address net.IP
|
IP4address net.IP
|
||||||
IP4port int
|
IP4port int
|
||||||
TemplateDir string
|
TemplateDir string
|
||||||
TemplateCache bool
|
TemplateCache bool
|
||||||
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)
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user