diff --git a/weed/iamapi/iamapi_group_handlers.go b/weed/iamapi/iamapi_group_handlers.go index 49d386e0c..d6b440aba 100644 --- a/weed/iamapi/iamapi_group_handlers.go +++ b/weed/iamapi/iamapi_group_handlers.go @@ -46,6 +46,26 @@ func (iama *IamApiServer) DeleteGroup(s3cfg *iam_pb.S3ApiConfiguration, values u return resp, &IamError{Code: iam.ErrCodeNoSuchEntityException, Error: fmt.Errorf("group %s does not exist", groupName)} } +func (iama *IamApiServer) UpdateGroup(s3cfg *iam_pb.S3ApiConfiguration, values url.Values) (*UpdateGroupResponse, *IamError) { + resp := &UpdateGroupResponse{} + groupName := values.Get("GroupName") + if groupName == "" { + return resp, &IamError{Code: iam.ErrCodeInvalidInputException, Error: fmt.Errorf("GroupName is required")} + } + for _, g := range s3cfg.Groups { + if g.Name == groupName { + if disabled := values.Get("Disabled"); disabled != "" { + g.Disabled = disabled == "true" + } + if newName := values.Get("NewGroupName"); newName != "" { + g.Name = newName + } + return resp, nil + } + } + return resp, &IamError{Code: iam.ErrCodeNoSuchEntityException, Error: fmt.Errorf("group %s does not exist", groupName)} +} + func (iama *IamApiServer) GetGroup(s3cfg *iam_pb.S3ApiConfiguration, values url.Values) (*GetGroupResponse, *IamError) { resp := &GetGroupResponse{} groupName := values.Get("GroupName") diff --git a/weed/iamapi/iamapi_management_handlers.go b/weed/iamapi/iamapi_management_handlers.go index 8b9438014..bbe6065bd 100644 --- a/weed/iamapi/iamapi_management_handlers.go +++ b/weed/iamapi/iamapi_management_handlers.go @@ -1105,6 +1105,13 @@ func (iama *IamApiServer) DoActions(w http.ResponseWriter, r *http.Request) { writeIamErrorResponse(w, r, reqID, err) return } + case "UpdateGroup": + var err *IamError + response, err = iama.UpdateGroup(s3cfg, values) + if err != nil { + writeIamErrorResponse(w, r, reqID, err) + return + } case "GetGroup": var err *IamError response, err = iama.GetGroup(s3cfg, values) diff --git a/weed/iamapi/iamapi_response.go b/weed/iamapi/iamapi_response.go index a8dafb50c..56fcb1be1 100644 --- a/weed/iamapi/iamapi_response.go +++ b/weed/iamapi/iamapi_response.go @@ -39,6 +39,7 @@ type ( // Group response types CreateGroupResponse = iamlib.CreateGroupResponse DeleteGroupResponse = iamlib.DeleteGroupResponse + UpdateGroupResponse = iamlib.UpdateGroupResponse GetGroupResponse = iamlib.GetGroupResponse ListGroupsResponse = iamlib.ListGroupsResponse AddUserToGroupResponse = iamlib.AddUserToGroupResponse