forked from TrueCloudLab/frostfs-s3-gw
[TrueCloudLab#23] Return error on unknown LocationConstraint
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
This commit is contained in:
parent
430f1e734f
commit
9dcacc230e
3 changed files with 23 additions and 10 deletions
|
@ -14,6 +14,7 @@ This document outlines major changes between releases.
|
||||||
- Update viper to v1.15.0 (#14)
|
- Update viper to v1.15.0 (#14)
|
||||||
- Using multiple servers require only one healthy (TrueCloudLab#12)
|
- Using multiple servers require only one healthy (TrueCloudLab#12)
|
||||||
- Update go version to go1.18 (TrueCloudLab#16)
|
- Update go version to go1.18 (TrueCloudLab#16)
|
||||||
|
- Return error on invalid LocationConstraint (TrueCloudLab#23)
|
||||||
|
|
||||||
## [0.26.0] - 2022-12-28
|
## [0.26.0] - 2022-12-28
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,7 @@ const (
|
||||||
ErrMissingFields
|
ErrMissingFields
|
||||||
ErrMissingCredTag
|
ErrMissingCredTag
|
||||||
ErrCredMalformed
|
ErrCredMalformed
|
||||||
|
ErrInvalidLocationConstraint
|
||||||
ErrInvalidRegion
|
ErrInvalidRegion
|
||||||
ErrInvalidServiceS3
|
ErrInvalidServiceS3
|
||||||
ErrInvalidServiceSTS
|
ErrInvalidServiceSTS
|
||||||
|
@ -680,6 +681,12 @@ var errorCodes = errorCodeMap{
|
||||||
Description: "Error parsing the X-Amz-Credential parameter; the region is wrong;",
|
Description: "Error parsing the X-Amz-Credential parameter; the region is wrong;",
|
||||||
HTTPStatusCode: http.StatusBadRequest,
|
HTTPStatusCode: http.StatusBadRequest,
|
||||||
},
|
},
|
||||||
|
ErrInvalidLocationConstraint: {
|
||||||
|
ErrCode: ErrInvalidLocationConstraint,
|
||||||
|
Code: "InvalidLocationConstraint",
|
||||||
|
Description: "The specified location (Region) constraint is not valid.",
|
||||||
|
HTTPStatusCode: http.StatusBadRequest,
|
||||||
|
},
|
||||||
ErrInvalidRegion: {
|
ErrInvalidRegion: {
|
||||||
ErrCode: ErrInvalidRegion,
|
ErrCode: ErrInvalidRegion,
|
||||||
Code: "InvalidRegion",
|
Code: "InvalidRegion",
|
||||||
|
|
|
@ -720,7 +720,10 @@ func (h *handler) CreateBucketHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
h.setPolicy(p, createParams.LocationConstraint, policies)
|
if err = h.setPolicy(p, createParams.LocationConstraint, policies); err != nil {
|
||||||
|
h.logAndSendError(w, "couldn't set placement policy", reqInfo, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
p.ObjectLockEnabled = isLockEnabled(r.Header)
|
p.ObjectLockEnabled = isLockEnabled(r.Header)
|
||||||
|
|
||||||
|
@ -748,25 +751,27 @@ func (h *handler) CreateBucketHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
api.WriteSuccessResponseHeadersOnly(w)
|
api.WriteSuccessResponseHeadersOnly(w)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h handler) setPolicy(prm *layer.CreateBucketParams, locationConstraint string, userPolicies []*accessbox.ContainerPolicy) {
|
func (h handler) setPolicy(prm *layer.CreateBucketParams, locationConstraint string, userPolicies []*accessbox.ContainerPolicy) error {
|
||||||
prm.Policy = h.cfg.Policy.Default()
|
prm.Policy = h.cfg.Policy.Default()
|
||||||
|
prm.LocationConstraint = locationConstraint
|
||||||
|
|
||||||
if locationConstraint == "" {
|
if locationConstraint == "" {
|
||||||
return
|
return nil
|
||||||
}
|
|
||||||
|
|
||||||
if policy, ok := h.cfg.Policy.Get(locationConstraint); ok {
|
|
||||||
prm.Policy = policy
|
|
||||||
prm.LocationConstraint = locationConstraint
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, placementPolicy := range userPolicies {
|
for _, placementPolicy := range userPolicies {
|
||||||
if placementPolicy.LocationConstraint == locationConstraint {
|
if placementPolicy.LocationConstraint == locationConstraint {
|
||||||
prm.Policy = placementPolicy.Policy
|
prm.Policy = placementPolicy.Policy
|
||||||
prm.LocationConstraint = locationConstraint
|
return nil
|
||||||
return
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if policy, ok := h.cfg.Policy.Get(locationConstraint); ok {
|
||||||
|
prm.Policy = policy
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return errors.GetAPIError(errors.ErrInvalidLocationConstraint)
|
||||||
}
|
}
|
||||||
|
|
||||||
func isLockEnabled(header http.Header) bool {
|
func isLockEnabled(header http.Header) bool {
|
||||||
|
|
Loading…
Reference in a new issue