mirror of
https://github.com/mjl-/mox.git
synced 2025-07-14 09:34:36 +03:00
consistently use log.Check for logging errors that "should not happen", don't influence application flow
sooner or later, someone will notice one of these messages, which will lead us to a bug.
This commit is contained in:
@ -94,7 +94,8 @@ func checkAccountAuth(ctx context.Context, log *mlog.Log, w http.ResponseWriter,
|
||||
} else {
|
||||
authResult = "ok"
|
||||
accName := acc.Name
|
||||
acc.Close()
|
||||
err := acc.Close()
|
||||
log.Check(err, "closing account")
|
||||
return accName
|
||||
}
|
||||
// note: browsers don't display the realm to prevent users getting confused by malicious realm messages.
|
||||
@ -183,9 +184,9 @@ func accountHandle(w http.ResponseWriter, r *http.Request) {
|
||||
f, err := os.Open("http/account.html")
|
||||
if err == nil {
|
||||
defer f.Close()
|
||||
io.Copy(w, f)
|
||||
_, _ = io.Copy(w, f)
|
||||
} else {
|
||||
w.Write(accountHTML)
|
||||
_, _ = w.Write(accountHTML)
|
||||
}
|
||||
|
||||
case "/mail-export-maildir.tgz", "/mail-export-maildir.zip", "/mail-export-mbox.tgz", "/mail-export-mbox.zip":
|
||||
@ -198,7 +199,10 @@ func accountHandle(w http.ResponseWriter, r *http.Request) {
|
||||
http.Error(w, "500 - internal server error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
defer acc.Close()
|
||||
defer func() {
|
||||
err := acc.Close()
|
||||
log.Check(err, "closing account")
|
||||
}()
|
||||
|
||||
var archiver store.Archiver
|
||||
if tgz {
|
||||
@ -207,7 +211,7 @@ func accountHandle(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
gzw := gzip.NewWriter(w)
|
||||
defer func() {
|
||||
gzw.Close()
|
||||
_ = gzw.Close()
|
||||
}()
|
||||
archiver = store.TarArchiver{Writer: tar.NewWriter(gzw)}
|
||||
} else {
|
||||
@ -215,9 +219,8 @@ func accountHandle(w http.ResponseWriter, r *http.Request) {
|
||||
archiver = store.ZipArchiver{Writer: zip.NewWriter(w)}
|
||||
}
|
||||
defer func() {
|
||||
if err := archiver.Close(); err != nil {
|
||||
log.Errorx("exporting mail close", err)
|
||||
}
|
||||
err := archiver.Close()
|
||||
log.Check(err, "exporting mail close")
|
||||
}()
|
||||
if err := store.ExportMessages(log, acc.DB, acc.Dir, archiver, maildir, ""); err != nil {
|
||||
log.Errorx("exporting mail", err)
|
||||
@ -238,7 +241,10 @@ func accountHandle(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
defer func() {
|
||||
err := f.Close()
|
||||
log.Check(err, "closing form file")
|
||||
}()
|
||||
skipMailboxPrefix := r.FormValue("skipMailboxPrefix")
|
||||
tmpf, err := os.CreateTemp("", "mox-import")
|
||||
if err != nil {
|
||||
@ -247,7 +253,8 @@ func accountHandle(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
defer func() {
|
||||
if tmpf != nil {
|
||||
tmpf.Close()
|
||||
err := tmpf.Close()
|
||||
log.Check(err, "closing uploaded file")
|
||||
}
|
||||
}()
|
||||
if err := os.Remove(tmpf.Name()); err != nil {
|
||||
@ -269,7 +276,7 @@ func accountHandle(w http.ResponseWriter, r *http.Request) {
|
||||
tmpf = nil // importStart is now responsible for closing.
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(map[string]string{"ImportToken": token})
|
||||
_ = json.NewEncoder(w).Encode(map[string]string{"ImportToken": token})
|
||||
|
||||
default:
|
||||
if strings.HasPrefix(r.URL.Path, "/api/") {
|
||||
@ -294,7 +301,10 @@ func (Account) SetPassword(ctx context.Context, password string) {
|
||||
accountName := ctx.Value(authCtxKey).(string)
|
||||
acc, err := store.OpenAccount(accountName)
|
||||
xcheckf(ctx, err, "open account")
|
||||
defer acc.Close()
|
||||
defer func() {
|
||||
err := acc.Close()
|
||||
xlog.Check(err, "closing account")
|
||||
}()
|
||||
err = acc.SetPassword(password)
|
||||
xcheckf(ctx, err, "setting password")
|
||||
}
|
||||
|
@ -189,9 +189,9 @@ func adminHandle(w http.ResponseWriter, r *http.Request) {
|
||||
f, err := os.Open("http/admin.html")
|
||||
if err == nil {
|
||||
defer f.Close()
|
||||
io.Copy(w, f)
|
||||
_, _ = io.Copy(w, f)
|
||||
} else {
|
||||
w.Write(adminHTML)
|
||||
_, _ = w.Write(adminHTML)
|
||||
}
|
||||
return
|
||||
}
|
||||
@ -549,8 +549,8 @@ func checkDomain(ctx context.Context, resolver dns.Resolver, dialer *net.Dialer,
|
||||
end := time.Now().Add(10 * time.Second)
|
||||
cctx, cancel := context.WithTimeout(ctx, 10*time.Second)
|
||||
defer cancel()
|
||||
conn.SetReadDeadline(end)
|
||||
conn.SetWriteDeadline(end)
|
||||
err = conn.SetDeadline(end)
|
||||
xlog.WithContext(ctx).Check(err, "setting deadline")
|
||||
|
||||
br := bufio.NewReader(conn)
|
||||
_, err = br.ReadString('\n')
|
||||
@ -1447,7 +1447,10 @@ func (Admin) SetPassword(ctx context.Context, accountName, password string) {
|
||||
}
|
||||
acc, err := store.OpenAccount(accountName)
|
||||
xcheckf(ctx, err, "open account")
|
||||
defer acc.Close()
|
||||
defer func() {
|
||||
err := acc.Close()
|
||||
xlog.Check(err, "closing account")
|
||||
}()
|
||||
err = acc.SetPassword(password)
|
||||
xcheckf(ctx, err, "setting password")
|
||||
}
|
||||
|
@ -198,7 +198,8 @@ type importAborted struct{}
|
||||
func importStart(log *mlog.Log, accName string, f *os.File, skipMailboxPrefix string) (string, error) {
|
||||
defer func() {
|
||||
if f != nil {
|
||||
f.Close()
|
||||
err := f.Close()
|
||||
log.Check(err, "closing uploaded file")
|
||||
}
|
||||
}()
|
||||
|
||||
@ -254,7 +255,8 @@ func importStart(log *mlog.Log, accName string, f *os.File, skipMailboxPrefix st
|
||||
tx, err := acc.DB.Begin(true)
|
||||
if err != nil {
|
||||
acc.Unlock()
|
||||
acc.Close()
|
||||
xerr := acc.Close()
|
||||
log.Check(xerr, "closing account")
|
||||
return "", fmt.Errorf("start transaction: %v", err)
|
||||
}
|
||||
|
||||
@ -313,25 +315,22 @@ func importMessages(ctx context.Context, log *mlog.Log, token string, acc *store
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err := f.Close(); err != nil {
|
||||
log.Errorx("closing uploaded messages file", err)
|
||||
}
|
||||
err := f.Close()
|
||||
log.Check(err, "closing uploaded messages file")
|
||||
|
||||
for _, id := range deliveredIDs {
|
||||
p := acc.MessagePath(id)
|
||||
if err := os.Remove(p); err != nil {
|
||||
log.Errorx("closing message file after import error", err, mlog.Field("path", p))
|
||||
}
|
||||
err := os.Remove(p)
|
||||
log.Check(err, "closing message file after import error", mlog.Field("path", p))
|
||||
}
|
||||
if tx != nil {
|
||||
if err := tx.Rollback(); err != nil {
|
||||
log.Errorx("rolling back transaction", err)
|
||||
}
|
||||
err := tx.Rollback()
|
||||
log.Check(err, "rolling back transaction")
|
||||
}
|
||||
if acc != nil {
|
||||
acc.Unlock()
|
||||
if err := acc.Close(); err != nil {
|
||||
log.Errorx("closing account", err)
|
||||
}
|
||||
err := acc.Close()
|
||||
log.Check(err, "closing account")
|
||||
}
|
||||
|
||||
x := recover()
|
||||
@ -395,7 +394,10 @@ func importMessages(ctx context.Context, log *mlog.Log, token string, acc *store
|
||||
problemf("opening message again for training junk filter: %v (continuing)", err)
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
defer func() {
|
||||
err := f.Close()
|
||||
log.Check(err, "closing file after training junkfilter")
|
||||
}()
|
||||
p, err := m.LoadPart(f)
|
||||
if err != nil {
|
||||
problemf("loading parsed message again for training junk filter: %v (continuing)", err)
|
||||
@ -714,7 +716,8 @@ func importMessages(ctx context.Context, log *mlog.Log, token string, acc *store
|
||||
continue
|
||||
}
|
||||
importFile(f.Name, zf)
|
||||
zf.Close()
|
||||
err = zf.Close()
|
||||
log.Check(err, "closing file from zip")
|
||||
}
|
||||
} else {
|
||||
for {
|
||||
@ -749,8 +752,7 @@ func importMessages(ctx context.Context, log *mlog.Log, token string, acc *store
|
||||
deliveredIDs = nil
|
||||
|
||||
if jf != nil {
|
||||
err := jf.Close()
|
||||
if err != nil {
|
||||
if err := jf.Close(); err != nil {
|
||||
problemf("saving changes of training junk filter: %v (continuing)", err)
|
||||
log.Errorx("saving changes of training junk filter", err)
|
||||
}
|
||||
@ -761,10 +763,8 @@ func importMessages(ctx context.Context, log *mlog.Log, token string, acc *store
|
||||
defer comm.Unregister()
|
||||
comm.Broadcast(changes)
|
||||
acc.Unlock()
|
||||
if err := acc.Close(); err != nil {
|
||||
log.Errorx("closing account after import", err)
|
||||
// Continue
|
||||
}
|
||||
err = acc.Close()
|
||||
log.Check(err, "closing account after import")
|
||||
acc = nil
|
||||
|
||||
sendEvent("done", importDone{})
|
||||
|
@ -60,5 +60,5 @@ func mtastsPolicyHandle(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
w.Header().Set("Content-Type", "text/plain")
|
||||
w.Header().Set("Cache-Control", "no-cache, max-age=0")
|
||||
w.Write([]byte(policy.String()))
|
||||
_, _ = w.Write([]byte(policy.String()))
|
||||
}
|
||||
|
Reference in New Issue
Block a user