Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
parent
3212724aae
commit
91cc358fc5
|
@ -23,7 +23,7 @@ func Error(c *gin.Context, code int, err error, id i18n.Message, params ...inter
|
|||
|
||||
if err != nil {
|
||||
resp.Details = err.Error()
|
||||
log.Errorf("api-v1: error %s with code %d in %s (%s)", clean.LogError(err), code, clean.Log(c.FullPath()), strings.ToLower(resp.String()))
|
||||
log.Errorf("api-v1: error %s with code %d in %s (%s)", clean.Error(err), code, clean.Log(c.FullPath()), strings.ToLower(resp.String()))
|
||||
}
|
||||
|
||||
c.AbortWithStatusJSON(code, resp)
|
||||
|
|
|
@ -180,7 +180,7 @@ func (imp *Import) Start(opt ImportOptions) fs.Done {
|
|||
|
||||
// Create JSON sidecar file, if needed.
|
||||
if err = mf.CreateExifToolJson(imp.convert); err != nil {
|
||||
log.Errorf("import: %s", clean.LogError(err), clean.Log(mf.BaseName()))
|
||||
log.Errorf("import: %s", clean.Error(err), clean.Log(mf.BaseName()))
|
||||
}
|
||||
|
||||
// Find related files to import.
|
||||
|
|
|
@ -220,7 +220,7 @@ func ImportWorker(jobs <-chan ImportJob) {
|
|||
// Extract metadata to a JSON file with Exiftool.
|
||||
if f.NeedsExifToolJson() {
|
||||
if jsonName, err := imp.convert.ToJson(f, false); err != nil {
|
||||
log.Tracef("exiftool: %s", clean.LogError(err))
|
||||
log.Tracef("exiftool: %s", clean.Error(err))
|
||||
log.Debugf("exiftool: failed parsing %s", clean.Log(f.RootRelName()))
|
||||
} else {
|
||||
log.Debugf("import: created %s", filepath.Base(jsonName))
|
||||
|
|
|
@ -221,7 +221,7 @@ func (ind *Index) Start(o IndexOptions) (found fs.Done, updated int) {
|
|||
|
||||
// Create JSON sidecar file, if needed.
|
||||
if err = mf.CreateExifToolJson(ind.convert); err != nil {
|
||||
log.Errorf("index: %s", clean.LogError(err), clean.Log(mf.BaseName()))
|
||||
log.Errorf("index: %s", clean.Error(err), clean.Log(mf.BaseName()))
|
||||
}
|
||||
|
||||
// Find related files to index.
|
||||
|
|
|
@ -58,10 +58,10 @@ func (m *MediaFile) CreateExifToolJson(convert *Convert) error {
|
|||
if !m.NeedsExifToolJson() {
|
||||
return nil
|
||||
} else if jsonName, err := convert.ToJson(m, false); err != nil {
|
||||
log.Tracef("exiftool: %s", clean.LogError(err))
|
||||
log.Tracef("exiftool: %s", clean.Error(err))
|
||||
log.Debugf("exiftool: failed parsing %s", clean.Log(m.RootRelName()))
|
||||
} else if err = m.metaData.JSON(jsonName, ""); err != nil {
|
||||
return fmt.Errorf("%s in %s (read json sidecar)", clean.LogError(err), clean.Log(m.BaseName()))
|
||||
return fmt.Errorf("%s in %s (read json sidecar)", clean.Error(err), clean.Log(m.BaseName()))
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
@ -221,7 +221,7 @@ func (c *Client) Upload(src, dest string) (err error) {
|
|||
f, err := os.OpenFile(src, os.O_RDONLY, 0)
|
||||
|
||||
if err != nil {
|
||||
log.Errorf("webdav: %s", clean.LogError(err))
|
||||
log.Errorf("webdav: %s", clean.Error(err))
|
||||
return fmt.Errorf("webdav: failed to read %s", clean.Log(path.Base(src)))
|
||||
}
|
||||
|
||||
|
@ -232,14 +232,14 @@ func (c *Client) Upload(src, dest string) (err error) {
|
|||
writer, err = c.client.Create(dest)
|
||||
|
||||
if err != nil {
|
||||
log.Errorf("webdav: %s", clean.LogError(err))
|
||||
log.Errorf("webdav: %s", clean.Error(err))
|
||||
return fmt.Errorf("webdav: failed to write %s", clean.Log(dest))
|
||||
}
|
||||
|
||||
defer writer.Close()
|
||||
|
||||
if _, err = io.Copy(writer, f); err != nil {
|
||||
log.Errorf("webdav: %s", clean.LogError(err))
|
||||
log.Errorf("webdav: %s", clean.Error(err))
|
||||
return fmt.Errorf("webdav: failed to upload %s", clean.Log(dest))
|
||||
}
|
||||
|
||||
|
@ -281,7 +281,7 @@ func (c *Client) Download(src, dest string, force bool) (err error) {
|
|||
|
||||
// Error?
|
||||
if err != nil {
|
||||
log.Errorf("webdav: %s", clean.LogError(err))
|
||||
log.Errorf("webdav: %s", clean.Error(err))
|
||||
return fmt.Errorf("webdav: failed to download %s", clean.Log(src))
|
||||
}
|
||||
|
||||
|
@ -290,14 +290,14 @@ func (c *Client) Download(src, dest string, force bool) (err error) {
|
|||
f, err := os.OpenFile(dest, os.O_TRUNC|os.O_RDWR|os.O_CREATE, fs.ModeFile)
|
||||
|
||||
if err != nil {
|
||||
log.Errorf("webdav: %s", clean.LogError(err))
|
||||
log.Errorf("webdav: %s", clean.Error(err))
|
||||
return fmt.Errorf("webdav: failed to create %s", clean.Log(path.Base(dest)))
|
||||
}
|
||||
|
||||
defer f.Close()
|
||||
|
||||
if _, err = f.ReadFrom(reader); err != nil {
|
||||
log.Errorf("webdav: %s", clean.LogError(err))
|
||||
log.Errorf("webdav: %s", clean.Error(err))
|
||||
return fmt.Errorf("webdav: failed writing to %s", clean.Log(path.Base(dest)))
|
||||
}
|
||||
|
||||
|
|
|
@ -65,11 +65,11 @@ func WebDAV(filePath string, router *gin.RouterGroup, conf *config.Config) {
|
|||
if err != nil {
|
||||
switch r.Method {
|
||||
case MethodPut, MethodPost, MethodPatch, MethodDelete, MethodCopy, MethodMove:
|
||||
log.Errorf("webdav: %s in %s %s", clean.LogError(err), clean.Log(r.Method), clean.Log(r.URL.String()))
|
||||
log.Errorf("webdav: %s in %s %s", clean.Error(err), clean.Log(r.Method), clean.Log(r.URL.String()))
|
||||
case MethodPropfind:
|
||||
log.Tracef("webdav: %s in %s %s", clean.LogError(err), clean.Log(r.Method), clean.Log(r.URL.String()))
|
||||
log.Tracef("webdav: %s in %s %s", clean.Error(err), clean.Log(r.Method), clean.Log(r.URL.String()))
|
||||
default:
|
||||
log.Debugf("webdav: %s in %s %s", clean.LogError(err), clean.Log(r.Method), clean.Log(r.URL.String()))
|
||||
log.Debugf("webdav: %s in %s %s", clean.Error(err), clean.Log(r.Method), clean.Log(r.URL.String()))
|
||||
}
|
||||
} else {
|
||||
// Mark uploaded files as favorite if X-Favorite HTTP header is "1".
|
||||
|
|
14
pkg/clean/error.go
Normal file
14
pkg/clean/error.go
Normal file
|
@ -0,0 +1,14 @@
|
|||
package clean
|
||||
|
||||
import "strings"
|
||||
|
||||
// Error sanitizes an error message so that it can be safely logged or displayed.
|
||||
func Error(err error) string {
|
||||
if err == nil {
|
||||
return "no error"
|
||||
} else if s := strings.TrimSpace(err.Error()); s == "" {
|
||||
return "unknown error"
|
||||
} else {
|
||||
return Log(s)
|
||||
}
|
||||
}
|
26
pkg/clean/error_test.go
Normal file
26
pkg/clean/error_test.go
Normal file
|
@ -0,0 +1,26 @@
|
|||
package clean
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestLogError(t *testing.T) {
|
||||
t.Run("Nil", func(t *testing.T) {
|
||||
assert.Equal(t, "no error", Error(nil))
|
||||
})
|
||||
t.Run("Empty", func(t *testing.T) {
|
||||
assert.Equal(t, "unknown error", Error(errors.New("")))
|
||||
})
|
||||
t.Run("Simple", func(t *testing.T) {
|
||||
assert.Equal(t, "simple", Error(errors.New("simple")))
|
||||
})
|
||||
t.Run("Spaces", func(t *testing.T) {
|
||||
assert.Equal(t, "'the quick brown fox'", Error(errors.New("the quick brown fox")))
|
||||
})
|
||||
t.Run("Invalid", func(t *testing.T) {
|
||||
assert.Equal(t, "?", Error(errors.New("${https://<host>:<port>/<path>}")))
|
||||
})
|
||||
}
|
|
@ -42,17 +42,6 @@ func Log(s string) string {
|
|||
return s
|
||||
}
|
||||
|
||||
// LogError sanitizes an error message for use in logging.
|
||||
func LogError(err error) string {
|
||||
if err == nil {
|
||||
return "no error"
|
||||
} else if s := strings.TrimSpace(err.Error()); s == "" {
|
||||
return "unknown error"
|
||||
} else {
|
||||
return Log(s)
|
||||
}
|
||||
}
|
||||
|
||||
// LogQuote sanitizes a string and puts it in single quotes for logging.
|
||||
func LogQuote(s string) string {
|
||||
if s = Log(s); s[0] != '\'' {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package clean
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
@ -28,24 +27,6 @@ func TestLog(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestLogError(t *testing.T) {
|
||||
t.Run("Nil", func(t *testing.T) {
|
||||
assert.Equal(t, "no error", LogError(nil))
|
||||
})
|
||||
t.Run("Empty", func(t *testing.T) {
|
||||
assert.Equal(t, "unknown error", LogError(errors.New("")))
|
||||
})
|
||||
t.Run("Simple", func(t *testing.T) {
|
||||
assert.Equal(t, "simple", LogError(errors.New("simple")))
|
||||
})
|
||||
t.Run("Spaces", func(t *testing.T) {
|
||||
assert.Equal(t, "'the quick brown fox'", LogError(errors.New("the quick brown fox")))
|
||||
})
|
||||
t.Run("Invalid", func(t *testing.T) {
|
||||
assert.Equal(t, "?", LogError(errors.New("${https://<host>:<port>/<path>}")))
|
||||
})
|
||||
}
|
||||
|
||||
func TestLogQuote(t *testing.T) {
|
||||
t.Run("The quick brown fox.", func(t *testing.T) {
|
||||
assert.Equal(t, "'The quick brown fox.'", LogQuote("The quick brown fox."))
|
||||
|
|
Loading…
Reference in a new issue