From f0005a004785da2d679841bd99b0956fcdf2c3a3 Mon Sep 17 00:00:00 2001 From: Ben McClelland Date: Tue, 11 Jun 2024 12:46:46 -0700 Subject: [PATCH] fix: restore object request handler and scoutfs glacier enable The restore object api request handler was incorrectly trying to unmarshal the request body, but for the stadnard (all?) case the request body is emtpy. We only need the bucket and opbject params for now. This also adds a fix to actually honor the enable glacier mode in scoutfs. --- backend/scoutfs/scoutfs_compat.go | 13 +++++++------ s3api/controllers/base.go | 23 +++++------------------ s3api/controllers/base_test.go | 11 +---------- 3 files changed, 13 insertions(+), 34 deletions(-) diff --git a/backend/scoutfs/scoutfs_compat.go b/backend/scoutfs/scoutfs_compat.go index 48fc9f1..fdd15c2 100644 --- a/backend/scoutfs/scoutfs_compat.go +++ b/backend/scoutfs/scoutfs_compat.go @@ -50,12 +50,13 @@ func New(rootdir string, opts ScoutfsOpts) (*ScoutFS, error) { } return &ScoutFS{ - Posix: p, - rootfd: f, - rootdir: rootdir, - meta: metastore, - chownuid: opts.ChownUID, - chowngid: opts.ChownGID, + Posix: p, + rootfd: f, + rootdir: rootdir, + meta: metastore, + chownuid: opts.ChownUID, + chowngid: opts.ChownGID, + glaciermode: opts.GlacierMode, }, nil } diff --git a/s3api/controllers/base.go b/s3api/controllers/base.go index 1887eba..361b178 100644 --- a/s3api/controllers/base.go +++ b/s3api/controllers/base.go @@ -2548,23 +2548,8 @@ func (c S3ApiController) CreateActions(ctx *fiber.Ctx) error { key = key + "/" } - var restoreRequest s3.RestoreObjectInput if ctx.Request().URI().QueryArgs().Has("restore") { - err := xml.Unmarshal(ctx.Body(), &restoreRequest) - if err != nil { - if c.debug { - log.Printf("error unmarshalling restore object: %v", err) - } - return SendResponse(ctx, err, - &MetaOpts{ - Logger: c.logger, - MetricsMng: c.mm, - Action: metrics.ActionRestoreObject, - BucketOwner: parsedAcl.Owner, - }) - } - - err = auth.VerifyAccess(ctx.Context(), c.be, + err := auth.VerifyAccess(ctx.Context(), c.be, auth.AccessOptions{ Readonly: c.readonly, Acl: parsedAcl, @@ -2585,8 +2570,10 @@ func (c S3ApiController) CreateActions(ctx *fiber.Ctx) error { }) } - restoreRequest.Bucket = &bucket - restoreRequest.Key = &key + restoreRequest := s3.RestoreObjectInput{ + Bucket: &bucket, + Key: &key, + } err = c.be.RestoreObject(ctx.Context(), &restoreRequest) return SendResponse(ctx, err, diff --git a/s3api/controllers/base_test.go b/s3api/controllers/base_test.go index 5a40ef5..74a994f 100644 --- a/s3api/controllers/base_test.go +++ b/s3api/controllers/base_test.go @@ -1646,20 +1646,11 @@ func TestS3ApiController_CreateActions(t *testing.T) { { name: "Restore-object-success", app: app, - args: args{ - req: httptest.NewRequest(http.MethodPost, "/my-bucket/my-key?restore", strings.NewReader(`body`)), - }, - wantErr: false, - statusCode: 200, - }, - { - name: "Restore-object-error", - app: app, args: args{ req: httptest.NewRequest(http.MethodPost, "/my-bucket/my-key?restore", nil), }, wantErr: false, - statusCode: 500, + statusCode: 200, }, { name: "Select-object-content-invalid-body",