From 85ac9c20b02a29dd5023166c034e7647e62ed0d4 Mon Sep 17 00:00:00 2001 From: MuweiHe Date: Tue, 18 Oct 2022 17:32:55 -0700 Subject: [PATCH 1/4] initial --- internal/cmd/iam/command_rbac_role_binding.go | 5 ++--- internal/pkg/ccloudv2/iam.go | 13 +++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/internal/cmd/iam/command_rbac_role_binding.go b/internal/cmd/iam/command_rbac_role_binding.go index 0bc265cc42..d53fbceb6e 100644 --- a/internal/cmd/iam/command_rbac_role_binding.go +++ b/internal/cmd/iam/command_rbac_role_binding.go @@ -7,7 +7,6 @@ import ( "os" "strings" - orgv1 "github.com/confluentinc/cc-structs/kafka/org/v1" mds "github.com/confluentinc/mds-sdk-go/mdsv1" "github.com/confluentinc/mds-sdk-go/mdsv2alpha1" "github.com/spf13/cobra" @@ -125,11 +124,11 @@ func (c *roleBindingCommand) parseCommon(cmd *cobra.Command) (*roleBindingOption if strings.HasPrefix(principal, "User:") { principalValue := strings.TrimLeft(principal, "User:") if strings.Contains(principalValue, "@") { - user, err := c.Client.User.Describe(context.Background(), &orgv1.User{Email: principalValue}) + user, err := c.V2Client.GetIamUserByEmail(principalValue) if err != nil { return nil, err } - principal = "User:" + user.ResourceId + principal = "User:" + user.GetId() } } } diff --git a/internal/pkg/ccloudv2/iam.go b/internal/pkg/ccloudv2/iam.go index 2962a58218..4451b0eacb 100644 --- a/internal/pkg/ccloudv2/iam.go +++ b/internal/pkg/ccloudv2/iam.go @@ -93,6 +93,19 @@ func (c *Client) GetIamUser(id string) (iamv2.IamV2User, error) { return resp, errors.CatchCCloudV2Error(err, httpResp) } +func (c *Client) GetIamUserByEmail(email string) (iamv2.IamV2User, error) { + users, err := c.ListIamUsers() + if err != nil { + return iamv2.IamV2User{}, err + } + for _, user := range users { + if user.GetEmail() == email { + return user, nil + } + } + return iamv2.IamV2User{}, errors.Errorf(errors.InvalidEmailErrorMsg, email) +} + func (c *Client) ListIamUsers() ([]iamv2.IamV2User, error) { var list []iamv2.IamV2User From 26f1a23c53f7727f5f2bd279de96ac56fba6e01a Mon Sep 17 00:00:00 2001 From: MuweiHe Date: Tue, 18 Oct 2022 19:32:48 -0700 Subject: [PATCH 2/4] comment --- internal/cmd/iam/command_rbac_role_binding.go | 16 +++++++++++++++- internal/pkg/ccloudv2/iam.go | 13 ------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/internal/cmd/iam/command_rbac_role_binding.go b/internal/cmd/iam/command_rbac_role_binding.go index d53fbceb6e..1068b27853 100644 --- a/internal/cmd/iam/command_rbac_role_binding.go +++ b/internal/cmd/iam/command_rbac_role_binding.go @@ -12,6 +12,7 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" + iamv2 "github.com/confluentinc/ccloud-sdk-go-v2/iam/v2" pcmd "github.com/confluentinc/cli/internal/pkg/cmd" v1 "github.com/confluentinc/cli/internal/pkg/config/v1" "github.com/confluentinc/cli/internal/pkg/errors" @@ -124,7 +125,7 @@ func (c *roleBindingCommand) parseCommon(cmd *cobra.Command) (*roleBindingOption if strings.HasPrefix(principal, "User:") { principalValue := strings.TrimLeft(principal, "User:") if strings.Contains(principalValue, "@") { - user, err := c.V2Client.GetIamUserByEmail(principalValue) + user, err := c.GetIamUserByEmail(principalValue) if err != nil { return nil, err } @@ -596,3 +597,16 @@ func (c *roleBindingCommand) createContext() context.Context { return context.WithValue(context.Background(), mds.ContextAccessToken, c.AuthToken()) } } + +func (c *roleBindingCommand) GetIamUserByEmail(email string) (iamv2.IamV2User, error) { + users, err := c.V2Client.ListIamUsers() + if err != nil { + return iamv2.IamV2User{}, err + } + for _, user := range users { + if user.GetEmail() == email { + return user, nil + } + } + return iamv2.IamV2User{}, errors.Errorf(errors.InvalidEmailErrorMsg, email) +} diff --git a/internal/pkg/ccloudv2/iam.go b/internal/pkg/ccloudv2/iam.go index 4451b0eacb..2962a58218 100644 --- a/internal/pkg/ccloudv2/iam.go +++ b/internal/pkg/ccloudv2/iam.go @@ -93,19 +93,6 @@ func (c *Client) GetIamUser(id string) (iamv2.IamV2User, error) { return resp, errors.CatchCCloudV2Error(err, httpResp) } -func (c *Client) GetIamUserByEmail(email string) (iamv2.IamV2User, error) { - users, err := c.ListIamUsers() - if err != nil { - return iamv2.IamV2User{}, err - } - for _, user := range users { - if user.GetEmail() == email { - return user, nil - } - } - return iamv2.IamV2User{}, errors.Errorf(errors.InvalidEmailErrorMsg, email) -} - func (c *Client) ListIamUsers() ([]iamv2.IamV2User, error) { var list []iamv2.IamV2User From b3adfd42e76f5313efdf089656ed20d5f065e56f Mon Sep 17 00:00:00 2001 From: MuweiHe Date: Tue, 18 Oct 2022 19:48:32 -0700 Subject: [PATCH 3/4] fix int tests --- .../cmd/iam/command_rbac_role_binding_test.go | 38 ++++--------------- 1 file changed, 8 insertions(+), 30 deletions(-) diff --git a/internal/cmd/iam/command_rbac_role_binding_test.go b/internal/cmd/iam/command_rbac_role_binding_test.go index 904ef914fc..9ac20d4a93 100644 --- a/internal/cmd/iam/command_rbac_role_binding_test.go +++ b/internal/cmd/iam/command_rbac_role_binding_test.go @@ -8,9 +8,6 @@ import ( "os" "testing" - orgv1 "github.com/confluentinc/cc-structs/kafka/org/v1" - "github.com/confluentinc/ccloud-sdk-go-v1" - ccsdkmock "github.com/confluentinc/ccloud-sdk-go-v1/mock" iamv2 "github.com/confluentinc/ccloud-sdk-go-v2/iam/v2" iammock "github.com/confluentinc/ccloud-sdk-go-v2/iam/v2/mock" identityproviderv2 "github.com/confluentinc/ccloud-sdk-go-v2/identity-provider/v2" @@ -25,11 +22,12 @@ import ( "github.com/confluentinc/cli/internal/pkg/ccloudv2" pcmd "github.com/confluentinc/cli/internal/pkg/cmd" v1 "github.com/confluentinc/cli/internal/pkg/config/v1" + "github.com/confluentinc/cli/internal/pkg/errors" climock "github.com/confluentinc/cli/mock" ) var ( - errNotFound = fmt.Errorf("user not found") + userNotFoundError = errors.Errorf(errors.InvalidEmailErrorMsg, "notfound@email.com") ) const ( @@ -89,23 +87,6 @@ func (suite *RoleBindingTestSuite) newMockIamRoleBindingCmd(expect chan expected return &http.Response{StatusCode: http.StatusOK}, nil }, } - userMock := &ccsdkmock.User{ - DescribeFunc: func(arg0 context.Context, arg1 *orgv1.User) (user *orgv1.User, e error) { - if arg1.Email == "test@email.com" { - return &orgv1.User{ - Email: "test@email.com", - ResourceId: v1.MockUserResourceId, - }, nil - } else if arg1.Email == "notfound@email.com" || arg1.ResourceId == "u-noemail" { - return nil, errNotFound - } else { - return &orgv1.User{ - Email: arg1.ResourceId + "@email.com", - ResourceId: arg1.ResourceId, - }, nil - } - }, - } iamUserMock := &iammock.UsersIamV2Api{ GetIamV2UserFunc: func(ctx context.Context, id string) iamv2.ApiGetIamV2UserRequest { return iamv2.ApiGetIamV2UserRequest{} @@ -170,9 +151,6 @@ func (suite *RoleBindingTestSuite) newMockIamRoleBindingCmd(expect chan expected return identityproviderv2.IamV2IdentityPoolList{Data: []identityproviderv2.IamV2IdentityPool{pool}}, nil, nil }, } - client := &ccloud.Client{ - User: userMock, - } v2client := &ccloudv2.Client{ AuthToken: "auth-token", IamClient: &iamv2.APIClient{ @@ -184,7 +162,7 @@ func (suite *RoleBindingTestSuite) newMockIamRoleBindingCmd(expect chan expected IdentityProvidersIamV2Api: providerMock, }, } - return New(suite.conf, climock.NewPreRunnerMdsV2Mock(client, v2client, mdsClient, suite.conf)) + return New(suite.conf, climock.NewPreRunnerMdsV2Mock(nil, v2client, mdsClient, suite.conf)) } func TestRoleBindingTestSuite(t *testing.T) { @@ -214,7 +192,7 @@ var roleBindingListTests = []roleBindingTest{ }, { args: []string{"--principal", "User:notfound@email.com"}, - err: errNotFound, + err: userNotFoundError, }, { args: []string{"--role", "OrganizationAdmin"}, @@ -277,7 +255,7 @@ func (suite *RoleBindingTestSuite) TestRoleBindingsList() { } else { // error case err := cmd.Execute() - assert.Equal(suite.T(), tc.err, err) + assert.Equal(suite.T(), tc.err.Error(), err.Error()) } } } @@ -562,7 +540,7 @@ var roleBindingCreateDeleteTests = []roleBindingTest{ }, { args: []string{"--principal", "User:notfound@email.com", "--role", "OrganizationAdmin"}, - err: errNotFound, + err: userNotFoundError, }, { args: []string{"--principal", "User:" + v1.MockUserResourceId, "--role", "EnvironmentAdmin", "--current-env"}, @@ -631,7 +609,7 @@ func (suite *RoleBindingTestSuite) TestRoleBindingsCreate() { } else { // error case err := cmd.Execute() - assert.Equal(suite.T(), tc.err, err) + assert.Equal(suite.T(), tc.err.Error(), err.Error()) } } } @@ -656,7 +634,7 @@ func (suite *RoleBindingTestSuite) TestRoleBindingsDelete() { } else { // error case err := cmd.Execute() - assert.Equal(suite.T(), tc.err, err) + assert.Equal(suite.T(), tc.err.Error(), err.Error()) } } } From aec10954fa7abcbcdd69ff9c2e5ae46c35966237 Mon Sep 17 00:00:00 2001 From: MuweiHe Date: Tue, 18 Oct 2022 22:36:45 -0700 Subject: [PATCH 4/4] Update command_rbac_role_binding_test.go --- internal/cmd/iam/command_rbac_role_binding_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/cmd/iam/command_rbac_role_binding_test.go b/internal/cmd/iam/command_rbac_role_binding_test.go index 9ac20d4a93..366743c1b5 100644 --- a/internal/cmd/iam/command_rbac_role_binding_test.go +++ b/internal/cmd/iam/command_rbac_role_binding_test.go @@ -27,7 +27,7 @@ import ( ) var ( - userNotFoundError = errors.Errorf(errors.InvalidEmailErrorMsg, "notfound@email.com") + errUserNotFound = errors.Errorf(errors.InvalidEmailErrorMsg, "notfound@email.com") ) const ( @@ -192,7 +192,7 @@ var roleBindingListTests = []roleBindingTest{ }, { args: []string{"--principal", "User:notfound@email.com"}, - err: userNotFoundError, + err: errUserNotFound, }, { args: []string{"--role", "OrganizationAdmin"}, @@ -540,7 +540,7 @@ var roleBindingCreateDeleteTests = []roleBindingTest{ }, { args: []string{"--principal", "User:notfound@email.com", "--role", "OrganizationAdmin"}, - err: userNotFoundError, + err: errUserNotFound, }, { args: []string{"--principal", "User:" + v1.MockUserResourceId, "--role", "EnvironmentAdmin", "--current-env"},