Browse Source

add DeleteUserPolicy

pull/1975/head
Konstantin Lebedev 4 years ago
parent
commit
995ae91007
  1. 3
      docker/compose/local-dev-compose.yml
  2. 9
      weed/iamapi/iamapi_handlers.go
  3. 27
      weed/iamapi/iamapi_management_handlers.go

3
docker/compose/local-dev-compose.yml

@ -26,9 +26,10 @@ services:
filer: filer:
image: chrislusf/seaweedfs:local image: chrislusf/seaweedfs:local
ports: ports:
- 8111:8111
- 8888:8888 - 8888:8888
- 18888:18888 - 18888:18888
command: '-v=1 filer -master="master:9333"'
command: '-v=1 filer -master="master:9333" -iam'
depends_on: depends_on:
- master - master
- volume - volume

9
weed/iamapi/iamapi_handlers.go

@ -50,20 +50,25 @@ func writeErrorResponse(w http.ResponseWriter, errorCode s3err.ErrorCode, reqURL
writeResponse(w, apiError.HTTPStatusCode, encodedErrorResponse, mimeXML) writeResponse(w, apiError.HTTPStatusCode, encodedErrorResponse, mimeXML)
} }
func writeIamErrorResponse(w http.ResponseWriter, err error, object string, value string) {
func writeIamErrorResponse(w http.ResponseWriter, err error, object string, value string, msg error) {
errCode := err.Error() errCode := err.Error()
errorResp := ErrorResponse{} errorResp := ErrorResponse{}
errorResp.Error.Type = "Sender" errorResp.Error.Type = "Sender"
errorResp.Error.Code = &errCode errorResp.Error.Code = &errCode
if msg != nil {
errMsg := msg.Error()
errorResp.Error.Message = &errMsg
}
glog.Errorf("Response %+v", err) glog.Errorf("Response %+v", err)
switch errCode { switch errCode {
case iam.ErrCodeNoSuchEntityException: case iam.ErrCodeNoSuchEntityException:
msg := fmt.Sprintf("The %s with name %s cannot be found.", object, value) msg := fmt.Sprintf("The %s with name %s cannot be found.", object, value)
errorResp.Error.Message = &msg errorResp.Error.Message = &msg
writeResponse(w, http.StatusNotFound, encodeResponse(errorResp), mimeXML) writeResponse(w, http.StatusNotFound, encodeResponse(errorResp), mimeXML)
case iam.ErrCodeServiceFailureException:
writeResponse(w, http.StatusInternalServerError, encodeResponse(errorResp), mimeXML)
default: default:
writeResponse(w, http.StatusInternalServerError, encodeResponse(errorResp), mimeXML) writeResponse(w, http.StatusInternalServerError, encodeResponse(errorResp), mimeXML)
} }
} }

27
weed/iamapi/iamapi_management_handlers.go

@ -144,6 +144,17 @@ func (iama *IamApiServer) PutUserPolicy(s3cfg *iam_pb.S3ApiConfiguration, values
return resp, nil return resp, nil
} }
func (iama *IamApiServer) DeleteUserPolicy(s3cfg *iam_pb.S3ApiConfiguration, values url.Values) (resp PutUserPolicyResponse, err error) {
userName := values.Get("UserName")
for i, ident := range s3cfg.Identities {
if ident.Name == userName {
s3cfg.Identities = append(s3cfg.Identities[:i], s3cfg.Identities[i+1:]...)
return resp, nil
}
}
return resp, fmt.Errorf(iam.ErrCodeNoSuchEntityException)
}
func MapAction(action string) string { func MapAction(action string) string {
switch action { switch action {
case "*": case "*":
@ -277,14 +288,14 @@ func (iama *IamApiServer) DoActions(w http.ResponseWriter, r *http.Request) {
userName := values.Get("UserName") userName := values.Get("UserName")
response, err = iama.GetUser(s3cfg, userName) response, err = iama.GetUser(s3cfg, userName)
if err != nil { if err != nil {
writeIamErrorResponse(w, err, "user", userName)
writeIamErrorResponse(w, err, "user", userName, nil)
return return
} }
case "DeleteUser": case "DeleteUser":
userName := values.Get("UserName") userName := values.Get("UserName")
response, err = iama.DeleteUser(s3cfg, userName) response, err = iama.DeleteUser(s3cfg, userName)
if err != nil { if err != nil {
writeIamErrorResponse(w, err, "user", userName)
writeIamErrorResponse(w, err, "user", userName, nil)
return return
} }
case "CreateAccessKey": case "CreateAccessKey":
@ -305,8 +316,16 @@ func (iama *IamApiServer) DoActions(w http.ResponseWriter, r *http.Request) {
writeErrorResponse(w, s3err.ErrInvalidRequest, r.URL) writeErrorResponse(w, s3err.ErrInvalidRequest, r.URL)
return return
} }
case "DeleteUserPolicy":
if response, err = iama.DeleteUserPolicy(s3cfg, values); err != nil {
writeIamErrorResponse(w, err, "user", values.Get("UserName"), nil)
}
default: default:
writeErrorResponse(w, s3err.ErrNotImplemented, r.URL)
errNotImplemented := s3err.GetAPIError(s3err.ErrNotImplemented)
errorResponse := ErrorResponse{}
errorResponse.Error.Code = &errNotImplemented.Code
errorResponse.Error.Message = &errNotImplemented.Description
writeResponse(w, errNotImplemented.HTTPStatusCode, encodeResponse(errorResponse), mimeXML)
return return
} }
if changed { if changed {
@ -314,7 +333,7 @@ func (iama *IamApiServer) DoActions(w http.ResponseWriter, r *http.Request) {
err := iama.s3ApiConfig.PutS3ApiConfiguration(s3cfg) err := iama.s3ApiConfig.PutS3ApiConfiguration(s3cfg)
s3cfgLock.Unlock() s3cfgLock.Unlock()
if err != nil { if err != nil {
writeErrorResponse(w, s3err.ErrInternalError, r.URL)
writeIamErrorResponse(w, fmt.Errorf(iam.ErrCodeServiceFailureException), "", "", err)
return return
} }
} }

Loading…
Cancel
Save