mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 17:47:03 +00:00
chore: more small lint/perf fixes (#493)
Signed-off-by: James Hillyerd <james@hillyerd.com>
This commit is contained in:
@@ -79,9 +79,9 @@ func (s *StoreManager) Deliver(
|
|||||||
tstamp := now.UTC().Format(recvdTimeFmt)
|
tstamp := now.UTC().Format(recvdTimeFmt)
|
||||||
|
|
||||||
// Process inbound message through extensions.
|
// Process inbound message through extensions.
|
||||||
mailboxes := make([]string, len(recipients))
|
mailboxes := make([]string, 0, len(recipients))
|
||||||
for i, recip := range recipients {
|
for _, recip := range recipients {
|
||||||
mailboxes[i] = recip.Mailbox
|
mailboxes = append(mailboxes, recip.Mailbox)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Construct InboundMessage event and process through extensions.
|
// Construct InboundMessage event and process through extensions.
|
||||||
|
|||||||
@@ -368,10 +368,10 @@ func TestGetMessage(t *testing.T) {
|
|||||||
|
|
||||||
// Add a test message.
|
// Add a test message.
|
||||||
subject := "getMessage1"
|
subject := "getMessage1"
|
||||||
id := addTestMessage(sm, "box1", subject)
|
id := addTestMessage(sm, "get-box", subject)
|
||||||
|
|
||||||
// Verify retrieval of the test message.
|
// Verify retrieval of the test message.
|
||||||
msg, err := sm.GetMessage("box1", id)
|
msg, err := sm.GetMessage("get-box", id)
|
||||||
require.NoError(t, err, "GetMessage must succeed")
|
require.NoError(t, err, "GetMessage must succeed")
|
||||||
require.NotNil(t, msg, "GetMessage must return a result")
|
require.NotNil(t, msg, "GetMessage must return a result")
|
||||||
assert.Equal(t, subject, msg.Subject)
|
assert.Equal(t, subject, msg.Subject)
|
||||||
@@ -383,19 +383,19 @@ func TestMarkSeen(t *testing.T) {
|
|||||||
|
|
||||||
// Add a test message.
|
// Add a test message.
|
||||||
subject := "getMessage1"
|
subject := "getMessage1"
|
||||||
id := addTestMessage(sm, "box1", subject)
|
id := addTestMessage(sm, "seen-box", subject)
|
||||||
|
|
||||||
// Verify test message unseen.
|
// Verify test message unseen.
|
||||||
msg, err := sm.GetMessage("box1", id)
|
msg, err := sm.GetMessage("seen-box", id)
|
||||||
require.NoError(t, err, "GetMessage must succeed")
|
require.NoError(t, err, "GetMessage must succeed")
|
||||||
require.NotNil(t, msg, "GetMessage must return a result")
|
require.NotNil(t, msg, "GetMessage must return a result")
|
||||||
assert.False(t, msg.Seen, "msg should be unseen")
|
assert.False(t, msg.Seen, "msg should be unseen")
|
||||||
|
|
||||||
err = sm.MarkSeen("box1", id)
|
err = sm.MarkSeen("seen-box", id)
|
||||||
require.NoError(t, err, "MarkSeen should succeed")
|
require.NoError(t, err, "MarkSeen should succeed")
|
||||||
|
|
||||||
// Verify test message seen.
|
// Verify test message seen.
|
||||||
msg, err = sm.GetMessage("box1", id)
|
msg, err = sm.GetMessage("seen-box", id)
|
||||||
require.NoError(t, err, "GetMessage must succeed")
|
require.NoError(t, err, "GetMessage must succeed")
|
||||||
require.NotNil(t, msg, "GetMessage must return a result")
|
require.NotNil(t, msg, "GetMessage must return a result")
|
||||||
assert.True(t, msg.Seen, "msg should have been seen")
|
assert.True(t, msg.Seen, "msg should have been seen")
|
||||||
@@ -405,17 +405,17 @@ func TestRemoveMessage(t *testing.T) {
|
|||||||
sm, _ := testStoreManager()
|
sm, _ := testStoreManager()
|
||||||
|
|
||||||
// Add test messages.
|
// Add test messages.
|
||||||
id1 := addTestMessage(sm, "box1", "subject 1")
|
id1 := addTestMessage(sm, "rm-box", "subject 1")
|
||||||
id2 := addTestMessage(sm, "box1", "subject 2")
|
id2 := addTestMessage(sm, "rm-box", "subject 2")
|
||||||
id3 := addTestMessage(sm, "box1", "subject 3")
|
id3 := addTestMessage(sm, "rm-box", "subject 3")
|
||||||
got, err := sm.GetMetadata("box1")
|
got, err := sm.GetMetadata("rm-box")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, got, 3)
|
require.Len(t, got, 3)
|
||||||
|
|
||||||
// Delete message 2 and verify.
|
// Delete message 2 and verify.
|
||||||
err = sm.RemoveMessage("box1", id2)
|
err = sm.RemoveMessage("rm-box", id2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
got, err = sm.GetMetadata("box1")
|
got, err = sm.GetMetadata("rm-box")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, got, 2, "Should be 2 messages remaining")
|
require.Len(t, got, 2, "Should be 2 messages remaining")
|
||||||
|
|
||||||
@@ -431,17 +431,17 @@ func TestPurgeMessages(t *testing.T) {
|
|||||||
sm, _ := testStoreManager()
|
sm, _ := testStoreManager()
|
||||||
|
|
||||||
// Add test messages.
|
// Add test messages.
|
||||||
_ = addTestMessage(sm, "box1", "subject 1")
|
_ = addTestMessage(sm, "purge-box", "subject 1")
|
||||||
_ = addTestMessage(sm, "box1", "subject 2")
|
_ = addTestMessage(sm, "purge-box", "subject 2")
|
||||||
_ = addTestMessage(sm, "box1", "subject 3")
|
_ = addTestMessage(sm, "purge-box", "subject 3")
|
||||||
got, err := sm.GetMetadata("box1")
|
got, err := sm.GetMetadata("purge-box")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, got, 3)
|
require.Len(t, got, 3)
|
||||||
|
|
||||||
// Purge and verify.
|
// Purge and verify.
|
||||||
err = sm.PurgeMessages("box1")
|
err = sm.PurgeMessages("purge-box")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
got, err = sm.GetMetadata("box1")
|
got, err = sm.GetMetadata("purge-box")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Empty(t, got, "Purge should remove all mailbox messages")
|
assert.Empty(t, got, "Purge should remove all mailbox messages")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ func (hub *Hub) RemoveListener(l Listener) {
|
|||||||
// for unit tests.
|
// for unit tests.
|
||||||
func (hub *Hub) Sync() {
|
func (hub *Hub) Sync() {
|
||||||
done := make(chan struct{})
|
done := make(chan struct{})
|
||||||
hub.opChan <- func(h *Hub) {
|
hub.opChan <- func(_ *Hub) {
|
||||||
close(done)
|
close(done)
|
||||||
}
|
}
|
||||||
<-done
|
<-done
|
||||||
|
|||||||
@@ -306,15 +306,16 @@ LOOP:
|
|||||||
case c == '\\':
|
case c == '\\':
|
||||||
inCharQuote = true
|
inCharQuote = true
|
||||||
case c == '"':
|
case c == '"':
|
||||||
if inCharQuote {
|
switch {
|
||||||
|
case inCharQuote:
|
||||||
err = buf.WriteByte(c)
|
err = buf.WriteByte(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
inCharQuote = false
|
inCharQuote = false
|
||||||
} else if inStringQuote {
|
case inStringQuote:
|
||||||
inStringQuote = false
|
inStringQuote = false
|
||||||
} else {
|
default:
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
inStringQuote = true
|
inStringQuote = true
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ type options struct {
|
|||||||
|
|
||||||
// Option can apply itself to the private options type.
|
// Option can apply itself to the private options type.
|
||||||
type Option interface {
|
type Option interface {
|
||||||
apply(*options)
|
apply(opts *options)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDefaultOptions() *options {
|
func getDefaultOptions() *options {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
|
|
||||||
// httpClient allows http.Client to be mocked for tests
|
// httpClient allows http.Client to be mocked for tests
|
||||||
type httpClient interface {
|
type httpClient interface {
|
||||||
Do(*http.Request) (*http.Response, error)
|
Do(req *http.Request) (*http.Response, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generic REST restClient
|
// Generic REST restClient
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
const baseURLStr = "http://test.local:8080"
|
const baseURLStr = "http://test.local:8080"
|
||||||
@@ -78,10 +80,11 @@ func TestDoTable(t *testing.T) {
|
|||||||
t.Run(testname, func(t *testing.T) {
|
t.Run(testname, func(t *testing.T) {
|
||||||
mth := &mockHTTPClient{}
|
mth := &mockHTTPClient{}
|
||||||
c := &restClient{mth, test.base}
|
c := &restClient{mth, test.base}
|
||||||
_, err := c.do(test.method, test.uri, test.wantBody)
|
resp, err := c.do(test.method, test.uri, test.wantBody)
|
||||||
if err != nil {
|
require.NoError(t, err)
|
||||||
t.Fatal(err)
|
err = resp.Body.Close()
|
||||||
}
|
require.NoError(t, err)
|
||||||
|
|
||||||
if mth.req.Method != test.wantMethod {
|
if mth.req.Method != test.wantMethod {
|
||||||
t.Errorf("req.Method == %q, want %q", mth.req.Method, test.wantMethod)
|
t.Errorf("req.Method == %q, want %q", mth.req.Method, test.wantMethod)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/inbucket/inbucket/v3/pkg/config"
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -86,13 +85,13 @@ func requestLoggingWrapper(next http.Handler) http.Handler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// spaTemplateHandler creates a handler to serve the index.html template for our SPA.
|
// spaTemplateHandler creates a handler to serve the index.html template for our SPA.
|
||||||
func spaTemplateHandler(tmpl *template.Template, basePath string,
|
func spaTemplateHandler(tmpl *template.Template, basePath string) http.Handler {
|
||||||
webConfig config.Web) http.Handler {
|
|
||||||
tmplData := struct {
|
tmplData := struct {
|
||||||
BasePath string
|
BasePath string
|
||||||
}{
|
}{
|
||||||
BasePath: basePath,
|
BasePath: basePath,
|
||||||
}
|
}
|
||||||
|
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||||
// ensure we do now allow click jacking
|
// ensure we do now allow click jacking
|
||||||
w.Header().Set("X-Frame-Options", "SameOrigin")
|
w.Header().Set("X-Frame-Options", "SameOrigin")
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ func TextToHTML(text string) string {
|
|||||||
|
|
||||||
// WrapURL wraps a <a href> tag around the provided URL
|
// WrapURL wraps a <a href> tag around the provided URL
|
||||||
func WrapURL(url string) string {
|
func WrapURL(url string) string {
|
||||||
unescaped := strings.Replace(url, "&", "&", -1)
|
unescaped := strings.ReplaceAll(url, "&", "&")
|
||||||
return fmt.Sprintf("<a href=\"%s\" target=\"_blank\">%s</a>", unescaped, url)
|
return fmt.Sprintf("<a href=\"%s\" target=\"_blank\">%s</a>", unescaped, url)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ func NewServer(conf *config.Root, mm message.Manager, mh *msghub.Hub) *Server {
|
|||||||
|
|
||||||
// SPA managed paths.
|
// SPA managed paths.
|
||||||
spaHandler := cookieHandler(appConfigCookie(conf.Web),
|
spaHandler := cookieHandler(appConfigCookie(conf.Web),
|
||||||
spaTemplateHandler(indexTmpl, prefix("/"), conf.Web))
|
spaTemplateHandler(indexTmpl, prefix("/")))
|
||||||
Router.Path(prefix("/")).Handler(spaHandler)
|
Router.Path(prefix("/")).Handler(spaHandler)
|
||||||
Router.Path(prefix("/monitor")).Handler(spaHandler)
|
Router.Path(prefix("/monitor")).Handler(spaHandler)
|
||||||
Router.Path(prefix("/status")).Handler(spaHandler)
|
Router.Path(prefix("/status")).Handler(spaHandler)
|
||||||
|
|||||||
@@ -282,8 +282,7 @@ func clearEnv() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Backup ciritcal env variables.
|
// Backup ciritcal env variables.
|
||||||
switch runtime.GOOS {
|
if runtime.GOOS == "windows" {
|
||||||
case "windows":
|
|
||||||
backup("SYSTEMROOT")
|
backup("SYSTEMROOT")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user