Skip to content

Commit 36a40c0

Browse files
committed
Fix per-chart limits for form-data based uploads.
* Ensure uploads using form-data utilise server.PutWithLimit * Add tests * Fixes #1050 Signed-off-by: alexberry <alexberry@outlook.com>
1 parent 8795e99 commit 36a40c0

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

pkg/chartmuseum/server/multitenant/handlers.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -445,8 +445,7 @@ func (server *MultiTenantServer) postPackageAndProvenanceRequestHandler(c *gin.C
445445
"filename", ppf.filename,
446446
"field", ppf.field,
447447
)
448-
err := server.StorageBackend.PutObject(pathutil.Join(repo, ppf.filename), ppf.content)
449-
if err == nil {
448+
if err := server.PutWithLimit(&gin.Context{}, log, repo, ppf.filename, ppf.content); err == nil {
450449
storedFiles = append(storedFiles, ppf)
451450
} else {
452451
// Clean up what's already been saved

pkg/chartmuseum/server/multitenant/server_test.go

+31
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,37 @@ func (suite *MultiTenantServerTestSuite) TestPerChartLimit() {
951951
suite.Equal(200, res.Status(), "200 GET /api/charts/mychart-service-0.0.1")
952952
}
953953

954+
func (suite *MultiTenantServerTestSuite) TestPerChartLimitWithFormData() {
955+
ns := "per-chart-limit"
956+
957+
expectUploadFiles := []string{
958+
testServiceTarballPathV0,
959+
testTarballPathV0,
960+
testTarballPathV2,
961+
testTarballPath,
962+
}
963+
964+
for _, f := range expectUploadFiles {
965+
buf, w := suite.getBodyWithMultipartFormFiles([]string{"chart"}, []string{f})
966+
res := suite.doRequest(ns, "POST", "/api/charts", buf, w.FormDataContentType())
967+
suite.Equal(201, res.Status(), "201 POST /api/charts")
968+
}
969+
970+
time.Sleep(time.Second)
971+
972+
res := suite.doRequest(ns, "GET", "/api/charts/mychart/0.2.0", nil, "")
973+
suite.Equal(200, res.Status(), "200 GET /api/charts/mychart-0.2.0")
974+
975+
res = suite.doRequest(ns, "GET", "/api/charts/mychart/0.1.0", nil, "")
976+
suite.Equal(200, res.Status(), "200 GET /api/charts/mychart-0.1.0")
977+
978+
res = suite.doRequest(ns, "GET", "/api/charts/mychart/0.0.1", nil, "")
979+
suite.Equal(404, res.Status(), "200 GET /api/charts/mychart-0.0.1")
980+
981+
res = suite.doRequest(ns, "GET", "/api/charts/mychart-service/0.0.1", nil, "")
982+
suite.Equal(200, res.Status(), "200 GET /api/charts/mychart-service-0.0.1")
983+
}
984+
954985
func (suite *MultiTenantServerTestSuite) TestMaxUploadSizeServer() {
955986
// trigger 413s, "request too large"
956987
content, err := os.ReadFile(testTarballPath)

0 commit comments

Comments
 (0)