diff options
author | 2024-09-27 11:15:53 +0000 | |
---|---|---|
committer | 2024-09-27 13:15:53 +0200 | |
commit | 497ebd8c4e9db9a1351b841cc7fe04c960fb7987 (patch) | |
tree | a729e3e83cc60a85b70ac052b2549c9ffb4e3d7d /internal/processing | |
parent | [chore] final bits of fiddling with solarized (#3364) (diff) | |
download | gotosocial-497ebd8c4e9db9a1351b841cc7fe04c960fb7987.tar.xz |
[bugfix] fix media limit reader check (#3363)
* return nicer errors for frontend when media / emoji upload limit reached
* fix reader limit check
* add code comment
Diffstat (limited to 'internal/processing')
-rw-r--r-- | internal/processing/common/media.go | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/internal/processing/common/media.go b/internal/processing/common/media.go index 7baf30345..7957470cd 100644 --- a/internal/processing/common/media.go +++ b/internal/processing/common/media.go @@ -22,6 +22,7 @@ import ( "errors" "fmt" + "github.com/superseriousbusiness/gotosocial/internal/config" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/media" @@ -51,11 +52,18 @@ func (p *Processor) StoreLocalMedia( // Immediately trigger write to storage. attachment, err := processing.Load(ctx) - if err != nil { - const text = "error processing emoji" + switch { + case gtserror.LimitReached(err): + limit := config.GetMediaLocalMaxSize() + text := fmt.Sprintf("local media size limit reached: %s", limit) + return nil, gtserror.NewErrorUnprocessableEntity(err, text) + + case err != nil: + const text = "error processing media" err := gtserror.Newf("error processing media: %w", err) return nil, gtserror.NewErrorUnprocessableEntity(err, text) - } else if attachment.Type == gtsmodel.FileTypeUnknown { + + case attachment.Type == gtsmodel.FileTypeUnknown: text := fmt.Sprintf("could not process %s type media", attachment.File.ContentType) return nil, gtserror.NewErrorUnprocessableEntity(errors.New(text), text) } @@ -86,9 +94,15 @@ func (p *Processor) StoreLocalEmoji( return nil, gtserror.NewErrorInternalError(err) } - // Immediately write to storage. + // Immediately trigger write to storage. emoji, err := processing.Load(ctx) - if err != nil { + switch { + case gtserror.LimitReached(err): + limit := config.GetMediaEmojiLocalMaxSize() + text := fmt.Sprintf("local emoji size limit reached: %s", limit) + return nil, gtserror.NewErrorUnprocessableEntity(err, text) + + case err != nil: const text = "error processing emoji" err := gtserror.Newf("error processing emoji %s: %w", shortcode, err) return nil, gtserror.NewErrorUnprocessableEntity(err, text) |