From c73281d8f534494de045b13cc62d36b0251b5b27 Mon Sep 17 00:00:00 2001 From: jonaustin09 Date: Fri, 14 Jun 2024 14:05:56 -0400 Subject: [PATCH] fix: Changed ListBuckets action implementation to return all the buckets for admin users and only the ones only the requester for regular users --- backend/azure/azure.go | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/backend/azure/azure.go b/backend/azure/azure.go index 761dfd06..bedbffe9 100644 --- a/backend/azure/azure.go +++ b/backend/azure/azure.go @@ -36,6 +36,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blockblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/service" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/aws-sdk-go-v2/service/s3/types" "github.com/versity/versitygw/auth" @@ -176,7 +177,12 @@ func (az *Azure) CreateBucket(ctx context.Context, input *s3.CreateBucketInput, } func (az *Azure) ListBuckets(ctx context.Context, owner string, isAdmin bool) (s3response.ListAllMyBucketsResult, error) { - pager := az.client.NewListContainersPager(nil) + pager := az.client.NewListContainersPager( + &service.ListContainersOptions{ + Include: service.ListContainersInclude{ + Metadata: true, + }, + }) var buckets []s3response.ListAllMyBucketsEntry var result s3response.ListAllMyBucketsResult @@ -187,11 +193,26 @@ func (az *Azure) ListBuckets(ctx context.Context, owner string, isAdmin bool) (s return result, azureErrToS3Err(err) } for _, v := range resp.ContainerItems { - buckets = append(buckets, s3response.ListAllMyBucketsEntry{ - Name: *v.Name, - // TODO: using modification date here instead of creation, is that ok? - CreationDate: *v.Properties.LastModified, - }) + if isAdmin { + buckets = append(buckets, s3response.ListAllMyBucketsEntry{ + Name: *v.Name, + // TODO: using modification date here instead of creation, is that ok? + CreationDate: *v.Properties.LastModified, + }) + } else { + acl, err := getAclFromMetadata(v.Metadata, keyAclLower) + if err != nil { + return result, err + } + + if acl.Owner == owner { + buckets = append(buckets, s3response.ListAllMyBucketsEntry{ + Name: *v.Name, + // TODO: using modification date here instead of creation, is that ok? + CreationDate: *v.Properties.LastModified, + }) + } + } } }