diff --git a/s3api/controllers/base.go b/s3api/controllers/base.go index 0f23156..7bef1bc 100644 --- a/s3api/controllers/base.go +++ b/s3api/controllers/base.go @@ -1844,6 +1844,7 @@ func (c S3ApiController) HeadBucket(ctx *fiber.Ctx) error { bucket := ctx.Params("bucket") acct := ctx.Locals("account").(auth.Account) isRoot := ctx.Locals("isRoot").(bool) + region := ctx.Locals("region").(string) parsedAcl := ctx.Locals("parsedAcl").(auth.ACL) err := auth.VerifyAccess(ctx.Context(), c.be, @@ -1868,7 +1869,17 @@ func (c S3ApiController) HeadBucket(ctx *fiber.Ctx) error { &s3.HeadBucketInput{ Bucket: &bucket, }) - // TODO: set bucket response headers + + utils.SetResponseHeaders(ctx, []utils.CustomHeader{ + { + Key: "X-Amz-Access-Point-Alias", + Value: "false", + }, + { + Key: "X-Amz-Bucket-Region", + Value: region, + }, + }) return SendResponse(ctx, err, &MetaOpts{ Logger: c.logger, diff --git a/s3api/controllers/base_test.go b/s3api/controllers/base_test.go index 2b677ad..f34e865 100644 --- a/s3api/controllers/base_test.go +++ b/s3api/controllers/base_test.go @@ -1285,6 +1285,7 @@ func TestS3ApiController_HeadBucket(t *testing.T) { ctx.Locals("isRoot", true) ctx.Locals("isDebug", false) ctx.Locals("parsedAcl", auth.ACL{}) + ctx.Locals("region", "us-east-1") return ctx.Next() }) @@ -1308,6 +1309,7 @@ func TestS3ApiController_HeadBucket(t *testing.T) { ctx.Locals("isRoot", true) ctx.Locals("isDebug", false) ctx.Locals("parsedAcl", auth.ACL{}) + ctx.Locals("region", "us-east-1") return ctx.Next() }) diff --git a/tests/integration/tests.go b/tests/integration/tests.go index 5591fef..f1b9410 100644 --- a/tests/integration/tests.go +++ b/tests/integration/tests.go @@ -1809,13 +1809,21 @@ func HeadBucket_success(s *S3Conf) error { testName := "HeadBucket_success" return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) - _, err := s3client.HeadBucket(ctx, &s3.HeadBucketInput{ + resp, err := s3client.HeadBucket(ctx, &s3.HeadBucketInput{ Bucket: &bucket, }) cancel() if err != nil { return err } + + if resp.AccessPointAlias != nil && *resp.AccessPointAlias { + return fmt.Errorf("expected bucket access point alias to be false") + } + if *resp.BucketRegion != s.awsRegion { + return fmt.Errorf("expected bucket region to be %v, instead got %v", s.awsRegion, *resp.BucketRegion) + } + return nil }) }