diff --git a/restapi/admin_groups.go b/restapi/admin_groups.go index 1981353c7..aff779070 100644 --- a/restapi/admin_groups.go +++ b/restapi/admin_groups.go @@ -153,7 +153,6 @@ func getAddGroupResponse(session *models.Principal, params *models.AddGroupReque if params == nil { return prepareError(errGroupBodyNotInRequest) } - mAdmin, err := NewMinioAdminClient(session) if err != nil { return prepareError(err) @@ -162,6 +161,14 @@ func getAddGroupResponse(session *models.Principal, params *models.AddGroupReque // defining the client to be used adminClient := AdminClient{Client: mAdmin} + groupList, _ := adminClient.listGroups(ctx) + + for _, b := range groupList { + if b == *params.Group { + return prepareError(errGroupAlreadyExists) + } + } + if err := addGroup(ctx, adminClient, *params.Group, params.Members); err != nil { return prepareError(err) } diff --git a/restapi/error.go b/restapi/error.go index 2d181ef53..ee11422e2 100644 --- a/restapi/error.go +++ b/restapi/error.go @@ -43,6 +43,7 @@ var ( errBucketNameNotInRequest = errors.New("error bucket name not in request") errGroupBodyNotInRequest = errors.New("error group body not in request") errGroupNameNotInRequest = errors.New("error group name not in request") + errGroupAlreadyExists = errors.New("error group name already in use") errPolicyNameNotInRequest = errors.New("error policy name not in request") errPolicyBodyNotInRequest = errors.New("error policy body not in request") errInvalidEncryptionAlgorithm = errors.New("error invalid encryption algorithm") @@ -106,6 +107,10 @@ func prepareError(err ...error) *models.Error { errorCode = 400 errorMessage = errGroupNameNotInRequest.Error() } + if errors.Is(err[0], errGroupAlreadyExists) { + errorCode = 400 + errorMessage = errGroupAlreadyExists.Error() + } if errors.Is(err[0], errPolicyNameNotInRequest) { errorCode = 400 errorMessage = errPolicyNameNotInRequest.Error()