forked from TrueCloudLab/frostfs-s3-gw
[#507] Add routing for public access block operations
Signed-off-by: Marina Biryukova <m.biryukova@yadro.com>
This commit is contained in:
parent
582e6ac642
commit
dbd0bc2252
6 changed files with 92 additions and 28 deletions
|
@ -10,3 +10,15 @@ import (
|
||||||
func (h *handler) DeleteBucketEncryptionHandler(w http.ResponseWriter, r *http.Request) {
|
func (h *handler) DeleteBucketEncryptionHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
h.logAndSendError(w, "not supported", middleware.GetReqInfo(r.Context()), errors.GetAPIError(errors.ErrNotSupported))
|
h.logAndSendError(w, "not supported", middleware.GetReqInfo(r.Context()), errors.GetAPIError(errors.ErrNotSupported))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *handler) DeletePublicAccessBlockHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
h.logAndSendError(w, "not supported", middleware.GetReqInfo(r.Context()), errors.GetAPIError(errors.ErrNotSupported))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handler) GetPublicAccessBlockHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
h.logAndSendError(w, "not supported", middleware.GetReqInfo(r.Context()), errors.GetAPIError(errors.ErrNotSupported))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handler) PutPublicAccessBlockHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
h.logAndSendError(w, "not supported", middleware.GetReqInfo(r.Context()), errors.GetAPIError(errors.ErrNotSupported))
|
||||||
|
}
|
||||||
|
|
|
@ -48,6 +48,9 @@ const (
|
||||||
DeleteBucketLifecycleOperation = "DeleteBucketLifecycle"
|
DeleteBucketLifecycleOperation = "DeleteBucketLifecycle"
|
||||||
DeleteBucketEncryptionOperation = "DeleteBucketEncryption"
|
DeleteBucketEncryptionOperation = "DeleteBucketEncryption"
|
||||||
DeleteBucketOperation = "DeleteBucket"
|
DeleteBucketOperation = "DeleteBucket"
|
||||||
|
DeletePublicAccessBlockOperation = "DeletePublicAccessBlock"
|
||||||
|
GetPublicAccessBlockOperation = "GetPublicAccessBlock"
|
||||||
|
PutPublicAccessBlockOperation = "PutPublicAccessBlock"
|
||||||
|
|
||||||
// object operations.
|
// object operations.
|
||||||
|
|
||||||
|
@ -78,34 +81,35 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
UploadsQuery = "uploads"
|
UploadsQuery = "uploads"
|
||||||
LocationQuery = "location"
|
LocationQuery = "location"
|
||||||
PolicyStatusQuery = "policyStatus"
|
PolicyStatusQuery = "policyStatus"
|
||||||
PolicyQuery = "policy"
|
PolicyQuery = "policy"
|
||||||
LifecycleQuery = "lifecycle"
|
LifecycleQuery = "lifecycle"
|
||||||
EncryptionQuery = "encryption"
|
EncryptionQuery = "encryption"
|
||||||
CorsQuery = "cors"
|
CorsQuery = "cors"
|
||||||
ACLQuery = "acl"
|
ACLQuery = "acl"
|
||||||
WebsiteQuery = "website"
|
WebsiteQuery = "website"
|
||||||
AccelerateQuery = "accelerate"
|
AccelerateQuery = "accelerate"
|
||||||
RequestPaymentQuery = "requestPayment"
|
RequestPaymentQuery = "requestPayment"
|
||||||
LoggingQuery = "logging"
|
LoggingQuery = "logging"
|
||||||
ReplicationQuery = "replication"
|
ReplicationQuery = "replication"
|
||||||
TaggingQuery = "tagging"
|
TaggingQuery = "tagging"
|
||||||
ObjectLockQuery = "object-lock"
|
ObjectLockQuery = "object-lock"
|
||||||
VersioningQuery = "versioning"
|
VersioningQuery = "versioning"
|
||||||
NotificationQuery = "notification"
|
NotificationQuery = "notification"
|
||||||
EventsQuery = "events"
|
EventsQuery = "events"
|
||||||
VersionsQuery = "versions"
|
VersionsQuery = "versions"
|
||||||
ListTypeQuery = "list-type"
|
ListTypeQuery = "list-type"
|
||||||
MetadataQuery = "metadata"
|
MetadataQuery = "metadata"
|
||||||
DeleteQuery = "delete"
|
DeleteQuery = "delete"
|
||||||
UploadIDQuery = "uploadId"
|
UploadIDQuery = "uploadId"
|
||||||
RetentionQuery = "retention"
|
RetentionQuery = "retention"
|
||||||
LegalQuery = "legal"
|
LegalQuery = "legal"
|
||||||
AttributesQuery = "attributes"
|
AttributesQuery = "attributes"
|
||||||
PartNumberQuery = "partNumber"
|
PartNumberQuery = "partNumber"
|
||||||
LegalHoldQuery = "legal-hold"
|
LegalHoldQuery = "legal-hold"
|
||||||
|
PublicAccessBlockQuery = "publicAccessBlock"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -269,6 +269,8 @@ func determineBucketOperation(r *http.Request) string {
|
||||||
return ListObjectsV2MOperation
|
return ListObjectsV2MOperation
|
||||||
case query.Get(ListTypeQuery) == "2":
|
case query.Get(ListTypeQuery) == "2":
|
||||||
return ListObjectsV2Operation
|
return ListObjectsV2Operation
|
||||||
|
case query.Has(PublicAccessBlockQuery):
|
||||||
|
return GetPublicAccessBlockOperation
|
||||||
default:
|
default:
|
||||||
return ListObjectsV1Operation
|
return ListObjectsV1Operation
|
||||||
}
|
}
|
||||||
|
@ -292,6 +294,8 @@ func determineBucketOperation(r *http.Request) string {
|
||||||
return PutBucketVersioningOperation
|
return PutBucketVersioningOperation
|
||||||
case query.Has(NotificationQuery):
|
case query.Has(NotificationQuery):
|
||||||
return PutBucketNotificationOperation
|
return PutBucketNotificationOperation
|
||||||
|
case query.Has(PublicAccessBlockQuery):
|
||||||
|
return PutPublicAccessBlockOperation
|
||||||
default:
|
default:
|
||||||
return CreateBucketOperation
|
return CreateBucketOperation
|
||||||
}
|
}
|
||||||
|
@ -316,6 +320,8 @@ func determineBucketOperation(r *http.Request) string {
|
||||||
return DeleteBucketLifecycleOperation
|
return DeleteBucketLifecycleOperation
|
||||||
case query.Has(EncryptionQuery):
|
case query.Has(EncryptionQuery):
|
||||||
return DeleteBucketEncryptionOperation
|
return DeleteBucketEncryptionOperation
|
||||||
|
case query.Has(PublicAccessBlockQuery):
|
||||||
|
return DeletePublicAccessBlockOperation
|
||||||
default:
|
default:
|
||||||
return DeleteBucketOperation
|
return DeleteBucketOperation
|
||||||
}
|
}
|
||||||
|
|
|
@ -263,6 +263,24 @@ func TestDetermineBucketOperation(t *testing.T) {
|
||||||
method: http.MethodDelete,
|
method: http.MethodDelete,
|
||||||
expected: DeleteBucketOperation,
|
expected: DeleteBucketOperation,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "GetPublicAccessBlockOperation",
|
||||||
|
method: http.MethodGet,
|
||||||
|
queryParam: map[string]string{PublicAccessBlockQuery: defaultValue},
|
||||||
|
expected: GetPublicAccessBlockOperation,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "PutPublicAccessBlockOperation",
|
||||||
|
method: http.MethodPut,
|
||||||
|
queryParam: map[string]string{PublicAccessBlockQuery: defaultValue},
|
||||||
|
expected: PutPublicAccessBlockOperation,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "DeletePublicAccessBlockOperation",
|
||||||
|
method: http.MethodDelete,
|
||||||
|
queryParam: map[string]string{PublicAccessBlockQuery: defaultValue},
|
||||||
|
expected: DeletePublicAccessBlockOperation,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "UnmatchedBucketOperation",
|
name: "UnmatchedBucketOperation",
|
||||||
method: "invalid-method",
|
method: "invalid-method",
|
||||||
|
|
|
@ -88,6 +88,9 @@ type (
|
||||||
ListPartsHandler(w http.ResponseWriter, r *http.Request)
|
ListPartsHandler(w http.ResponseWriter, r *http.Request)
|
||||||
ListMultipartUploadsHandler(http.ResponseWriter, *http.Request)
|
ListMultipartUploadsHandler(http.ResponseWriter, *http.Request)
|
||||||
PatchObjectHandler(http.ResponseWriter, *http.Request)
|
PatchObjectHandler(http.ResponseWriter, *http.Request)
|
||||||
|
DeletePublicAccessBlockHandler(http.ResponseWriter, *http.Request)
|
||||||
|
GetPublicAccessBlockHandler(http.ResponseWriter, *http.Request)
|
||||||
|
PutPublicAccessBlockHandler(http.ResponseWriter, *http.Request)
|
||||||
|
|
||||||
ResolveBucket(ctx context.Context, bucket string) (*data.BucketInfo, error)
|
ResolveBucket(ctx context.Context, bucket string) (*data.BucketInfo, error)
|
||||||
ResolveCID(ctx context.Context, bucket string) (cid.ID, error)
|
ResolveCID(ctx context.Context, bucket string) (cid.ID, error)
|
||||||
|
@ -313,6 +316,9 @@ func bucketRouter(h Handler) chi.Router {
|
||||||
Add(NewFilter().
|
Add(NewFilter().
|
||||||
Queries(s3middleware.VersionsQuery).
|
Queries(s3middleware.VersionsQuery).
|
||||||
Handler(named(s3middleware.ListBucketObjectVersionsOperation, h.ListBucketObjectVersionsHandler))).
|
Handler(named(s3middleware.ListBucketObjectVersionsOperation, h.ListBucketObjectVersionsHandler))).
|
||||||
|
Add(NewFilter().
|
||||||
|
Queries(s3middleware.PublicAccessBlockQuery).
|
||||||
|
Handler(named(s3middleware.GetPublicAccessBlockOperation, h.GetPublicAccessBlockHandler))).
|
||||||
DefaultHandler(listWrapper(h)))
|
DefaultHandler(listWrapper(h)))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -346,6 +352,9 @@ func bucketRouter(h Handler) chi.Router {
|
||||||
Add(NewFilter().
|
Add(NewFilter().
|
||||||
Queries(s3middleware.NotificationQuery).
|
Queries(s3middleware.NotificationQuery).
|
||||||
Handler(named(s3middleware.PutBucketNotificationOperation, h.PutBucketNotificationHandler))).
|
Handler(named(s3middleware.PutBucketNotificationOperation, h.PutBucketNotificationHandler))).
|
||||||
|
Add(NewFilter().
|
||||||
|
Queries(s3middleware.PublicAccessBlockQuery).
|
||||||
|
Handler(named(s3middleware.PutPublicAccessBlockOperation, h.PutPublicAccessBlockHandler))).
|
||||||
DefaultHandler(named(s3middleware.CreateBucketOperation, h.CreateBucketHandler)))
|
DefaultHandler(named(s3middleware.CreateBucketOperation, h.CreateBucketHandler)))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -380,6 +389,9 @@ func bucketRouter(h Handler) chi.Router {
|
||||||
Add(NewFilter().
|
Add(NewFilter().
|
||||||
Queries(s3middleware.EncryptionQuery).
|
Queries(s3middleware.EncryptionQuery).
|
||||||
Handler(named(s3middleware.DeleteBucketEncryptionOperation, h.DeleteBucketEncryptionHandler))).
|
Handler(named(s3middleware.DeleteBucketEncryptionOperation, h.DeleteBucketEncryptionHandler))).
|
||||||
|
Add(NewFilter().
|
||||||
|
Queries(s3middleware.PublicAccessBlockQuery).
|
||||||
|
Handler(named(s3middleware.DeletePublicAccessBlockOperation, h.DeletePublicAccessBlockHandler))).
|
||||||
DefaultHandler(named(s3middleware.DeleteBucketOperation, h.DeleteBucketHandler)))
|
DefaultHandler(named(s3middleware.DeleteBucketOperation, h.DeleteBucketHandler)))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -569,6 +569,18 @@ func (h *handlerMock) PatchObjectHandler(http.ResponseWriter, *http.Request) {
|
||||||
panic("implement me")
|
panic("implement me")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *handlerMock) DeletePublicAccessBlockHandler(http.ResponseWriter, *http.Request) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handlerMock) GetPublicAccessBlockHandler(http.ResponseWriter, *http.Request) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handlerMock) PutPublicAccessBlockHandler(http.ResponseWriter, *http.Request) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
func (h *handlerMock) ResolveBucket(ctx context.Context, name string) (*data.BucketInfo, error) {
|
func (h *handlerMock) ResolveBucket(ctx context.Context, name string) (*data.BucketInfo, error) {
|
||||||
reqInfo := middleware.GetReqInfo(ctx)
|
reqInfo := middleware.GetReqInfo(ctx)
|
||||||
bktInfo, ok := h.buckets[reqInfo.Namespace+name]
|
bktInfo, ok := h.buckets[reqInfo.Namespace+name]
|
||||||
|
|
Loading…
Add table
Reference in a new issue