mirror of
https://github.com/minio/minio.git
synced 2025-11-09 05:34:56 -05:00
Now client requests for ACL changes are honored through PutBucketACL API
This commit is contained in:
@@ -61,7 +61,10 @@ func (d donut) SetBucketMetadata(bucket string, bucketMetadata map[string]string
|
||||
if err != nil {
|
||||
return iodine.New(err, nil)
|
||||
}
|
||||
metadata[bucket] = bucketMetadata
|
||||
oldBucketMetadata := metadata[bucket]
|
||||
// TODO ignore rest of the keys for now, only mutable data is "acl"
|
||||
oldBucketMetadata["acl"] = bucketMetadata["acl"]
|
||||
metadata[bucket] = oldBucketMetadata
|
||||
return d.setDonutBucketMetadata(metadata)
|
||||
}
|
||||
|
||||
|
||||
@@ -153,7 +153,14 @@ func (d donutDriver) CreateBucket(bucketName, acl string) error {
|
||||
if strings.TrimSpace(acl) == "" {
|
||||
acl = "private"
|
||||
}
|
||||
return d.donut.MakeBucket(bucketName, acl)
|
||||
if err := d.donut.MakeBucket(bucketName, acl); err != nil {
|
||||
err = iodine.ToError(err)
|
||||
if err.Error() == "bucket exists" {
|
||||
return iodine.New(drivers.BucketExists{Bucket: bucketName}, nil)
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return iodine.New(drivers.BucketNameInvalid{Bucket: bucketName}, nil)
|
||||
}
|
||||
@@ -183,6 +190,23 @@ func (d donutDriver) GetBucketMetadata(bucketName string) (drivers.BucketMetadat
|
||||
return bucketMetadata, nil
|
||||
}
|
||||
|
||||
// SetBucketMetadata sets bucket's metadata
|
||||
func (d donutDriver) SetBucketMetadata(bucketName, acl string) error {
|
||||
if !drivers.IsValidBucket(bucketName) || strings.Contains(bucketName, ".") {
|
||||
return drivers.BucketNameInvalid{Bucket: bucketName}
|
||||
}
|
||||
if strings.TrimSpace(acl) == "" {
|
||||
acl = "private"
|
||||
}
|
||||
bucketMetadata := make(map[string]string)
|
||||
bucketMetadata["acl"] = acl
|
||||
err := d.donut.SetBucketMetadata(bucketName, bucketMetadata)
|
||||
if err != nil {
|
||||
return iodine.New(drivers.BucketNotFound{Bucket: bucketName}, nil)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetObject retrieves an object and writes it to a writer
|
||||
func (d donutDriver) GetObject(target io.Writer, bucketName, objectName string) (int64, error) {
|
||||
if !drivers.IsValidBucket(bucketName) || strings.Contains(bucketName, ".") {
|
||||
|
||||
@@ -30,6 +30,7 @@ type Driver interface {
|
||||
ListBuckets() ([]BucketMetadata, error)
|
||||
CreateBucket(bucket, acl string) error
|
||||
GetBucketMetadata(bucket string) (BucketMetadata, error)
|
||||
SetBucketMetadata(bucket, acl string) error
|
||||
|
||||
// Object Operations
|
||||
GetObject(w io.Writer, bucket, object string) (int64, error)
|
||||
|
||||
@@ -154,6 +154,29 @@ func (memory *memoryDriver) GetBucketMetadata(bucket string) (drivers.BucketMeta
|
||||
return memory.bucketMetadata[bucket].metadata, nil
|
||||
}
|
||||
|
||||
// SetBucketMetadata -
|
||||
func (memory *memoryDriver) SetBucketMetadata(bucket, acl string) error {
|
||||
memory.lock.RLock()
|
||||
if !drivers.IsValidBucket(bucket) {
|
||||
memory.lock.RUnlock()
|
||||
return iodine.New(drivers.BucketNameInvalid{Bucket: bucket}, nil)
|
||||
}
|
||||
if _, ok := memory.bucketMetadata[bucket]; ok == false {
|
||||
memory.lock.RUnlock()
|
||||
return iodine.New(drivers.BucketNotFound{Bucket: bucket}, nil)
|
||||
}
|
||||
if strings.TrimSpace(acl) == "" {
|
||||
acl = "private"
|
||||
}
|
||||
memory.lock.RUnlock()
|
||||
memory.lock.Lock()
|
||||
defer memory.lock.Unlock()
|
||||
storedBucket := memory.bucketMetadata[bucket]
|
||||
storedBucket.metadata.ACL = drivers.BucketACL(acl)
|
||||
memory.bucketMetadata[bucket] = storedBucket
|
||||
return nil
|
||||
}
|
||||
|
||||
// isMD5SumEqual - returns error if md5sum mismatches, success its `nil`
|
||||
func isMD5SumEqual(expectedMD5Sum, actualMD5Sum string) error {
|
||||
if strings.TrimSpace(expectedMD5Sum) != "" && strings.TrimSpace(actualMD5Sum) != "" {
|
||||
|
||||
@@ -44,6 +44,15 @@ func (m *Driver) GetBucketMetadata(bucket string) (drivers.BucketMetadata, error
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// SetBucketMetadata is a mock
|
||||
func (m *Driver) SetBucketMetadata(bucket, acl string) error {
|
||||
ret := m.Called(bucket, acl)
|
||||
|
||||
r0 := ret.Error(0)
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// SetGetObjectWriter is a mock
|
||||
func (m *Driver) SetGetObjectWriter(bucket, object string, data []byte) {
|
||||
m.ObjectWriterData[bucket+":"+object] = data
|
||||
|
||||
Reference in New Issue
Block a user