Add Tagging for Buckets to Console (#1193)

This commit is contained in:
adfost
2021-11-11 18:36:18 -08:00
committed by GitHub
parent 3638455abb
commit 000071e414
17 changed files with 1319 additions and 10 deletions

View File

@@ -30,6 +30,7 @@ import (
"github.com/minio/mc/pkg/probe"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/sse"
"github.com/minio/minio-go/v7/pkg/tags"
"errors"
@@ -83,6 +84,14 @@ func registerBucketsHandlers(api *operations.ConsoleAPI) {
}
return user_api.NewBucketSetPolicyOK().WithPayload(bucketSetPolicyResp)
})
// set bucket tags
api.UserAPIPutBucketTagsHandler = user_api.PutBucketTagsHandlerFunc(func(params user_api.PutBucketTagsParams, session *models.Principal) middleware.Responder {
err := getPutBucketTagsResponse(session, params.BucketName, params.Body)
if err != nil {
return user_api.NewPutBucketTagsDefault(int(err.Code)).WithPayload(err)
}
return user_api.NewPutBucketTagsOK()
})
// get bucket versioning
api.UserAPIGetBucketVersioningHandler = user_api.GetBucketVersioningHandlerFunc(func(params user_api.GetBucketVersioningParams, session *models.Principal) middleware.Responder {
getBucketVersioning, err := getBucketVersionedResponse(session, params.BucketName)
@@ -521,6 +530,32 @@ func getBucketSetPolicyResponse(session *models.Principal, bucketName string, re
return bucket, nil
}
// putBucketTags sets tags for a bucket
func getPutBucketTagsResponse(session *models.Principal, bucketName string, req *models.PutBucketTagsRequest) *models.Error {
ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
defer cancel()
mClient, err := newMinioClient(session)
if err != nil {
return prepareError(err)
}
// create a minioClient interface implementation
// defining the client to be used
minioClient := minioClient{client: mClient}
newTagSet, err := tags.NewTags(req.Tags, true)
if err != nil {
return prepareError(err)
}
err = minioClient.SetBucketTagging(ctx, bucketName, newTagSet)
if err != nil {
return prepareError(err)
}
return nil
}
// removeBucket deletes a bucket
func removeBucket(client MinioClient, bucketName string) error {
return client.removeBucket(context.Background(), bucketName)
@@ -606,14 +641,28 @@ func getBucketInfo(ctx context.Context, client MinioClient, adminClient MinioAdm
if bucketAccess == models.BucketAccessPRIVATE && policyStr != "" {
bucketAccess = models.BucketAccessCUSTOM
}
bucket := &models.Bucket{
Name: &bucketName,
Access: &bucketAccess,
CreationDate: "", // to be implemented
Size: 0, // to be implemented
AllowedActions: bucketActionsArray,
Manage: bucketAdminRole,
bucketTags, err := client.GetBucketTagging(ctx, bucketName)
var bucket *models.Bucket
if err == nil && bucketTags != nil {
bucket = &models.Bucket{
Name: &bucketName,
Access: &bucketAccess,
CreationDate: "", // to be implemented
Size: 0, // to be implemented
AllowedActions: bucketActionsArray,
Manage: bucketAdminRole,
Details: &models.BucketDetails{Tags: bucketTags.ToMap()},
}
} else {
bucket = &models.Bucket{
Name: &bucketName,
Access: &bucketAccess,
CreationDate: "", // to be implemented
Size: 0, // to be implemented
AllowedActions: bucketActionsArray,
Manage: bucketAdminRole,
Details: &models.BucketDetails{},
}
}
return bucket, nil
}