diff --git a/s3api/controllers/base.go b/s3api/controllers/base.go index d2146f3..e20b81f 100644 --- a/s3api/controllers/base.go +++ b/s3api/controllers/base.go @@ -285,6 +285,8 @@ func SetResponseHeaders(ctx *fiber.Ctx, headers map[string]*string) { if headers == nil { return } + + ctx.Response().Header.DisableNormalizing() for key, val := range headers { if val == nil || *val == "" { continue diff --git a/s3api/controllers/bucket-head.go b/s3api/controllers/bucket-head.go index 9d3d58e..f7e26cf 100644 --- a/s3api/controllers/bucket-head.go +++ b/s3api/controllers/bucket-head.go @@ -63,8 +63,8 @@ func (c S3ApiController) HeadBucket(ctx *fiber.Ctx) (*Response, error) { return &Response{ Headers: map[string]*string{ - "X-Amz-Access-Point-Alias": utils.GetStringPtr("false"), - "X-Amz-Bucket-Region": utils.GetStringPtr(region), + "x-amz-access-point-alias": utils.GetStringPtr("false"), + "x-amz-bucket-region": utils.GetStringPtr(region), }, MetaOpts: &MetaOptions{ BucketOwner: parsedAcl.Owner, diff --git a/s3api/controllers/bucket-head_test.go b/s3api/controllers/bucket-head_test.go index 4b5a6e4..9338691 100644 --- a/s3api/controllers/bucket-head_test.go +++ b/s3api/controllers/bucket-head_test.go @@ -98,8 +98,8 @@ func TestS3ApiController_HeadBucket(t *testing.T) { output: testOutput{ response: &Response{ Headers: map[string]*string{ - "X-Amz-Access-Point-Alias": utils.GetStringPtr("false"), - "X-Amz-Bucket-Region": utils.GetStringPtr(region), + "x-amz-access-point-alias": utils.GetStringPtr("false"), + "x-amz-bucket-region": utils.GetStringPtr(region), }, MetaOpts: &MetaOptions{ BucketOwner: "root", diff --git a/s3api/controllers/object-get.go b/s3api/controllers/object-get.go index 0589b03..dbd7257 100644 --- a/s3api/controllers/object-get.go +++ b/s3api/controllers/object-get.go @@ -81,7 +81,7 @@ func (c S3ApiController) GetObjectTagging(ctx *fiber.Ctx) (*Response, error) { MetaOpts: &MetaOptions{ BucketOwner: parsedAcl.Owner, }, - }, err + }, nil } func (c S3ApiController) GetObjectRetention(ctx *fiber.Ctx) (*Response, error) { diff --git a/s3api/controllers/object-head.go b/s3api/controllers/object-head.go index 5dd5fd4..a9be6b3 100644 --- a/s3api/controllers/object-head.go +++ b/s3api/controllers/object-head.go @@ -126,30 +126,30 @@ func (c S3ApiController) HeadObject(ctx *fiber.Ctx) (*Response, error) { return &Response{ Headers: map[string]*string{ - "ETag": res.ETag, - "x-amz-restore": res.Restore, - "accept-ranges": res.AcceptRanges, "Content-Range": res.ContentRange, "Content-Disposition": res.ContentDisposition, "Content-Encoding": res.ContentEncoding, "Content-Language": res.ContentLanguage, "Cache-Control": res.CacheControl, + "Content-Length": utils.ConvertPtrToStringPtr(res.ContentLength), + "Content-Type": res.ContentType, "Expires": res.ExpiresString, + "ETag": res.ETag, + "Last-Modified": utils.FormatDatePtrToString(res.LastModified, timefmt), + "x-amz-restore": res.Restore, + "accept-ranges": res.AcceptRanges, "x-amz-checksum-crc32": res.ChecksumCRC32, "x-amz-checksum-crc64nvme": res.ChecksumCRC64NVME, "x-amz-checksum-crc32c": res.ChecksumCRC32C, "x-amz-checksum-sha1": res.ChecksumSHA1, "x-amz-checksum-sha256": res.ChecksumSHA256, - "Content-Type": res.ContentType, "x-amz-version-id": res.VersionId, - "Content-Length": utils.ConvertPtrToStringPtr(res.ContentLength), "x-amz-mp-parts-count": utils.ConvertPtrToStringPtr(res.PartsCount), "x-amz-object-lock-mode": utils.ConvertToStringPtr(res.ObjectLockMode), "x-amz-object-lock-legal-hold": utils.ConvertToStringPtr(res.ObjectLockLegalHoldStatus), "x-amz-storage-class": utils.ConvertToStringPtr(res.StorageClass), "x-amz-checksum-type": utils.ConvertToStringPtr(res.ChecksumType), "x-amz-object-lock-retain-until-date": utils.FormatDatePtrToString(res.ObjectLockRetainUntilDate, time.RFC3339), - "Last-Modified": utils.FormatDatePtrToString(res.LastModified, timefmt), }, MetaOpts: &MetaOptions{ BucketOwner: parsedAcl.Owner, diff --git a/s3api/utils/utils.go b/s3api/utils/utils.go index 589e253..9b2072d 100644 --- a/s3api/utils/utils.go +++ b/s3api/utils/utils.go @@ -177,7 +177,7 @@ func createPresignedHttpRequestFromCtx(ctx *fiber.Ctx, signedHdrs []string, cont func SetMetaHeaders(ctx *fiber.Ctx, meta map[string]string) { ctx.Response().Header.DisableNormalizing() for key, val := range meta { - ctx.Response().Header.Set(fmt.Sprintf("X-Amz-Meta-%s", key), val) + ctx.Response().Header.Set(fmt.Sprintf("x-amz-meta-%s", key), val) } ctx.Response().Header.EnableNormalizing() }