Skip to content

Commit f10e813

Browse files
committed
Implementing IsAccessDeniedErr method on the objstore
Signed-off-by: Alan Protasio <[email protected]>
1 parent c042a6a commit f10e813

File tree

18 files changed

+59
-44
lines changed

18 files changed

+59
-44
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,5 @@ We use *breaking :warning:* to mark changes that are not backward compatible (re
3535
- [#35](https://github.com/thanos-io/objstore/pull/35) Azure: Update Azure SDK and fix breaking changes.
3636
- [#65](https://github.com/thanos-io/objstore/pull/65) *: Upgrade minio-go version to `v7.0.61`.
3737
- [#70](https://github.com/thanos-io/objstore/pull/70) GCS: Update cloud.google.com/go/storage version to `v1.27.0`.
38-
38+
- [#71](https://github.com/thanos-io/objstore/pull/71) Replace method `IsCustomerManagedKeyError` for a more generic `IsAccessDeniedErr` on the bucket interface.
3939
### Removed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ type BucketReader interface {
8888
// IsObjNotFoundErr returns true if error means that object is not found. Relevant to Get operations.
8989
IsObjNotFoundErr(err error) bool
9090

91-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
91+
// IsAccessDeniedErr returns true if access to object is denied.
92+
IsAccessDeniedErr(err error) bool
9293
```
9394
9495
Those interfaces represent the object storage operations your code can use from `objstore` clients.

inmem.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ func (b *InMemBucket) IsObjNotFoundErr(err error) bool {
207207
return errors.Is(err, errNotFound)
208208
}
209209

210-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
211-
func (b *InMemBucket) IsCustomerManagedKeyError(_ error) bool {
210+
// IsAccessDeniedErr returns true if access to object is denied.
211+
func (b *InMemBucket) IsAccessDeniedErr(err error) bool {
212212
return false
213213
}
214214

objstore.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ type BucketReader interface {
8585
// IsObjNotFoundErr returns true if error means that object is not found. Relevant to Get operations.
8686
IsObjNotFoundErr(err error) bool
8787

88-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
89-
IsCustomerManagedKeyError(err error) bool
88+
// IsAccessDeniedErr returns true if acces to object is denied.
89+
IsAccessDeniedErr(err error) bool
9090

9191
// Attributes returns information about the specified object.
9292
Attributes(ctx context.Context, name string) (ObjectAttributes, error)
@@ -624,8 +624,8 @@ func (b *metricBucket) IsObjNotFoundErr(err error) bool {
624624
return b.bkt.IsObjNotFoundErr(err)
625625
}
626626

627-
func (b *metricBucket) IsCustomerManagedKeyError(err error) bool {
628-
return b.bkt.IsCustomerManagedKeyError(err)
627+
func (b *metricBucket) IsAccessDeniedErr(err error) bool {
628+
return b.bkt.IsAccessDeniedErr(err)
629629
}
630630

631631
func (b *metricBucket) Close() error {

prefixed_bucket.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ func (p *PrefixedBucket) IsObjNotFoundErr(err error) bool {
7474
return p.bkt.IsObjNotFoundErr(err)
7575
}
7676

77-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
78-
func (p *PrefixedBucket) IsCustomerManagedKeyError(err error) bool {
79-
return p.bkt.IsCustomerManagedKeyError(err)
77+
// IsAccessDeniedErr returns true if access to object is denied.
78+
func (p *PrefixedBucket) IsAccessDeniedErr(err error) bool {
79+
return p.bkt.IsAccessDeniedErr(err)
8080
}
8181

8282
// Attributes returns information about the specified object.

providers/azure/azure.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,12 @@ func (b *Bucket) IsObjNotFoundErr(err error) bool {
235235
return bloberror.HasCode(err, bloberror.BlobNotFound) || bloberror.HasCode(err, bloberror.InvalidURI)
236236
}
237237

238-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
239-
func (b *Bucket) IsCustomerManagedKeyError(_ error) bool {
240-
return false
238+
// IsAccessDeniedErr returns true if access to object is denied.
239+
func (b *Bucket) IsAccessDeniedErr(err error) bool {
240+
if err == nil {
241+
return false
242+
}
243+
return bloberror.HasCode(err, bloberror.AuthorizationPermissionMismatch) || bloberror.HasCode(err, bloberror.InsufficientAccountPermissions)
241244
}
242245

243246
func (b *Bucket) getBlobReader(ctx context.Context, name string, httpRange blob.HTTPRange) (io.ReadCloser, error) {

providers/bos/bos.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,8 +287,8 @@ func (b *Bucket) IsObjNotFoundErr(err error) bool {
287287
return false
288288
}
289289

290-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
291-
func (b *Bucket) IsCustomerManagedKeyError(_ error) bool {
290+
// IsAccessDeniedErr returns true if access to object is denied.
291+
func (b *Bucket) IsAccessDeniedErr(_ error) bool {
292292
return false
293293
}
294294

providers/cos/cos.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,8 +364,8 @@ func (b *Bucket) IsObjNotFoundErr(err error) bool {
364364
}
365365
}
366366

367-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
368-
func (b *Bucket) IsCustomerManagedKeyError(_ error) bool {
367+
// IsAccessDeniedErr returns true if access to object is denied.
368+
func (b *Bucket) IsAccessDeniedErr(_ error) bool {
369369
return false
370370
}
371371

providers/filesystem/filesystem.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,8 @@ func (b *Bucket) IsObjNotFoundErr(err error) bool {
258258
return os.IsNotExist(errors.Cause(err))
259259
}
260260

261-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
262-
func (b *Bucket) IsCustomerManagedKeyError(_ error) bool {
261+
// IsAccessDeniedErr returns true if access to object is denied.
262+
func (b *Bucket) IsAccessDeniedErr(_ error) bool {
263263
return false
264264
}
265265

providers/gcs/gcs.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import (
1919
"golang.org/x/oauth2/google"
2020
"google.golang.org/api/iterator"
2121
"google.golang.org/api/option"
22+
"google.golang.org/grpc/codes"
23+
"google.golang.org/grpc/status"
2224
"gopkg.in/yaml.v2"
2325

2426
"github.com/thanos-io/objstore"
@@ -188,8 +190,11 @@ func (b *Bucket) IsObjNotFoundErr(err error) bool {
188190
return errors.Is(err, storage.ErrObjectNotExist)
189191
}
190192

191-
// IsCustomerManagedKeyError returns true if the permissions for key used to encrypt the object was revoked.
192-
func (b *Bucket) IsCustomerManagedKeyError(_ error) bool {
193+
// IsAccessDeniedErr returns true if access to object is denied.
194+
func (b *Bucket) IsAccessDeniedErr(err error) bool {
195+
if s, ok := status.FromError(err); ok && s.Code() == codes.PermissionDenied {
196+
return true
197+
}
193198
return false
194199
}
195200

0 commit comments

Comments
 (0)