aboutsummaryrefslogtreecommitdiff
path: root/mediaapi
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-05-02 10:47:16 +0200
committerGitHub <noreply@github.com>2022-05-02 10:47:16 +0200
commit979a551f1e2aeb9f3417df5e52a7279230b7a3ba (patch)
tree69815c9823d0c58ceec1cf3dbbb56a1ce484660e /mediaapi
parentbfa344e83191c49bdc9917ab7a8ec31b93c202e9 (diff)
Return `null` if MaxFileSizeBytes is 0 (#2409)
* Return "null" if MaxFileSizeBytes is 0 * Add comment and nil check (better save than sorry) * Simplify config
Diffstat (limited to 'mediaapi')
-rw-r--r--mediaapi/routing/download.go2
-rw-r--r--mediaapi/routing/routing.go8
-rw-r--r--mediaapi/routing/upload.go18
-rw-r--r--mediaapi/routing/upload_test.go5
4 files changed, 18 insertions, 15 deletions
diff --git a/mediaapi/routing/download.go b/mediaapi/routing/download.go
index 5f22a946..10b25a5c 100644
--- a/mediaapi/routing/download.go
+++ b/mediaapi/routing/download.go
@@ -551,7 +551,7 @@ func (r *downloadRequest) getRemoteFile(
// If we do not have a record, we need to fetch the remote file first and then respond from the local file
err := r.fetchRemoteFileAndStoreMetadata(
ctx, client,
- cfg.AbsBasePath, *cfg.MaxFileSizeBytes, db,
+ cfg.AbsBasePath, cfg.MaxFileSizeBytes, db,
cfg.ThumbnailSizes, activeThumbnailGeneration,
cfg.MaxThumbnailGenerators,
)
diff --git a/mediaapi/routing/routing.go b/mediaapi/routing/routing.go
index 0e158399..97dfd334 100644
--- a/mediaapi/routing/routing.go
+++ b/mediaapi/routing/routing.go
@@ -35,7 +35,7 @@ import (
// configResponse is the response to GET /_matrix/media/r0/config
// https://matrix.org/docs/spec/client_server/latest#get-matrix-media-r0-config
type configResponse struct {
- UploadSize config.FileSizeBytes `json:"m.upload.size"`
+ UploadSize *config.FileSizeBytes `json:"m.upload.size"`
}
// Setup registers the media API HTTP handlers
@@ -73,9 +73,13 @@ func Setup(
if r := rateLimits.Limit(req); r != nil {
return *r
}
+ respondSize := &cfg.MaxFileSizeBytes
+ if cfg.MaxFileSizeBytes == 0 {
+ respondSize = nil
+ }
return util.JSONResponse{
Code: http.StatusOK,
- JSON: configResponse{UploadSize: *cfg.MaxFileSizeBytes},
+ JSON: configResponse{UploadSize: respondSize},
}
})
diff --git a/mediaapi/routing/upload.go b/mediaapi/routing/upload.go
index 972c52af..2175648e 100644
--- a/mediaapi/routing/upload.go
+++ b/mediaapi/routing/upload.go
@@ -90,7 +90,7 @@ func parseAndValidateRequest(req *http.Request, cfg *config.MediaAPI, dev *usera
Logger: util.GetLogger(req.Context()).WithField("Origin", cfg.Matrix.ServerName),
}
- if resErr := r.Validate(*cfg.MaxFileSizeBytes); resErr != nil {
+ if resErr := r.Validate(cfg.MaxFileSizeBytes); resErr != nil {
return nil, resErr
}
@@ -148,20 +148,20 @@ func (r *uploadRequest) doUpload(
// r.storeFileAndMetadata(ctx, tmpDir, ...)
// before you return from doUpload else we will leak a temp file. We could make this nicer with a `WithTransaction` style of
// nested function to guarantee either storage or cleanup.
- if *cfg.MaxFileSizeBytes > 0 {
- if *cfg.MaxFileSizeBytes+1 <= 0 {
+ if cfg.MaxFileSizeBytes > 0 {
+ if cfg.MaxFileSizeBytes+1 <= 0 {
r.Logger.WithFields(log.Fields{
- "MaxFileSizeBytes": *cfg.MaxFileSizeBytes,
+ "MaxFileSizeBytes": cfg.MaxFileSizeBytes,
}).Warnf("Configured MaxFileSizeBytes overflows int64, defaulting to %d bytes", config.DefaultMaxFileSizeBytes)
- cfg.MaxFileSizeBytes = &config.DefaultMaxFileSizeBytes
+ cfg.MaxFileSizeBytes = config.DefaultMaxFileSizeBytes
}
- reqReader = io.LimitReader(reqReader, int64(*cfg.MaxFileSizeBytes)+1)
+ reqReader = io.LimitReader(reqReader, int64(cfg.MaxFileSizeBytes)+1)
}
hash, bytesWritten, tmpDir, err := fileutils.WriteTempFile(ctx, reqReader, cfg.AbsBasePath)
if err != nil {
r.Logger.WithError(err).WithFields(log.Fields{
- "MaxFileSizeBytes": *cfg.MaxFileSizeBytes,
+ "MaxFileSizeBytes": cfg.MaxFileSizeBytes,
}).Warn("Error while transferring file")
return &util.JSONResponse{
Code: http.StatusBadRequest,
@@ -170,9 +170,9 @@ func (r *uploadRequest) doUpload(
}
// Check if temp file size exceeds max file size configuration
- if *cfg.MaxFileSizeBytes > 0 && bytesWritten > types.FileSizeBytes(*cfg.MaxFileSizeBytes) {
+ if cfg.MaxFileSizeBytes > 0 && bytesWritten > types.FileSizeBytes(cfg.MaxFileSizeBytes) {
fileutils.RemoveDir(tmpDir, r.Logger) // delete temp file
- return requestEntityTooLargeJSONResponse(*cfg.MaxFileSizeBytes)
+ return requestEntityTooLargeJSONResponse(cfg.MaxFileSizeBytes)
}
// Look up the media by the file hash. If we already have the file but under a
diff --git a/mediaapi/routing/upload_test.go b/mediaapi/routing/upload_test.go
index b2c2f5a4..e04c010f 100644
--- a/mediaapi/routing/upload_test.go
+++ b/mediaapi/routing/upload_test.go
@@ -36,12 +36,11 @@ func Test_uploadRequest_doUpload(t *testing.T) {
}
maxSize := config.FileSizeBytes(8)
- unlimitedSize := config.FileSizeBytes(0)
logger := log.New().WithField("mediaapi", "test")
testdataPath := filepath.Join(wd, "./testdata")
cfg := &config.MediaAPI{
- MaxFileSizeBytes: &maxSize,
+ MaxFileSizeBytes: maxSize,
BasePath: config.Path(testdataPath),
AbsBasePath: config.Path(testdataPath),
DynamicThumbnails: false,
@@ -124,7 +123,7 @@ func Test_uploadRequest_doUpload(t *testing.T) {
ctx: context.Background(),
reqReader: strings.NewReader("test test test"),
cfg: &config.MediaAPI{
- MaxFileSizeBytes: &unlimitedSize,
+ MaxFileSizeBytes: config.FileSizeBytes(0),
BasePath: config.Path(testdataPath),
AbsBasePath: config.Path(testdataPath),
DynamicThumbnails: false,