diff --git a/cla-backend-go/api_client/api_client.go b/cla-backend-go/api_client/api_client.go new file mode 100644 index 000000000..42c0d1999 --- /dev/null +++ b/cla-backend-go/api_client/api_client.go @@ -0,0 +1,27 @@ +// Copyright The Linux Foundation and each contributor to CommunityBridge. +// SPDX-License-Identifier: MIT + +package apiclient + +import ( + "context" + "net/http" +) + +type APIClient interface { + GetData(ctx context.Context, url string) (*http.Response, error) +} + +type RestAPIClient struct { + Client *http.Client +} + +// GetData makes a get request to the specified url + +func (c *RestAPIClient) GetData(ctx context.Context, url string) (*http.Response, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + if err != nil { + return nil, err + } + return c.Client.Do(req) +} diff --git a/cla-backend-go/api_client/mocks/mock_client.go b/cla-backend-go/api_client/mocks/mock_client.go new file mode 100644 index 000000000..08dd5ceba --- /dev/null +++ b/cla-backend-go/api_client/mocks/mock_client.go @@ -0,0 +1,54 @@ +// Copyright The Linux Foundation and each contributor to CommunityBridge. +// SPDX-License-Identifier: MIT + +// Code generated by MockGen. DO NOT EDIT. +// Source: api_client/api_client.go + +// Package mock_apiclient is a generated GoMock package. +package mock_apiclient + +import ( + context "context" + http "net/http" + reflect "reflect" + + gomock "github.com/golang/mock/gomock" +) + +// MockAPIClient is a mock of APIClient interface. +type MockAPIClient struct { + ctrl *gomock.Controller + recorder *MockAPIClientMockRecorder +} + +// MockAPIClientMockRecorder is the mock recorder for MockAPIClient. +type MockAPIClientMockRecorder struct { + mock *MockAPIClient +} + +// NewMockAPIClient creates a new mock instance. +func NewMockAPIClient(ctrl *gomock.Controller) *MockAPIClient { + mock := &MockAPIClient{ctrl: ctrl} + mock.recorder = &MockAPIClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAPIClient) EXPECT() *MockAPIClientMockRecorder { + return m.recorder +} + +// GetData mocks base method. +func (m *MockAPIClient) GetData(ctx context.Context, url string) (*http.Response, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetData", ctx, url) + ret0, _ := ret[0].(*http.Response) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetData indicates an expected call of GetData. +func (mr *MockAPIClientMockRecorder) GetData(ctx, url interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetData", reflect.TypeOf((*MockAPIClient)(nil).GetData), ctx, url) +} diff --git a/cla-backend-go/cmd/dynamo_events_lambda/main.go b/cla-backend-go/cmd/dynamo_events_lambda/main.go index ee910d335..652f7e4e3 100644 --- a/cla-backend-go/cmd/dynamo_events_lambda/main.go +++ b/cla-backend-go/cmd/dynamo_events_lambda/main.go @@ -115,12 +115,7 @@ func init() { githubOrganizationsService := github_organizations.NewService(githubOrganizationsRepo, repositoriesRepo, projectClaGroupRepo) repositoriesService := repositories.NewService(repositoriesRepo, githubOrganizationsRepo, projectClaGroupRepo) - gerritService := gerrits.NewService(gerritRepo, &gerrits.LFGroup{ - LfBaseURL: configFile.LFGroup.ClientURL, - ClientID: configFile.LFGroup.ClientID, - ClientSecret: configFile.LFGroup.ClientSecret, - RefreshToken: configFile.LFGroup.RefreshToken, - }) + gerritService := gerrits.NewService(gerritRepo) // Services projectService := service.NewService(projectRepo, repositoriesRepo, gerritRepo, projectClaGroupRepo, usersRepo) diff --git a/cla-backend-go/cmd/gitlab_repository_check/handler/handler.go b/cla-backend-go/cmd/gitlab_repository_check/handler/handler.go index f4b261403..1097ffa52 100644 --- a/cla-backend-go/cmd/gitlab_repository_check/handler/handler.go +++ b/cla-backend-go/cmd/gitlab_repository_check/handler/handler.go @@ -137,12 +137,7 @@ func Handler(ctx context.Context) error { v1ProjectClaGroupRepo, }) - gerritService := gerrits.NewService(gerritRepo, &gerrits.LFGroup{ - LfBaseURL: configFile.LFGroup.ClientURL, - ClientID: configFile.LFGroup.ClientID, - ClientSecret: configFile.LFGroup.ClientSecret, - RefreshToken: configFile.LFGroup.RefreshToken, - }) + gerritService := gerrits.NewService(gerritRepo) approvalsTableName := "cla-" + stage + "-approvals" diff --git a/cla-backend-go/cmd/migrate_approval_list/main.go b/cla-backend-go/cmd/migrate_approval_list/main.go index 574b58356..63f6c387f 100644 --- a/cla-backend-go/cmd/migrate_approval_list/main.go +++ b/cla-backend-go/cmd/migrate_approval_list/main.go @@ -81,7 +81,7 @@ func init() { v1ProjectClaGroupRepo, }) ghOrgRepo = github_organizations.NewRepository(awsSession, stage) - gerritService = gerrits.NewService(gerritsRepo, nil) + gerritService = gerrits.NewService(gerritsRepo) signatureRepo = signatures.NewRepository(awsSession, stage, companyRepo, usersRepo, eventsService, &ghRepo, ghOrgRepo, gerritService, approvalRepo) log.Info("initialized repositories\n") diff --git a/cla-backend-go/cmd/server.go b/cla-backend-go/cmd/server.go index 1e67f9680..e2291e37d 100644 --- a/cla-backend-go/cmd/server.go +++ b/cla-backend-go/cmd/server.go @@ -273,13 +273,7 @@ func server(localMode bool) http.Handler { v1ProjectClaGroupRepo, }) - gerritService := gerrits.NewService(gerritRepo, &gerrits.LFGroup{ - LfBaseURL: configFile.LFGroup.ClientURL, - ClientID: configFile.LFGroup.ClientID, - ClientSecret: configFile.LFGroup.ClientSecret, - RefreshToken: configFile.LFGroup.RefreshToken, - EventsService: eventsService, - }) + gerritService := gerrits.NewService(gerritRepo) // Signature repository handler signaturesRepo := signatures.NewRepository(awsSession, stage, v1CompanyRepo, usersRepo, eventsService, gitV1Repository, githubOrganizationsRepo, gerritService, approvalsRepo) diff --git a/cla-backend-go/gerrits/mocks/mock_repository.go b/cla-backend-go/gerrits/mocks/mock_repository.go new file mode 100644 index 000000000..6d45afc36 --- /dev/null +++ b/cla-backend-go/gerrits/mocks/mock_repository.go @@ -0,0 +1,143 @@ +// Copyright The Linux Foundation and each contributor to CommunityBridge. +// SPDX-License-Identifier: MIT + +// Code generated by MockGen. DO NOT EDIT. +// Source: gerrits/repository.go + +// Package mock_gerrits is a generated GoMock package. +package mock_gerrits + +import ( + context "context" + reflect "reflect" + + models "github.com/communitybridge/easycla/cla-backend-go/gen/v1/models" + gomock "github.com/golang/mock/gomock" +) + +// MockRepository is a mock of Repository interface. +type MockRepository struct { + ctrl *gomock.Controller + recorder *MockRepositoryMockRecorder +} + +// MockRepositoryMockRecorder is the mock recorder for MockRepository. +type MockRepositoryMockRecorder struct { + mock *MockRepository +} + +// NewMockRepository creates a new mock instance. +func NewMockRepository(ctrl *gomock.Controller) *MockRepository { + mock := &MockRepository{ctrl: ctrl} + mock.recorder = &MockRepositoryMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { + return m.recorder +} + +// AddGerrit mocks base method. +func (m *MockRepository) AddGerrit(ctx context.Context, input *models.Gerrit) (*models.Gerrit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddGerrit", ctx, input) + ret0, _ := ret[0].(*models.Gerrit) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddGerrit indicates an expected call of AddGerrit. +func (mr *MockRepositoryMockRecorder) AddGerrit(ctx, input interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddGerrit", reflect.TypeOf((*MockRepository)(nil).AddGerrit), ctx, input) +} + +// DeleteGerrit mocks base method. +func (m *MockRepository) DeleteGerrit(ctx context.Context, gerritID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteGerrit", ctx, gerritID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteGerrit indicates an expected call of DeleteGerrit. +func (mr *MockRepositoryMockRecorder) DeleteGerrit(ctx, gerritID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteGerrit", reflect.TypeOf((*MockRepository)(nil).DeleteGerrit), ctx, gerritID) +} + +// ExistsByName mocks base method. +func (m *MockRepository) ExistsByName(ctx context.Context, gerritName string) ([]*models.Gerrit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ExistsByName", ctx, gerritName) + ret0, _ := ret[0].([]*models.Gerrit) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ExistsByName indicates an expected call of ExistsByName. +func (mr *MockRepositoryMockRecorder) ExistsByName(ctx, gerritName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExistsByName", reflect.TypeOf((*MockRepository)(nil).ExistsByName), ctx, gerritName) +} + +// GetClaGroupGerrits mocks base method. +func (m *MockRepository) GetClaGroupGerrits(ctx context.Context, claGroupID string) (*models.GerritList, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetClaGroupGerrits", ctx, claGroupID) + ret0, _ := ret[0].(*models.GerritList) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetClaGroupGerrits indicates an expected call of GetClaGroupGerrits. +func (mr *MockRepositoryMockRecorder) GetClaGroupGerrits(ctx, claGroupID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetClaGroupGerrits", reflect.TypeOf((*MockRepository)(nil).GetClaGroupGerrits), ctx, claGroupID) +} + +// GetGerrit mocks base method. +func (m *MockRepository) GetGerrit(ctx context.Context, gerritID string) (*models.Gerrit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetGerrit", ctx, gerritID) + ret0, _ := ret[0].(*models.Gerrit) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetGerrit indicates an expected call of GetGerrit. +func (mr *MockRepositoryMockRecorder) GetGerrit(ctx, gerritID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGerrit", reflect.TypeOf((*MockRepository)(nil).GetGerrit), ctx, gerritID) +} + +// GetGerritsByID mocks base method. +func (m *MockRepository) GetGerritsByID(ctx context.Context, ID, IDType string) (*models.GerritList, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetGerritsByID", ctx, ID, IDType) + ret0, _ := ret[0].(*models.GerritList) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetGerritsByID indicates an expected call of GetGerritsByID. +func (mr *MockRepositoryMockRecorder) GetGerritsByID(ctx, ID, IDType interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGerritsByID", reflect.TypeOf((*MockRepository)(nil).GetGerritsByID), ctx, ID, IDType) +} + +// GetGerritsByProjectSFID mocks base method. +func (m *MockRepository) GetGerritsByProjectSFID(ctx context.Context, projectSFID string) (*models.GerritList, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetGerritsByProjectSFID", ctx, projectSFID) + ret0, _ := ret[0].(*models.GerritList) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetGerritsByProjectSFID indicates an expected call of GetGerritsByProjectSFID. +func (mr *MockRepositoryMockRecorder) GetGerritsByProjectSFID(ctx, projectSFID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGerritsByProjectSFID", reflect.TypeOf((*MockRepository)(nil).GetGerritsByProjectSFID), ctx, projectSFID) +} diff --git a/cla-backend-go/gerrits/mocks/mock_service.go b/cla-backend-go/gerrits/mocks/mock_service.go new file mode 100644 index 000000000..64ba64d65 --- /dev/null +++ b/cla-backend-go/gerrits/mocks/mock_service.go @@ -0,0 +1,143 @@ +// Copyright The Linux Foundation and each contributor to CommunityBridge. +// SPDX-License-Identifier: MIT + +// Code generated by MockGen. DO NOT EDIT. +// Source: gerrits/service.go + +// Package mock_gerrits is a generated GoMock package. +package mock_gerrits + +import ( + context "context" + reflect "reflect" + + models "github.com/communitybridge/easycla/cla-backend-go/gen/v1/models" + gomock "github.com/golang/mock/gomock" +) + +// MockService is a mock of Service interface. +type MockService struct { + ctrl *gomock.Controller + recorder *MockServiceMockRecorder +} + +// MockServiceMockRecorder is the mock recorder for MockService. +type MockServiceMockRecorder struct { + mock *MockService +} + +// NewMockService creates a new mock instance. +func NewMockService(ctrl *gomock.Controller) *MockService { + mock := &MockService{ctrl: ctrl} + mock.recorder = &MockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockService) EXPECT() *MockServiceMockRecorder { + return m.recorder +} + +// AddGerrit mocks base method. +func (m *MockService) AddGerrit(ctx context.Context, claGroupID, projectSFID string, input *models.AddGerritInput, claGroupModel *models.ClaGroup) (*models.Gerrit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddGerrit", ctx, claGroupID, projectSFID, input, claGroupModel) + ret0, _ := ret[0].(*models.Gerrit) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddGerrit indicates an expected call of AddGerrit. +func (mr *MockServiceMockRecorder) AddGerrit(ctx, claGroupID, projectSFID, input, claGroupModel interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddGerrit", reflect.TypeOf((*MockService)(nil).AddGerrit), ctx, claGroupID, projectSFID, input, claGroupModel) +} + +// DeleteClaGroupGerrits mocks base method. +func (m *MockService) DeleteClaGroupGerrits(ctx context.Context, claGroupID string) (int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteClaGroupGerrits", ctx, claGroupID) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteClaGroupGerrits indicates an expected call of DeleteClaGroupGerrits. +func (mr *MockServiceMockRecorder) DeleteClaGroupGerrits(ctx, claGroupID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteClaGroupGerrits", reflect.TypeOf((*MockService)(nil).DeleteClaGroupGerrits), ctx, claGroupID) +} + +// DeleteGerrit mocks base method. +func (m *MockService) DeleteGerrit(ctx context.Context, gerritID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteGerrit", ctx, gerritID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteGerrit indicates an expected call of DeleteGerrit. +func (mr *MockServiceMockRecorder) DeleteGerrit(ctx, gerritID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteGerrit", reflect.TypeOf((*MockService)(nil).DeleteGerrit), ctx, gerritID) +} + +// GetClaGroupGerrits mocks base method. +func (m *MockService) GetClaGroupGerrits(ctx context.Context, claGroupID string) (*models.GerritList, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetClaGroupGerrits", ctx, claGroupID) + ret0, _ := ret[0].(*models.GerritList) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetClaGroupGerrits indicates an expected call of GetClaGroupGerrits. +func (mr *MockServiceMockRecorder) GetClaGroupGerrits(ctx, claGroupID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetClaGroupGerrits", reflect.TypeOf((*MockService)(nil).GetClaGroupGerrits), ctx, claGroupID) +} + +// GetGerrit mocks base method. +func (m *MockService) GetGerrit(ctx context.Context, gerritID string) (*models.Gerrit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetGerrit", ctx, gerritID) + ret0, _ := ret[0].(*models.Gerrit) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetGerrit indicates an expected call of GetGerrit. +func (mr *MockServiceMockRecorder) GetGerrit(ctx, gerritID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGerrit", reflect.TypeOf((*MockService)(nil).GetGerrit), ctx, gerritID) +} + +// GetGerritRepos mocks base method. +func (m *MockService) GetGerritRepos(ctx context.Context, gerritName string) (*models.GerritRepoList, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetGerritRepos", ctx, gerritName) + ret0, _ := ret[0].(*models.GerritRepoList) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetGerritRepos indicates an expected call of GetGerritRepos. +func (mr *MockServiceMockRecorder) GetGerritRepos(ctx, gerritName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGerritRepos", reflect.TypeOf((*MockService)(nil).GetGerritRepos), ctx, gerritName) +} + +// GetGerritsByProjectSFID mocks base method. +func (m *MockService) GetGerritsByProjectSFID(ctx context.Context, projectSFID string) (*models.GerritList, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetGerritsByProjectSFID", ctx, projectSFID) + ret0, _ := ret[0].(*models.GerritList) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetGerritsByProjectSFID indicates an expected call of GetGerritsByProjectSFID. +func (mr *MockServiceMockRecorder) GetGerritsByProjectSFID(ctx, projectSFID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGerritsByProjectSFID", reflect.TypeOf((*MockService)(nil).GetGerritsByProjectSFID), ctx, projectSFID) +} diff --git a/cla-backend-go/gerrits/models.go b/cla-backend-go/gerrits/models.go index b31689693..f15a074d0 100644 --- a/cla-backend-go/gerrits/models.go +++ b/cla-backend-go/gerrits/models.go @@ -27,18 +27,15 @@ type Gerrit struct { // toModel converts the gerrit structure into a response model func (g *Gerrit) toModel() *models.Gerrit { return &models.Gerrit{ - DateCreated: g.DateCreated, - DateModified: g.DateModified, - GerritID: strfmt.UUID4(g.GerritID), - GerritName: g.GerritName, - GerritURL: strfmt.URI(g.GerritURL), - GroupIDCcla: g.GroupIDCcla, - GroupIDIcla: g.GroupIDIcla, - GroupNameCcla: g.GroupNameCcla, - GroupNameIcla: g.GroupNameIcla, - ProjectID: g.ProjectID, - Version: g.Version, - ProjectSFID: g.ProjectSFID, + DateCreated: g.DateCreated, + DateModified: g.DateModified, + GerritID: strfmt.UUID4(g.GerritID), + GerritName: g.GerritName, + GerritURL: strfmt.URI(g.GerritURL), + GroupIDCcla: g.GroupIDCcla, + ProjectID: g.ProjectID, + Version: g.Version, + ProjectSFID: g.ProjectSFID, } } diff --git a/cla-backend-go/gerrits/repository.go b/cla-backend-go/gerrits/repository.go index d9f4ae410..80207f3e3 100644 --- a/cla-backend-go/gerrits/repository.go +++ b/cla-backend-go/gerrits/repository.go @@ -71,18 +71,15 @@ func (repo *repo) AddGerrit(ctx context.Context, input *models.Gerrit) (*models. } _, currentTime := utils.CurrentTime() gerrit := &Gerrit{ - DateCreated: currentTime, - DateModified: currentTime, - GerritID: gerritID.String(), - GerritName: input.GerritName, - GerritURL: input.GerritURL.String(), - GroupIDCcla: input.GroupIDCcla, - GroupIDIcla: input.GroupIDIcla, - GroupNameCcla: input.GroupNameCcla, - GroupNameIcla: input.GroupNameIcla, - ProjectID: input.ProjectID, - ProjectSFID: input.ProjectSFID, - Version: input.Version, + DateCreated: currentTime, + DateModified: currentTime, + GerritID: gerritID.String(), + GerritName: input.GerritName, + GerritURL: input.GerritURL.String(), + GroupIDCcla: input.GroupIDCcla, + ProjectID: input.ProjectID, + ProjectSFID: input.ProjectSFID, + Version: input.Version, } av, err := dynamodbattribute.MarshalMap(gerrit) if err != nil { diff --git a/cla-backend-go/gerrits/service.go b/cla-backend-go/gerrits/service.go index cc818c32c..01d0414a4 100644 --- a/cla-backend-go/gerrits/service.go +++ b/cla-backend-go/gerrits/service.go @@ -8,20 +8,25 @@ import ( "encoding/json" "errors" "fmt" + "io" + "net/http" "net/url" "strings" + "time" - "github.com/LF-Engineering/lfx-kit/auth" + // "github.com/LF-Engineering/lfx-kit/auth" "github.com/go-openapi/strfmt" - "github.com/go-resty/resty/v2" + + // "github.com/go-resty/resty/v2" + apiclient "github.com/communitybridge/easycla/cla-backend-go/api_client" "github.com/sirupsen/logrus" "github.com/communitybridge/easycla/cla-backend-go/utils" "github.com/communitybridge/easycla/cla-backend-go/gen/v1/models" - v2Models "github.com/communitybridge/easycla/cla-backend-go/gen/v2/models" + // v2Models "github.com/communitybridge/easycla/cla-backend-go/gen/v2/models" log "github.com/communitybridge/easycla/cla-backend-go/logging" ) @@ -35,23 +40,16 @@ type Service interface { GetGerritRepos(ctx context.Context, gerritName string) (*models.GerritRepoList, error) DeleteClaGroupGerrits(ctx context.Context, claGroupID string) (int, error) DeleteGerrit(ctx context.Context, gerritID string) error - GetUsersOfGroup(ctx context.Context, authUser *auth.User, claGroupID, claType string) (*v2Models.GerritGroupResponse, error) - AddUserToGroup(ctx context.Context, authUser *auth.User, claGroupID, userName, claType string) error - AddUsersToGroup(ctx context.Context, authUser *auth.User, claGroupID string, userNameList []string, claType string) error - RemoveUserFromGroup(ctx context.Context, authUser *auth.User, claGroupID, userName, claType string) error - RemoveUsersFromGroup(ctx context.Context, authUser *auth.User, claGroupID string, userNameList []string, claType string) error } type service struct { - repo Repository - lfGroup *LFGroup + repo Repository } // NewService creates a new gerrit service -func NewService(repo Repository, lfg *LFGroup) Service { +func NewService(repo Repository) Service { return service{ - repo: repo, - lfGroup: lfg, + repo: repo, } } @@ -62,34 +60,10 @@ func (s service) AddGerrit(ctx context.Context, claGroupID string, projectSFID s "claGroupID": claGroupID, "projectSFID": projectSFID, } - if params.GroupIDIcla == "" && params.GroupIDCcla == "" { - return nil, errors.New("should specify at least a LDAP group for ICLA or CCLA") - } log.WithFields(f).Debugf("cla groupID %s", claGroupID) log.WithFields(f).Debugf("project Model %+v", claGroupModel) - if claGroupModel.ProjectCCLAEnabled && claGroupModel.ProjectICLAEnabled { - if params.GroupIDCcla == "" { - return nil, errors.New("please provide GroupIDCcla") - } - if params.GroupIDIcla == "" { - return nil, errors.New("please provide GroupIDIcla") - } - } else if claGroupModel.ProjectCCLAEnabled { - if params.GroupIDCcla == "" { - return nil, errors.New("please provide GroupIDCcla") - } - } else if claGroupModel.ProjectICLAEnabled { - if params.GroupIDIcla == "" { - return nil, errors.New("please provide GroupIDIcla") - } - } - - if params.GroupIDIcla == params.GroupIDCcla { - return nil, errors.New("LDAP group for ICLA and CCLA are same") - } - if params.GerritName == nil { return nil, errors.New("gerrit_name required") } @@ -104,60 +78,38 @@ func (s service) AddGerrit(ctx context.Context, claGroupID string, projectSFID s return nil, errors.New("gerrit_name already present in the system") } - gerritCcla, err := s.repo.GetGerritsByID(ctx, params.GroupIDCcla, "CCLA") - if err != nil { - message := fmt.Sprintf("unable to get gerrit by ccla id : %s", params.GroupIDCcla) - log.WithFields(f).WithError(err).Warnf(message) + if params.GerritURL == nil { + return nil, errors.New("gerrit_url required") } - if len(gerritCcla.List) > 0 { - return nil, errors.New("gerrit_ccla id already present in the system") + input := &models.Gerrit{ + GerritName: utils.StringValue(params.GerritName), + GerritURL: strfmt.URI(*params.GerritURL), + ProjectID: claGroupID, + ProjectSFID: projectSFID, + Version: params.Version, } - gerritIcla, err := s.repo.GetGerritsByID(ctx, params.GroupIDIcla, "ICLA") + // Get the gerrit repos + log.WithFields(f).Debugf("fetching gerrit repos for gerrit instance: %s", *params.GerritURL) + gerritHost, err := extractGerritHost(*params.GerritURL, f) if err != nil { - message := fmt.Sprintf("unable to get gerrit by icla : %s", params.GroupIDIcla) - log.WithFields(f).WithError(err).Warnf(message) - } - - if len(gerritIcla.List) > 0 { - return nil, errors.New("gerrit_icla id already present in the system") + return nil, err } - - if params.GerritURL == nil { - return nil, errors.New("gerrit_url required") + gerritRepoList, getRepoErr := s.GetGerritRepos(ctx, gerritHost) + if getRepoErr != nil { + log.WithFields(f).WithError(getRepoErr).Warnf("problem fetching gerrit repos, error: %+v", getRepoErr) + return nil, getRepoErr } - var groupNameCcla, groupNameIcla string - if params.GroupIDIcla != "" { - group, err := s.lfGroup.GetGroup(ctx, params.GroupIDIcla) - if err != nil { - message := fmt.Sprintf("unable to get LDAP ICLA Group: %s", params.GroupIDIcla) - log.WithFields(f).WithError(err).Warnf(message) - return nil, errors.New(message) - } - groupNameIcla = group.Title - } - if params.GroupIDCcla != "" { - group, err := s.lfGroup.GetGroup(ctx, params.GroupIDCcla) - if err != nil { - message := fmt.Sprintf("unable to get LDAP CCLA Group: %s", params.GroupIDCcla) - log.WithFields(f).WithError(err).Warnf(message) - return nil, errors.New(message) - } - groupNameCcla = group.Title - } - input := &models.Gerrit{ - GerritName: utils.StringValue(params.GerritName), - GerritURL: strfmt.URI(*params.GerritURL), - GroupIDCcla: params.GroupIDCcla, - GroupIDIcla: params.GroupIDIcla, - GroupNameCcla: groupNameCcla, - GroupNameIcla: groupNameIcla, - ProjectID: claGroupID, - ProjectSFID: projectSFID, - Version: params.Version, + log.WithFields(f).Debugf("discovered %d gerrit repos", len(gerritRepoList.Repos)) + log.WithFields(f).Debugf("gerrit repo list %+v", gerritRepoList) + // Set the connected flag - for now, we just set this value to true + for _, repo := range gerritRepoList.Repos { + repo.Connected = true } + input.GerritRepoList = gerritRepoList + log.WithFields(f).Debugf("gerrit input %+v", input) return s.repo.AddGerrit(ctx, input) } @@ -278,192 +230,6 @@ func (s service) DeleteGerrit(ctx context.Context, gerritID string) error { return s.repo.DeleteGerrit(ctx, gerritID) } -// GetUsersOfGroup -func (s service) GetUsersOfGroup(ctx context.Context, authUser *auth.User, claGroupID, claType string) (*v2Models.GerritGroupResponse, error) { - f := logrus.Fields{ - "functionName": "v1.gerrits.service.GetUsersOfGroup", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "claGroupID": claGroupID, - "authUserName": authUser.UserName, - "authUserEmail": authUser.Email, - } - - log.WithFields(f).Debug("querying for CLA Group gerrits...") - g, gerritErr := s.GetClaGroupGerrits(ctx, claGroupID) - if gerritErr != nil { - log.WithFields(f).WithError(gerritErr).Warnf("unable to locate gerrits associated with CLA Group ID: %s", claGroupID) - return nil, gerritErr - } - - // Just load the first one... - if len(g.List) > 0 { - gerritModel := g.List[0] - var ldapGroupName string - switch claType { - case utils.ClaTypeICLA: - ldapGroupName = gerritModel.GroupNameIcla - case utils.ClaTypeECLA: - ldapGroupName = gerritModel.GroupNameCcla - default: - return nil, &utils.InvalidCLAType{ - CLAType: claType, - } - } - - log.WithFields(f).Debugf("querying for members of gerrit group: %s...", ldapGroupName) - g, gerritErr := s.lfGroup.GetUsersOfGroup(ctx, authUser, claGroupID, ldapGroupName) - if gerritErr != nil { - log.WithFields(f).WithError(gerritErr).Warnf("unable to locate gerrits associated with CLA Group ID: %s", claGroupID) - return nil, gerritErr - } - return g, nil - } - - return nil, nil -} - -// AddUserToGroup adds the specified user to the group -func (s service) AddUserToGroup(ctx context.Context, authUser *auth.User, claGroupID, userName, claType string) error { - f := logrus.Fields{ - "functionName": "v1.gerrits.service.AddUserToGroup", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "claGroupID": claGroupID, - "userName": userName, - } - - log.WithFields(f).Debug("querying for CLA Group gerrits...") - g, gerritErr := s.GetClaGroupGerrits(ctx, claGroupID) - if gerritErr != nil { - log.WithFields(f).WithError(gerritErr).Warnf("unable to locate gerrits associated with CLA Group ID: %s", claGroupID) - return gerritErr - } - - for _, gerritModel := range g.List { - var ldapGroupName string - switch claType { - case utils.ClaTypeICLA: - ldapGroupName = gerritModel.GroupNameIcla - case utils.ClaTypeECLA: - ldapGroupName = gerritModel.GroupNameCcla - default: - return &utils.InvalidCLAType{ - CLAType: claType, - } - } - log.WithFields(f).Debugf("LDAP group name: %s", ldapGroupName) - addErr := s.lfGroup.AddUserToGroup(ctx, authUser, claGroupID, ldapGroupName, userName) - if addErr != nil { - log.WithFields(f).WithError(addErr).Warnf("unable to add user %s to group: %s for CLA Group: %s", userName, ldapGroupName, claGroupID) - return gerritErr - } - log.WithFields(f).Debugf("added user %s to group: %s for CLA Group: %s", userName, ldapGroupName, claGroupID) - - // Log Event - } - - return nil -} - -// AddUsersToGroup adds the specified users to the group -func (s service) AddUsersToGroup(ctx context.Context, authUser *auth.User, claGroupID string, userNameList []string, claType string) error { - f := logrus.Fields{ - "functionName": "v1.gerrits.service.AddUsersToGroup", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "claGroupID": claGroupID, - "userNameList": strings.Join(userNameList, ","), - "authUserName": authUser.UserName, - "authUserEmail": authUser.Email, - } - - var errorList []error - for _, userName := range userNameList { - err := s.AddUserToGroup(ctx, authUser, claGroupID, userName, claType) - if err != nil { - log.WithFields(f).WithError(err).Warnf("encountered an error when adding username: %s to the CLA Group: %s", userName, claGroupID) - errorList = append(errorList, err) - } - } - - if len(errorList) > 0 { - log.WithFields(f).Warnf("encountered %d errors when adding %d users to the CLA Group: %s", len(errorList), len(userNameList), claGroupID) - return errorList[0] - } - - return nil -} - -// RemoveUserFromGroup removes the specified user from the group -func (s service) RemoveUserFromGroup(ctx context.Context, authUser *auth.User, claGroupID, userName, claType string) error { - f := logrus.Fields{ - "functionName": "v1.gerrits.service.RemoveUserFromGroup", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "claGroupID": claGroupID, - "userName": userName, - "authUserName": authUser.UserName, - "authUserEmail": authUser.Email, - } - - log.WithFields(f).Debug("querying for CLA Group gerrits...") - g, gerritErr := s.GetClaGroupGerrits(ctx, claGroupID) - if gerritErr != nil { - log.WithFields(f).WithError(gerritErr).Warnf("unable to locate gerrits associated with CLA Group ID: %s", claGroupID) - return gerritErr - } - - for _, gerritModel := range g.List { - var ldapGroupName string - switch claType { - case utils.ClaTypeICLA: - ldapGroupName = gerritModel.GroupNameIcla - case utils.ClaTypeECLA: - ldapGroupName = gerritModel.GroupNameCcla - default: - return &utils.InvalidCLAType{ - CLAType: claType, - } - } - log.WithFields(f).Debugf("LDAP group name: %s", ldapGroupName) - addErr := s.lfGroup.RemoveUserFromGroup(ctx, authUser, claGroupID, ldapGroupName, userName) - if addErr != nil { - log.WithFields(f).WithError(addErr).Warnf("unable to remove user %s from group: %s for CLA Group: %s", userName, ldapGroupName, claGroupID) - return gerritErr - } - log.WithFields(f).Debugf("removed user %s from group: %s for CLA Group: %s", userName, ldapGroupName, claGroupID) - - // Log Event - } - - return nil -} - -// RemoveUsersFromGroup removes the specified users from the group -func (s service) RemoveUsersFromGroup(ctx context.Context, authUser *auth.User, claGroupID string, userNameList []string, claType string) error { - f := logrus.Fields{ - "functionName": "v1.gerrits.service.RemoveUsersFromGroup", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "claGroupID": claGroupID, - "userNameList": strings.Join(userNameList, ","), - "authUserName": authUser.UserName, - "authUserEmail": authUser.Email, - } - - var errorList []error - for _, userName := range userNameList { - err := s.RemoveUserFromGroup(ctx, authUser, claGroupID, userName, claType) - if err != nil { - log.WithFields(f).WithError(err).Warnf("encountered an error when removing username: %s from the CLA Group: %s", userName, claGroupID) - errorList = append(errorList, err) - } - } - - if len(errorList) > 0 { - log.WithFields(f).Warnf("encountered %d errors when removing %d users from the CLA Group: %s", len(errorList), len(userNameList), claGroupID) - return errorList[0] - } - - return nil -} - // convertModel is a helper function to create a GerritRepoList response model func convertModel(responseModel map[string]GerritRepoInfo, serverInfo *ServerInfo) *models.GerritRepoList { var gerritRepos []*models.GerritRepo @@ -476,6 +242,7 @@ func convertModel(responseModel map[string]GerritRepoInfo, serverInfo *ServerInf URL: strfmt.URI(weblink.URL), }) } + log.Debugf("Processing repo: %s, weblinks: %+v", name, weblinks) claEnabled := false if serverInfo != nil && serverInfo.Auth.UseContributorAgreements { @@ -520,7 +287,11 @@ func listGerritRepos(ctx context.Context, gerritHost string) (map[string]GerritR utils.XREQUESTID: ctx.Value(utils.XREQUESTID), "gerritHost": gerritHost, } - client := resty.New() + client := &apiclient.RestAPIClient{ + Client: &http.Client{ + Timeout: 10 * time.Second, + }, + } base := "https://" + gerritHost @@ -529,28 +300,40 @@ func listGerritRepos(ctx context.Context, gerritHost string) (map[string]GerritR return nil, gerritAPIPathErr } + log.WithFields(f).Debugf("gerrit API path using client: %s", gerritAPIPath) + if gerritAPIPath != "" { base = fmt.Sprintf("https://%s/%s", gerritHost, gerritAPIPath) } - resp, err := client.R(). - EnableTrace(). - Get(fmt.Sprintf("%s/projects/?d&pp=0", base)) + url := fmt.Sprintf("%s/projects/?d&pp=0", base) + resp, err := client.GetData(ctx, url) + if err != nil { - log.WithFields(f).Warnf("problem querying gerrit host: %s, error: %+v", gerritHost, err) return nil, err } - if resp.IsError() { - msg := fmt.Sprintf("non-success response from list gerrit host repos for gerrit %s, error code: %s", gerritHost, resp.Status()) - log.WithFields(f).Warn(msg) - return nil, errors.New(msg) + defer func() { + if err = resp.Body.Close(); err != nil { + log.WithFields(f).Debugf("Failed to close response body; %v", err) + } + }() + + log.WithFields(f).Debugf("response: %+v", resp.Body) + + // Get the response body + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err } - var result map[string]GerritRepoInfo // Need to strip off the leading "magic prefix line" from the response payload, which is: )]}' // See: https://gerrit.linuxfoundation.org/infra/Documentation/rest-api.html#output - err = json.Unmarshal(resp.Body()[4:], &result) + strippedBody := stripMagicPrefix(body) + + var result map[string]GerritRepoInfo + + err = json.Unmarshal(strippedBody, &result) if err != nil { log.WithFields(f).Warnf("problem unmarshalling response for gerrit host: %s, error: %+v", gerritHost, err) return nil, err @@ -559,6 +342,13 @@ func listGerritRepos(ctx context.Context, gerritHost string) (map[string]GerritR return result, nil } +func stripMagicPrefix(data []byte) []byte { + if len(data) > 4 { + return data[4:] + } + return data +} + // getGerritConfig returns the gerrit configuration for the specified host func getGerritConfig(ctx context.Context, gerritHost string) (*ServerInfo, error) { f := logrus.Fields{ diff --git a/cla-backend-go/gerrits/service_test.go b/cla-backend-go/gerrits/service_test.go new file mode 100644 index 000000000..5e9abdac4 --- /dev/null +++ b/cla-backend-go/gerrits/service_test.go @@ -0,0 +1,124 @@ +// Copyright The Linux Foundation and each contributor to CommunityBridge. +// SPDX-License-Identifier: MIT + +package gerrits + +import ( + // "bytes" + "context" + // "io" + // "net/http" + "testing" + + // mock_apiclient "github.com/communitybridge/easycla/cla-backend-go/api_client/mocks" + "github.com/communitybridge/easycla/cla-backend-go/gen/v1/models" + gerritsMock "github.com/communitybridge/easycla/cla-backend-go/gerrits/mocks" + "github.com/go-openapi/strfmt" + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" +) + +func TestService_AddGerrit(t *testing.T) { + + gerritName := "gerritName" + gerritURL := "https://mockapi.gerrit.dev.itx.linuxfoundation.org/" + // gerritHost := "mockapi.gerrit.dev.itx.linuxfoundation.org" + repos := []*models.GerritRepo{ + { + ClaEnabled: true, + Connected: true, + ContributorAgreements: []*models.GerritRepoContributorAgreementsItems0{ + { + Description: "CCLA (Corporate Contributor License Agreement) for SUN", + Name: "CCLA", + URL: "https://api.dev.lfcla.com/v2/gerrit/01af041c-fa69-4052-a23c-fb8c1d3bef24/corporate/agreementUrl.html", + }, + { + Description: "ICLA (Individual Contributor License Agreement) for SUN", + Name: "ICLA", + URL: "https://api.dev.lfcla.com/v2/gerrit/01af041c-fa69-4052-a23c-fb8c1d3bef24/individual/agreementUrl.html", + }, + }, + Description: "Access inherited by all other projects.", + ID: "All-Projects", + Name: "All-Projects", + State: "ACTIVE", + WebLinks: []*models.GerritRepoWebLinksItems0{ + { + Name: "browse", + URL: "/plugins/gitiles/All-Projects", + }, + }, + }, + } + + testCases := []struct { + name string + claGroupID string + projectSFID string + params *models.AddGerritInput + gerritRepoList *models.GerritRepoList + ReposExist []*models.Gerrit + repoListErr error + claGroupModel *models.ClaGroup + expectedResult *models.Gerrit + expectedError error + }{ + { + name: "Valid input", + claGroupID: "claGroupID", + projectSFID: "projectSFID", + params: &models.AddGerritInput{ + GerritName: &gerritName, + GerritURL: &gerritURL, + Version: "version", + }, + ReposExist: []*models.Gerrit{}, + gerritRepoList: &models.GerritRepoList{ + Repos: repos, + }, + repoListErr: nil, + claGroupModel: &models.ClaGroup{}, + expectedResult: &models.Gerrit{ + GerritName: gerritName, + GerritURL: strfmt.URI(gerritURL), + ProjectID: "claGroupID", + ProjectSFID: "projectSFID", + Version: "version", + GerritRepoList: &models.GerritRepoList{ + Repos: repos, + }, + }, + expectedError: nil, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + mockRepo := gerritsMock.NewMockRepository(ctrl) + mockRepo.EXPECT().ExistsByName(context.Background(), gerritName).Return(tc.ReposExist, nil) + gerrit := &models.Gerrit{ + GerritName: gerritName, + GerritURL: strfmt.URI(gerritURL), + ProjectID: "claGroupID", + ProjectSFID: "projectSFID", + Version: "version", + GerritRepoList: tc.gerritRepoList, + } + + mockRepo.EXPECT().AddGerrit(gomock.Any(), gomock.Any()).Return(gerrit, nil) + + service := NewService(mockRepo) + + result, err := service.AddGerrit(context.Background(), tc.claGroupID, tc.projectSFID, tc.params, tc.claGroupModel) + + if err != nil { + t.Fatalf("Add Gerrit returned an error: %v", err) + } + assert.Equal(t, tc.expectedResult, result) + assert.Equal(t, repos, result.GerritRepoList.Repos) + }) + } +} diff --git a/cla-backend-go/signatures/repository.go b/cla-backend-go/signatures/repository.go index cd75a1ac3..fa52dde05 100644 --- a/cla-backend-go/signatures/repository.go +++ b/cla-backend-go/signatures/repository.go @@ -19,7 +19,6 @@ import ( "github.com/communitybridge/easycla/cla-backend-go/config" - "github.com/LF-Engineering/lfx-kit/auth" "github.com/sirupsen/logrus" "github.com/communitybridge/easycla/cla-backend-go/users" @@ -3200,10 +3199,10 @@ func (repo repository) UpdateApprovalList(ctx context.Context, claManager *model PageSize: utils.Int64(10), } - authUser := auth.User{ - Email: claManager.LfEmail.String(), - UserName: claManager.LfUsername, - } + // authUser := auth.User{ + // Email: claManager.LfEmail.String(), + // UserName: claManager.LfUsername, + // } // Keep track of gerrit users under a give CLA Group var gerritICLAECLAs []string @@ -3214,8 +3213,8 @@ func (repo repository) UpdateApprovalList(ctx context.Context, claManager *model goRoutines := 2 gerritResultChannel := make(chan *GerritUserResponse, goRoutines) gerritQueryStartTime, _ := utils.CurrentTime() - go repo.getGerritUsers(ctx, &authUser, projectID, utils.ClaTypeICLA, gerritResultChannel) - go repo.getGerritUsers(ctx, &authUser, projectID, utils.ClaTypeECLA, gerritResultChannel) + // go repo.getGerritUsers(ctx, &authUser, projectID, utils.ClaTypeICLA, gerritResultChannel) + // go repo.getGerritUsers(ctx, &authUser, projectID, utils.ClaTypeECLA, gerritResultChannel) log.WithFields(f).Debug("waiting on gerrit user query results from 2 go routines...") for i := 0; i < goRoutines; i++ { @@ -3313,19 +3312,19 @@ func (repo repository) UpdateApprovalList(ctx context.Context, claManager *model } } else { - // Update gerrit user - if utils.StringInSlice(user.LfUsername, gerritICLAECLAs) { - gerritIclaErr := repo.gerritService.RemoveUserFromGroup(ctx, &authUser, approvalList.ClaGroupID, user.LfUsername, utils.ClaTypeICLA) - if gerritIclaErr != nil { - msg := fmt.Sprintf("unable to remove gerrit user: %s from group: %s", user.LfUsername, approvalList.ClaGroupID) - log.WithFields(f).WithError(gerritIclaErr).Warn(msg) - } - eclaErr := repo.gerritService.RemoveUserFromGroup(ctx, &authUser, approvalList.ClaGroupID, user.LfUsername, utils.ClaTypeECLA) - if eclaErr != nil { - msg := fmt.Sprintf("unable to remove gerrit user: %s from group: %s", user.LfUsername, approvalList.ClaGroupID) - log.WithFields(f).WithError(eclaErr).Warn(msg) - } - } + // // Update gerrit user + // if utils.StringInSlice(user.LfUsername, gerritICLAECLAs) { + // // gerritIclaErr := repo.gerritService.RemoveUserFromGroup(ctx, &authUser, approvalList.ClaGroupID, user.LfUsername, utils.ClaTypeICLA) + // if gerritIclaErr != nil { + // msg := fmt.Sprintf("unable to remove gerrit user: %s from group: %s", user.LfUsername, approvalList.ClaGroupID) + // log.WithFields(f).WithError(gerritIclaErr).Warn(msg) + // } + // eclaErr := repo.gerritService.RemoveUserFromGroup(ctx, &authUser, approvalList.ClaGroupID, user.LfUsername, utils.ClaTypeECLA) + // if eclaErr != nil { + // msg := fmt.Sprintf("unable to remove gerrit user: %s from group: %s", user.LfUsername, approvalList.ClaGroupID) + // log.WithFields(f).WithError(eclaErr).Warn(msg) + // } + // } results <- &ICLAUserResponse{ ICLASignature: &models.IclaSignature{ GithubUsername: icla.UserGHUsername, @@ -4053,10 +4052,10 @@ func (repo repository) verifyUserApprovals(ctx context.Context, userID, signatur } email := getBestEmail(user) - authUser := auth.User{ - Email: claManager.LfEmail.String(), - UserName: claManager.LfUsername, - } + // authUser := auth.User{ + // Email: claManager.LfEmail.String(), + // UserName: claManager.LfUsername, + // } if approvalList.Criteria == utils.EmailDomainCriteria { // Handle Domains @@ -4072,20 +4071,20 @@ func (repo repository) verifyUserApprovals(ctx context.Context, userID, signatur return user, err } - // Update Gerrit group users - if utils.StringInSlice(user.LfUsername, approvalList.GerritICLAECLAs) { - log.WithFields(f).Debugf("removing gerrit user:%s from claGroup: %s ...", user.LfUsername, approvalList.ClaGroupID) - iclaErr := repo.gerritService.RemoveUserFromGroup(ctx, &authUser, approvalList.ClaGroupID, user.LfUsername, utils.ClaTypeICLA) - if iclaErr != nil { - msg := fmt.Sprintf("unable to remove gerrit user:%s from group:%s", user.LfUsername, approvalList.ClaGroupID) - log.WithFields(f).Warn(msg) - } - eclaErr := repo.gerritService.RemoveUserFromGroup(ctx, &authUser, approvalList.ClaGroupID, user.LfUsername, utils.ClaTypeECLA) - if eclaErr != nil { - msg := fmt.Sprintf("unable to remove gerrit user:%s from group:%s", user.LfUsername, approvalList.ClaGroupID) - log.WithFields(f).Warn(msg) - } - } + // // Update Gerrit group users + // if utils.StringInSlice(user.LfUsername, approvalList.GerritICLAECLAs) { + // log.WithFields(f).Debugf("removing gerrit user:%s from claGroup: %s ...", user.LfUsername, approvalList.ClaGroupID) + // iclaErr := repo.gerritService.RemoveUserFromGroup(ctx, &authUser, approvalList.ClaGroupID, user.LfUsername, utils.ClaTypeICLA) + // if iclaErr != nil { + // msg := fmt.Sprintf("unable to remove gerrit user:%s from group:%s", user.LfUsername, approvalList.ClaGroupID) + // log.WithFields(f).Warn(msg) + // } + // eclaErr := repo.gerritService.RemoveUserFromGroup(ctx, &authUser, approvalList.ClaGroupID, user.LfUsername, utils.ClaTypeECLA) + // if eclaErr != nil { + // msg := fmt.Sprintf("unable to remove gerrit user:%s from group:%s", user.LfUsername, approvalList.ClaGroupID) + // log.WithFields(f).Warn(msg) + // } + // } } } } else if approvalList.Criteria == utils.GitHubOrgCriteria { @@ -4947,32 +4946,32 @@ func (repo repository) ActivateSignature(ctx context.Context, signatureID string } // getGerritUsers is a helper function to fetch the list of gerrit users for the specified type - results are returned through the specified results channel -func (repo repository) getGerritUsers(ctx context.Context, authUser *auth.User, projectSFID string, claType string, gerritResultChannel chan *GerritUserResponse) { - f := logrus.Fields{ - "functionName": "v1.signatures.repository.getGerritUsers", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "projectSFID": projectSFID, - } - log.WithFields(f).Debugf("querying gerrit for %s gerrit users...", claType) - gerritIclaUsers, getGerritQueryErr := repo.gerritService.GetUsersOfGroup(ctx, authUser, projectSFID, claType) - if getGerritQueryErr != nil || gerritIclaUsers == nil { - msg := fmt.Sprintf("unable to fetch gerrit users for claGroup: %s , claType: %s ", projectSFID, claType) - log.WithFields(f).WithError(getGerritQueryErr).Warn(msg) - gerritResultChannel <- &GerritUserResponse{ - gerritGroupResponse: nil, - queryType: claType, - Error: errors.New(msg), - } - return - } - - log.WithFields(f).Debugf("retrieved %d gerrit users for CLA type: %s...", len(gerritIclaUsers.Members), claType) - gerritResultChannel <- &GerritUserResponse{ - gerritGroupResponse: gerritIclaUsers, - queryType: claType, - Error: nil, - } -} +// func (repo repository) getGerritUsers(ctx context.Context, authUser *auth.User, projectSFID string, claType string, gerritResultChannel chan *GerritUserResponse) { +// // f := logrus.Fields{ +// // "functionName": "v1.signatures.repository.getGerritUsers", +// // utils.XREQUESTID: ctx.Value(utils.XREQUESTID), +// // "projectSFID": projectSFID, +// // } +// // log.WithFields(f).Debugf("querying gerrit for %s gerrit users...", claType) +// // gerritIclaUsers, getGerritQueryErr := repo.gerritService.GetUsersOfGroup(ctx, authUser, projectSFID, claType) +// // if getGerritQueryErr != nil || gerritIclaUsers == nil { +// // msg := fmt.Sprintf("unable to fetch gerrit users for claGroup: %s , claType: %s ", projectSFID, claType) +// // log.WithFields(f).WithError(getGerritQueryErr).Warn(msg) +// // gerritResultChannel <- &GerritUserResponse{ +// // gerritGroupResponse: nil, +// // queryType: claType, +// // Error: errors.New(msg), +// // } +// // return +// // } + +// // log.WithFields(f).Debugf("retrieved %d gerrit users for CLA type: %s...", len(gerritIclaUsers.Members), claType) +// gerritResultChannel <- &GerritUserResponse{ +// gerritGroupResponse: nil, +// queryType: claType, +// Error: nil, +// } +// } func buildNextKey(indexName string, signature *models.Signature) (string, error) { nextKey := make(map[string]*dynamodb.AttributeValue) diff --git a/cla-backend-go/swagger/cla.v2.yaml b/cla-backend-go/swagger/cla.v2.yaml index 098fceb2f..f84d6ee3a 100644 --- a/cla-backend-go/swagger/cla.v2.yaml +++ b/cla-backend-go/swagger/cla.v2.yaml @@ -3222,201 +3222,201 @@ paths: tags: - gerrits - /cla-group/{claGroupID}/project/{projectSFID}/gerrits/icla/user: - get: - summary: Get Gerrit ICLA Users - description: Gets the authorized individual CLA users from a gerrit instance for the CLA Group/Projecct - operationId: getGerritICLAUser - parameters: - - $ref: "#/parameters/x-request-id" - - $ref: "#/parameters/x-acl" - - $ref: "#/parameters/x-username" - - $ref: "#/parameters/x-email" - - $ref: "#/parameters/path-claGroupID" - - $ref: "#/parameters/path-projectSFID" - responses: - '200': - description: 'Success' - headers: - x-request-id: - type: string - description: The unique request ID value - assigned/set by the API Gateway based on the session - schema: - $ref: '#/definitions/gerrit-group-response' - '400': - $ref: '#/responses/invalid-request' - '403': - $ref: '#/responses/forbidden' - '409': - $ref: '#/responses/conflict' - '500': - $ref: '#/responses/internal-server-error' - tags: - - gerrits - put: - summary: Add Gerrit ICLA Users - description: Adds one or more individual CLA users to the gerrit CLA Group/project - operationId: addGerritICLAUser - parameters: - - $ref: "#/parameters/x-request-id" - - $ref: "#/parameters/x-acl" - - $ref: "#/parameters/x-username" - - $ref: "#/parameters/x-email" - - $ref: "#/parameters/path-claGroupID" - - $ref: "#/parameters/path-projectSFID" - - in: body - name: add-gerrit-user-input - schema: - $ref: '#/definitions/add-gerrit-user-input' - required: true - responses: - '200': - description: 'Success' - headers: - x-request-id: - type: string - description: The unique request ID value - assigned/set by the API Gateway based on the session - '400': - $ref: '#/responses/invalid-request' - '403': - $ref: '#/responses/forbidden' - '409': - $ref: '#/responses/conflict' - '500': - $ref: '#/responses/internal-server-error' - tags: - - gerrits - delete: - summary: Remove Gerrit ICLA Users - description: Removes one or more individual CLA users from a gerrit instance for the CLA Group/Project - operationId: removeGerritICLAUser - parameters: - - $ref: "#/parameters/x-request-id" - - $ref: "#/parameters/x-acl" - - $ref: "#/parameters/x-username" - - $ref: "#/parameters/x-email" - - $ref: "#/parameters/path-claGroupID" - - $ref: "#/parameters/path-projectSFID" - - in: body - name: remove-gerrit-user-input - schema: - $ref: '#/definitions/remove-gerrit-user-input' - required: true - responses: - '200': - description: 'Success' - headers: - x-request-id: - type: string - description: The unique request ID value - assigned/set by the API Gateway based on the session - '400': - $ref: '#/responses/invalid-request' - '403': - $ref: '#/responses/forbidden' - '409': - $ref: '#/responses/conflict' - '500': - $ref: '#/responses/internal-server-error' - tags: - - gerrits - - /cla-group/{claGroupID}/project/{projectSFID}/gerrits/ecla/user: - get: - summary: Get Gerrit ECLA Users - description: Gets the authorized employee CLA users from a gerrit instance for the CLA Group/Projecct - operationId: getGerritECLAUser - parameters: - - $ref: "#/parameters/x-request-id" - - $ref: "#/parameters/x-acl" - - $ref: "#/parameters/x-username" - - $ref: "#/parameters/x-email" - - $ref: "#/parameters/path-claGroupID" - - $ref: "#/parameters/path-projectSFID" - responses: - '200': - description: 'Success' - headers: - x-request-id: - type: string - description: The unique request ID value - assigned/set by the API Gateway based on the session - schema: - $ref: '#/definitions/gerrit-group-response' - '400': - $ref: '#/responses/invalid-request' - '403': - $ref: '#/responses/forbidden' - '409': - $ref: '#/responses/conflict' - '500': - $ref: '#/responses/internal-server-error' - tags: - - gerrits - put: - summary: Add Gerrit ECLA Users - description: Adds one or more employee CLA users to a gerrit instance for the CLA Group/Project - operationId: addGerritECLAUser - parameters: - - $ref: "#/parameters/x-request-id" - - $ref: "#/parameters/x-acl" - - $ref: "#/parameters/x-username" - - $ref: "#/parameters/x-email" - - $ref: "#/parameters/path-claGroupID" - - $ref: "#/parameters/path-projectSFID" - - in: body - name: add-gerrit-user-input - schema: - $ref: '#/definitions/add-gerrit-user-input' - required: true - responses: - '200': - description: 'Success' - headers: - x-request-id: - type: string - description: The unique request ID value - assigned/set by the API Gateway based on the session - '400': - $ref: '#/responses/invalid-request' - '403': - $ref: '#/responses/forbidden' - '409': - $ref: '#/responses/conflict' - '500': - $ref: '#/responses/internal-server-error' - tags: - - gerrits - delete: - summary: Remove Gerrit ECLA Users - description: Removes one or more employee CLA users from a gerrit instance for the project - operationId: removeGerritECLAUser - parameters: - - $ref: "#/parameters/x-request-id" - - $ref: "#/parameters/x-acl" - - $ref: "#/parameters/x-username" - - $ref: "#/parameters/x-email" - - $ref: "#/parameters/path-claGroupID" - - $ref: "#/parameters/path-projectSFID" - - in: body - name: remove-gerrit-user-input - schema: - $ref: '#/definitions/remove-gerrit-user-input' - required: true - responses: - '200': - description: 'Success' - headers: - x-request-id: - type: string - description: The unique request ID value - assigned/set by the API Gateway based on the session - '400': - $ref: '#/responses/invalid-request' - '403': - $ref: '#/responses/forbidden' - '409': - $ref: '#/responses/conflict' - '500': - $ref: '#/responses/internal-server-error' - tags: - - gerrits + # /cla-group/{claGroupID}/project/{projectSFID}/gerrits/icla/user: + # get: + # summary: Get Gerrit ICLA Users + # description: Gets the authorized individual CLA users from a gerrit instance for the CLA Group/Projecct + # operationId: getGerritICLAUser + # parameters: + # - $ref: "#/parameters/x-request-id" + # - $ref: "#/parameters/x-acl" + # - $ref: "#/parameters/x-username" + # - $ref: "#/parameters/x-email" + # - $ref: "#/parameters/path-claGroupID" + # - $ref: "#/parameters/path-projectSFID" + # responses: + # '200': + # description: 'Success' + # headers: + # x-request-id: + # type: string + # description: The unique request ID value - assigned/set by the API Gateway based on the session + # schema: + # $ref: '#/definitions/gerrit-group-response' + # '400': + # $ref: '#/responses/invalid-request' + # '403': + # $ref: '#/responses/forbidden' + # '409': + # $ref: '#/responses/conflict' + # '500': + # $ref: '#/responses/internal-server-error' + # tags: + # - gerrits + # put: + # summary: Add Gerrit ICLA Users + # description: Adds one or more individual CLA users to the gerrit CLA Group/project + # operationId: addGerritICLAUser + # parameters: + # - $ref: "#/parameters/x-request-id" + # - $ref: "#/parameters/x-acl" + # - $ref: "#/parameters/x-username" + # - $ref: "#/parameters/x-email" + # - $ref: "#/parameters/path-claGroupID" + # - $ref: "#/parameters/path-projectSFID" + # - in: body + # name: add-gerrit-user-input + # schema: + # $ref: '#/definitions/add-gerrit-user-input' + # required: true + # responses: + # '200': + # description: 'Success' + # headers: + # x-request-id: + # type: string + # description: The unique request ID value - assigned/set by the API Gateway based on the session + # '400': + # $ref: '#/responses/invalid-request' + # '403': + # $ref: '#/responses/forbidden' + # '409': + # $ref: '#/responses/conflict' + # '500': + # $ref: '#/responses/internal-server-error' + # tags: + # - gerrits + # delete: + # summary: Remove Gerrit ICLA Users + # description: Removes one or more individual CLA users from a gerrit instance for the CLA Group/Project + # operationId: removeGerritICLAUser + # parameters: + # - $ref: "#/parameters/x-request-id" + # - $ref: "#/parameters/x-acl" + # - $ref: "#/parameters/x-username" + # - $ref: "#/parameters/x-email" + # - $ref: "#/parameters/path-claGroupID" + # - $ref: "#/parameters/path-projectSFID" + # - in: body + # name: remove-gerrit-user-input + # schema: + # $ref: '#/definitions/remove-gerrit-user-input' + # required: true + # responses: + # '200': + # description: 'Success' + # headers: + # x-request-id: + # type: string + # description: The unique request ID value - assigned/set by the API Gateway based on the session + # '400': + # $ref: '#/responses/invalid-request' + # '403': + # $ref: '#/responses/forbidden' + # '409': + # $ref: '#/responses/conflict' + # '500': + # $ref: '#/responses/internal-server-error' + # tags: + # - gerrits + + # /cla-group/{claGroupID}/project/{projectSFID}/gerrits/ecla/user: + # get: + # summary: Get Gerrit ECLA Users + # description: Gets the authorized employee CLA users from a gerrit instance for the CLA Group/Projecct + # operationId: getGerritECLAUser + # parameters: + # - $ref: "#/parameters/x-request-id" + # - $ref: "#/parameters/x-acl" + # - $ref: "#/parameters/x-username" + # - $ref: "#/parameters/x-email" + # - $ref: "#/parameters/path-claGroupID" + # - $ref: "#/parameters/path-projectSFID" + # responses: + # '200': + # description: 'Success' + # headers: + # x-request-id: + # type: string + # description: The unique request ID value - assigned/set by the API Gateway based on the session + # schema: + # $ref: '#/definitions/gerrit-group-response' + # '400': + # $ref: '#/responses/invalid-request' + # '403': + # $ref: '#/responses/forbidden' + # '409': + # $ref: '#/responses/conflict' + # '500': + # $ref: '#/responses/internal-server-error' + # tags: + # - gerrits + # put: + # summary: Add Gerrit ECLA Users + # description: Adds one or more employee CLA users to a gerrit instance for the CLA Group/Project + # operationId: addGerritECLAUser + # parameters: + # - $ref: "#/parameters/x-request-id" + # - $ref: "#/parameters/x-acl" + # - $ref: "#/parameters/x-username" + # - $ref: "#/parameters/x-email" + # - $ref: "#/parameters/path-claGroupID" + # - $ref: "#/parameters/path-projectSFID" + # - in: body + # name: add-gerrit-user-input + # schema: + # $ref: '#/definitions/add-gerrit-user-input' + # required: true + # responses: + # '200': + # description: 'Success' + # headers: + # x-request-id: + # type: string + # description: The unique request ID value - assigned/set by the API Gateway based on the session + # '400': + # $ref: '#/responses/invalid-request' + # '403': + # $ref: '#/responses/forbidden' + # '409': + # $ref: '#/responses/conflict' + # '500': + # $ref: '#/responses/internal-server-error' + # tags: + # - gerrits + # delete: + # summary: Remove Gerrit ECLA Users + # description: Removes one or more employee CLA users from a gerrit instance for the project + # operationId: removeGerritECLAUser + # parameters: + # - $ref: "#/parameters/x-request-id" + # - $ref: "#/parameters/x-acl" + # - $ref: "#/parameters/x-username" + # - $ref: "#/parameters/x-email" + # - $ref: "#/parameters/path-claGroupID" + # - $ref: "#/parameters/path-projectSFID" + # - in: body + # name: remove-gerrit-user-input + # schema: + # $ref: '#/definitions/remove-gerrit-user-input' + # required: true + # responses: + # '200': + # description: 'Success' + # headers: + # x-request-id: + # type: string + # description: The unique request ID value - assigned/set by the API Gateway based on the session + # '400': + # $ref: '#/responses/invalid-request' + # '403': + # $ref: '#/responses/forbidden' + # '409': + # $ref: '#/responses/conflict' + # '500': + # $ref: '#/responses/internal-server-error' + # tags: + # - gerrits /cla-group/{claGroupID}/user/{userID}/icla: put: summary: Invalidate ICLA record diff --git a/cla-backend-go/swagger/common/add-gerrit-input.yaml b/cla-backend-go/swagger/common/add-gerrit-input.yaml index 9ad977a16..858bafa89 100644 --- a/cla-backend-go/swagger/common/add-gerrit-input.yaml +++ b/cla-backend-go/swagger/common/add-gerrit-input.yaml @@ -26,20 +26,6 @@ properties: minLength: 10 maxLength: 255 pattern: ^(?:http(s)?:\/\/).+$ - groupIdCcla: - type: string - description: the LDAP group ID for CCLA encoded as a string value - example: '1902' - minLength: 1 - maxLength: 12 - pattern: ^[1-9]\d{0,11}$ - groupIdIcla: - type: string - description: the LDAP group ID for ICLA encoded as a string value - example: '1903' - minLength: 1 - maxLength: 12 - pattern: ^[1-9]\d{0,11}$ version: type: string description: the version associated with the gerrit record diff --git a/cla-backend-go/swagger/common/gerrit.yaml b/cla-backend-go/swagger/common/gerrit.yaml index 589cc40c2..e3d738c44 100644 --- a/cla-backend-go/swagger/common/gerrit.yaml +++ b/cla-backend-go/swagger/common/gerrit.yaml @@ -40,25 +40,6 @@ properties: minLength: 1 maxLength: 12 pattern: ^[1-9]\d{0,11}$ - groupIdIcla: - type: string - description: the LDAP group ID for ICLA encoded as a string value - example: '1903' - minLength: 1 - maxLength: 12 - pattern: ^[1-9]\d{0,11}$ - groupNameCcla: - type: string - description: the LDAP group name for CCLA - example: 'onap-cla-ccla' - minLength: 3 - maxLength: 20 - groupNameIcla: - type: string - description: the LDAP group name for ICLA - example: 'onap-cla-icla' - minLength: 3 - maxLength: 20 projectSFID: type: string description: the Project SalesForce ID (external ID) associated with this gerrit record diff --git a/cla-backend-go/v2/gerrits/handlers.go b/cla-backend-go/v2/gerrits/handlers.go index c0da4a705..1fb02686a 100644 --- a/cla-backend-go/v2/gerrits/handlers.go +++ b/cla-backend-go/v2/gerrits/handlers.go @@ -129,11 +129,9 @@ func Configure(api *operations.EasyclaAPI, v1Service v1Gerrits.Service, projectS // add the gerrit addGerritInput := &v1Models.AddGerritInput{ - GerritName: params.AddGerritInput.GerritName, - GerritURL: params.AddGerritInput.GerritURL, - GroupIDCcla: params.AddGerritInput.GroupIDCcla, - GroupIDIcla: params.AddGerritInput.GroupIDIcla, - Version: "v2", + GerritName: params.AddGerritInput.GerritName, + GerritURL: params.AddGerritInput.GerritURL, + Version: "v2", } result, err := v1Service.AddGerrit(ctx, params.ClaGroupID, params.ProjectSFID, addGerritInput, projectModel) if err != nil { @@ -261,195 +259,195 @@ func Configure(api *operations.EasyclaAPI, v1Service v1Gerrits.Service, projectS return gerrits.NewGetGerritReposOK().WithXRequestID(reqID).WithPayload(&response) }) - api.GerritsGetGerritICLAUserHandler = gerrits.GetGerritICLAUserHandlerFunc(func(params gerrits.GetGerritICLAUserParams, authUser *auth.User) middleware.Responder { - reqID := utils.GetRequestID(params.XREQUESTID) - ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint - utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) - f := logrus.Fields{ - "functionName": "v2.gerrits.handlers.GerritsGetGerritICLAUserHandler", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "authUserName": authUser.UserName, - "authUserEmail": authUser.Email, - "claGroupID": params.ClaGroupID, - "projectSFID": params.ProjectSFID, - } - - // verify user have access to the project - if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { - msg := fmt.Sprintf("user %s does not have access to get gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) - log.WithFields(f).Warn(msg) - return gerrits.NewGetGerritICLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) - } - - log.WithFields(f).Debugf("getting user list to gerrit...") - responseModel, err := v1Service.GetUsersOfGroup(ctx, authUser, params.ClaGroupID, utils.ClaTypeICLA) - if err != nil { - msg := fmt.Sprintf("problem getting user list of CLA Group %s", params.ClaGroupID) - log.WithFields(f).WithError(err).Warn(msg) - return gerrits.NewGetGerritICLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) - } - - return gerrits.NewGetGerritICLAUserOK().WithXRequestID(reqID).WithPayload(responseModel) - }) - - api.GerritsGetGerritECLAUserHandler = gerrits.GetGerritECLAUserHandlerFunc(func(params gerrits.GetGerritECLAUserParams, authUser *auth.User) middleware.Responder { - reqID := utils.GetRequestID(params.XREQUESTID) - ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint - utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) - f := logrus.Fields{ - "functionName": "v2.gerrits.handlers.GerritsGetGerritECLAUserHandler", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "authUserName": authUser.UserName, - "authUserEmail": authUser.Email, - "claGroupID": params.ClaGroupID, - "projectSFID": params.ProjectSFID, - } - - // verify user have access to the project - if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { - msg := fmt.Sprintf("user %s does not have access to get gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) - log.WithFields(f).Warn(msg) - return gerrits.NewGetGerritECLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) - } - - log.WithFields(f).Debugf("getting user list to gerrit...") - responseModel, err := v1Service.GetUsersOfGroup(ctx, authUser, params.ClaGroupID, utils.ClaTypeECLA) - if err != nil { - msg := fmt.Sprintf("problem getting user list of CLA Group %s", params.ClaGroupID) - log.WithFields(f).WithError(err).Warn(msg) - return gerrits.NewGetGerritECLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) - } - - return gerrits.NewGetGerritECLAUserOK().WithXRequestID(reqID).WithPayload(responseModel) - }) - - api.GerritsAddGerritICLAUserHandler = gerrits.AddGerritICLAUserHandlerFunc(func(params gerrits.AddGerritICLAUserParams, authUser *auth.User) middleware.Responder { - reqID := utils.GetRequestID(params.XREQUESTID) - ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint - utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) - f := logrus.Fields{ - "functionName": "v2.gerrits.handlers.GerritsAddGerritICLAUserHandler", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "authUserName": authUser.UserName, - "authUserEmail": authUser.Email, - "claGroupID": params.ClaGroupID, - "projectSFID": params.ProjectSFID, - "gerritUsers": strings.Join(params.AddGerritUserInput, ","), - } - - // verify user have access to the project - if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { - msg := fmt.Sprintf("user %s does not have access to add gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) - log.WithFields(f).Warn(msg) - return gerrits.NewAddGerritICLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) - } - - log.WithFields(f).Debugf("adding user list to gerrit...") - err := v1Service.AddUsersToGroup(ctx, authUser, params.ClaGroupID, params.AddGerritUserInput, utils.ClaTypeICLA) - if err != nil { - msg := fmt.Sprintf("problem adding user list %s to CLA Group %s", strings.Join(params.AddGerritUserInput, ","), params.ClaGroupID) - log.WithFields(f).WithError(err).Warn(msg) - return gerrits.NewAddGerritICLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) - } - - return gerrits.NewAddGerritICLAUserOK().WithXRequestID(reqID) - }) - - api.GerritsRemoveGerritICLAUserHandler = gerrits.RemoveGerritICLAUserHandlerFunc(func(params gerrits.RemoveGerritICLAUserParams, authUser *auth.User) middleware.Responder { - reqID := utils.GetRequestID(params.XREQUESTID) - ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint - utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) - f := logrus.Fields{ - "functionName": "v2.gerrits.handlers.GerritsRemoveGerritICLAUserHandler", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "authUserName": authUser.UserName, - "authUserEmail": authUser.Email, - "claGroupID": params.ClaGroupID, - "projectSFID": params.ProjectSFID, - "gerritUsers": strings.Join(params.RemoveGerritUserInput, ","), - } - - // verify user have access to the project - if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { - msg := fmt.Sprintf("user %s does not have access to remove gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) - log.WithFields(f).Warn(msg) - return gerrits.NewRemoveGerritICLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) - } - - log.WithFields(f).Debugf("removing user list from gerrit...") - err := v1Service.RemoveUsersFromGroup(ctx, authUser, params.ClaGroupID, params.RemoveGerritUserInput, utils.ClaTypeICLA) - if err != nil { - msg := fmt.Sprintf("problem removing user list %s to CLA Group %s", strings.Join(params.RemoveGerritUserInput, ","), params.ClaGroupID) - log.WithFields(f).WithError(err).Warn(msg) - return gerrits.NewRemoveGerritICLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) - } - - return gerrits.NewRemoveGerritICLAUserOK().WithXRequestID(reqID) - }) - - api.GerritsAddGerritECLAUserHandler = gerrits.AddGerritECLAUserHandlerFunc(func(params gerrits.AddGerritECLAUserParams, authUser *auth.User) middleware.Responder { - reqID := utils.GetRequestID(params.XREQUESTID) - ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint - utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) - f := logrus.Fields{ - "functionName": "v2.gerrits.handlers.GerritsAddGerritECLAUserHandler", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "authUserName": authUser.UserName, - "authUserEmail": authUser.Email, - "claGroupID": params.ClaGroupID, - "projectSFID": params.ProjectSFID, - "gerritUsers": strings.Join(params.AddGerritUserInput, ","), - } - - // verify user have access to the project - if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { - msg := fmt.Sprintf("user %s does not have access to add gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) - log.WithFields(f).Warn(msg) - return gerrits.NewAddGerritECLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) - } - - log.WithFields(f).Debugf("adding user list to gerrit...") - err := v1Service.AddUsersToGroup(ctx, authUser, params.ClaGroupID, params.AddGerritUserInput, utils.ClaTypeECLA) - if err != nil { - msg := fmt.Sprintf("problem adding user list %s to CLA Group %s", strings.Join(params.AddGerritUserInput, ","), params.ClaGroupID) - log.WithFields(f).WithError(err).Warn(msg) - return gerrits.NewAddGerritECLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) - } - - return gerrits.NewAddGerritECLAUserOK().WithXRequestID(reqID) - }) - - api.GerritsRemoveGerritECLAUserHandler = gerrits.RemoveGerritECLAUserHandlerFunc(func(params gerrits.RemoveGerritECLAUserParams, authUser *auth.User) middleware.Responder { - reqID := utils.GetRequestID(params.XREQUESTID) - ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint - utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) - f := logrus.Fields{ - "functionName": "v2.gerrits.handlers.GerritsRemoveGerritECLAUserHandler", - utils.XREQUESTID: ctx.Value(utils.XREQUESTID), - "authUserName": authUser.UserName, - "authUserEmail": authUser.Email, - "claGroupID": params.ClaGroupID, - "projectSFID": params.ProjectSFID, - "gerritUsers": strings.Join(params.RemoveGerritUserInput, ","), - } - - // verify user have access to the project - if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { - msg := fmt.Sprintf("user %s does not have access to remove gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) - log.WithFields(f).Warn(msg) - return gerrits.NewRemoveGerritECLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) - } - - log.WithFields(f).Debugf("removing user list from gerrit...") - err := v1Service.RemoveUsersFromGroup(ctx, authUser, params.ClaGroupID, params.RemoveGerritUserInput, utils.ClaTypeECLA) - if err != nil { - msg := fmt.Sprintf("problem removing user list %s to CLA Group %s", strings.Join(params.RemoveGerritUserInput, ","), params.ClaGroupID) - log.WithFields(f).WithError(err).Warn(msg) - return gerrits.NewRemoveGerritECLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) - } - - return gerrits.NewRemoveGerritECLAUserOK().WithXRequestID(reqID) - }) + // api.GerritsGetGerritICLAUserHandler = gerrits.GetGerritICLAUserHandlerFunc(func(params gerrits.GetGerritICLAUserParams, authUser *auth.User) middleware.Responder { + // reqID := utils.GetRequestID(params.XREQUESTID) + // ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint + // utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) + // f := logrus.Fields{ + // "functionName": "v2.gerrits.handlers.GerritsGetGerritICLAUserHandler", + // utils.XREQUESTID: ctx.Value(utils.XREQUESTID), + // "authUserName": authUser.UserName, + // "authUserEmail": authUser.Email, + // "claGroupID": params.ClaGroupID, + // "projectSFID": params.ProjectSFID, + // } + + // // verify user have access to the project + // if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { + // msg := fmt.Sprintf("user %s does not have access to get gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) + // log.WithFields(f).Warn(msg) + // return gerrits.NewGetGerritICLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) + // } + + // log.WithFields(f).Debugf("getting user list to gerrit...") + // responseModel, err := v1Service.GetUsersOfGroup(ctx, authUser, params.ClaGroupID, utils.ClaTypeICLA) + // if err != nil { + // msg := fmt.Sprintf("problem getting user list of CLA Group %s", params.ClaGroupID) + // log.WithFields(f).WithError(err).Warn(msg) + // return gerrits.NewGetGerritICLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) + // } + + // return gerrits.NewGetGerritICLAUserOK().WithXRequestID(reqID).WithPayload(responseModel) + // }) + + // api.GerritsGetGerritECLAUserHandler = gerrits.GetGerritECLAUserHandlerFunc(func(params gerrits.GetGerritECLAUserParams, authUser *auth.User) middleware.Responder { + // reqID := utils.GetRequestID(params.XREQUESTID) + // ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint + // utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) + // f := logrus.Fields{ + // "functionName": "v2.gerrits.handlers.GerritsGetGerritECLAUserHandler", + // utils.XREQUESTID: ctx.Value(utils.XREQUESTID), + // "authUserName": authUser.UserName, + // "authUserEmail": authUser.Email, + // "claGroupID": params.ClaGroupID, + // "projectSFID": params.ProjectSFID, + // } + + // // verify user have access to the project + // if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { + // msg := fmt.Sprintf("user %s does not have access to get gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) + // log.WithFields(f).Warn(msg) + // return gerrits.NewGetGerritECLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) + // } + + // log.WithFields(f).Debugf("getting user list to gerrit...") + // responseModel, err := v1Service.GetUsersOfGroup(ctx, authUser, params.ClaGroupID, utils.ClaTypeECLA) + // if err != nil { + // msg := fmt.Sprintf("problem getting user list of CLA Group %s", params.ClaGroupID) + // log.WithFields(f).WithError(err).Warn(msg) + // return gerrits.NewGetGerritECLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) + // } + + // return gerrits.NewGetGerritECLAUserOK().WithXRequestID(reqID).WithPayload(responseModel) + // }) + + // api.GerritsAddGerritICLAUserHandler = gerrits.AddGerritICLAUserHandlerFunc(func(params gerrits.AddGerritICLAUserParams, authUser *auth.User) middleware.Responder { + // reqID := utils.GetRequestID(params.XREQUESTID) + // ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint + // utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) + // f := logrus.Fields{ + // "functionName": "v2.gerrits.handlers.GerritsAddGerritICLAUserHandler", + // utils.XREQUESTID: ctx.Value(utils.XREQUESTID), + // "authUserName": authUser.UserName, + // "authUserEmail": authUser.Email, + // "claGroupID": params.ClaGroupID, + // "projectSFID": params.ProjectSFID, + // "gerritUsers": strings.Join(params.AddGerritUserInput, ","), + // } + + // // verify user have access to the project + // if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { + // msg := fmt.Sprintf("user %s does not have access to add gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) + // log.WithFields(f).Warn(msg) + // return gerrits.NewAddGerritICLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) + // } + + // log.WithFields(f).Debugf("adding user list to gerrit...") + // err := v1Service.AddUsersToGroup(ctx, authUser, params.ClaGroupID, params.AddGerritUserInput, utils.ClaTypeICLA) + // if err != nil { + // msg := fmt.Sprintf("problem adding user list %s to CLA Group %s", strings.Join(params.AddGerritUserInput, ","), params.ClaGroupID) + // log.WithFields(f).WithError(err).Warn(msg) + // return gerrits.NewAddGerritICLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) + // } + + // return gerrits.NewAddGerritICLAUserOK().WithXRequestID(reqID) + // }) + + // api.GerritsRemoveGerritICLAUserHandler = gerrits.RemoveGerritICLAUserHandlerFunc(func(params gerrits.RemoveGerritICLAUserParams, authUser *auth.User) middleware.Responder { + // reqID := utils.GetRequestID(params.XREQUESTID) + // ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint + // utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) + // f := logrus.Fields{ + // "functionName": "v2.gerrits.handlers.GerritsRemoveGerritICLAUserHandler", + // utils.XREQUESTID: ctx.Value(utils.XREQUESTID), + // "authUserName": authUser.UserName, + // "authUserEmail": authUser.Email, + // "claGroupID": params.ClaGroupID, + // "projectSFID": params.ProjectSFID, + // "gerritUsers": strings.Join(params.RemoveGerritUserInput, ","), + // } + + // // verify user have access to the project + // if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { + // msg := fmt.Sprintf("user %s does not have access to remove gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) + // log.WithFields(f).Warn(msg) + // return gerrits.NewRemoveGerritICLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) + // } + + // log.WithFields(f).Debugf("removing user list from gerrit...") + // err := v1Service.RemoveUsersFromGroup(ctx, authUser, params.ClaGroupID, params.RemoveGerritUserInput, utils.ClaTypeICLA) + // if err != nil { + // msg := fmt.Sprintf("problem removing user list %s to CLA Group %s", strings.Join(params.RemoveGerritUserInput, ","), params.ClaGroupID) + // log.WithFields(f).WithError(err).Warn(msg) + // return gerrits.NewRemoveGerritICLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) + // } + + // return gerrits.NewRemoveGerritICLAUserOK().WithXRequestID(reqID) + // }) + + // api.GerritsAddGerritECLAUserHandler = gerrits.AddGerritECLAUserHandlerFunc(func(params gerrits.AddGerritECLAUserParams, authUser *auth.User) middleware.Responder { + // reqID := utils.GetRequestID(params.XREQUESTID) + // ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint + // utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) + // f := logrus.Fields{ + // "functionName": "v2.gerrits.handlers.GerritsAddGerritECLAUserHandler", + // utils.XREQUESTID: ctx.Value(utils.XREQUESTID), + // "authUserName": authUser.UserName, + // "authUserEmail": authUser.Email, + // "claGroupID": params.ClaGroupID, + // "projectSFID": params.ProjectSFID, + // "gerritUsers": strings.Join(params.AddGerritUserInput, ","), + // } + + // // verify user have access to the project + // if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { + // msg := fmt.Sprintf("user %s does not have access to add gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) + // log.WithFields(f).Warn(msg) + // return gerrits.NewAddGerritECLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) + // } + + // log.WithFields(f).Debugf("adding user list to gerrit...") + // err := v1Service.AddUsersToGroup(ctx, authUser, params.ClaGroupID, params.AddGerritUserInput, utils.ClaTypeECLA) + // if err != nil { + // msg := fmt.Sprintf("problem adding user list %s to CLA Group %s", strings.Join(params.AddGerritUserInput, ","), params.ClaGroupID) + // log.WithFields(f).WithError(err).Warn(msg) + // return gerrits.NewAddGerritECLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) + // } + + // return gerrits.NewAddGerritECLAUserOK().WithXRequestID(reqID) + // }) + + // api.GerritsRemoveGerritECLAUserHandler = gerrits.RemoveGerritECLAUserHandlerFunc(func(params gerrits.RemoveGerritECLAUserParams, authUser *auth.User) middleware.Responder { + // reqID := utils.GetRequestID(params.XREQUESTID) + // ctx := context.WithValue(context.Background(), utils.XREQUESTID, reqID) // nolint + // utils.SetAuthUserProperties(authUser, params.XUSERNAME, params.XEMAIL) + // f := logrus.Fields{ + // "functionName": "v2.gerrits.handlers.GerritsRemoveGerritECLAUserHandler", + // utils.XREQUESTID: ctx.Value(utils.XREQUESTID), + // "authUserName": authUser.UserName, + // "authUserEmail": authUser.Email, + // "claGroupID": params.ClaGroupID, + // "projectSFID": params.ProjectSFID, + // "gerritUsers": strings.Join(params.RemoveGerritUserInput, ","), + // } + + // // verify user have access to the project + // if !utils.IsUserAuthorizedForProjectTree(ctx, authUser, params.ProjectSFID, utils.ALLOW_ADMIN_SCOPE) { + // msg := fmt.Sprintf("user %s does not have access to remove gerrit users with Project scope of %s", authUser.UserName, params.ProjectSFID) + // log.WithFields(f).Warn(msg) + // return gerrits.NewRemoveGerritECLAUserForbidden().WithXRequestID(reqID).WithPayload(utils.ErrorResponseForbidden(reqID, msg)) + // } + + // log.WithFields(f).Debugf("removing user list from gerrit...") + // err := v1Service.RemoveUsersFromGroup(ctx, authUser, params.ClaGroupID, params.RemoveGerritUserInput, utils.ClaTypeECLA) + // if err != nil { + // msg := fmt.Sprintf("problem removing user list %s to CLA Group %s", strings.Join(params.RemoveGerritUserInput, ","), params.ClaGroupID) + // log.WithFields(f).WithError(err).Warn(msg) + // return gerrits.NewRemoveGerritECLAUserInternalServerError().WithXRequestID(reqID).WithPayload(utils.ErrorResponseInternalServerErrorWithError(reqID, msg, err)) + // } + + // return gerrits.NewRemoveGerritECLAUserOK().WithXRequestID(reqID) + // }) } diff --git a/cla-backend-go/v2/sign/service.go b/cla-backend-go/v2/sign/service.go index 286e3b3a5..57ed40787 100644 --- a/cla-backend-go/v2/sign/service.go +++ b/cla-backend-go/v2/sign/service.go @@ -1007,17 +1007,17 @@ func (s *service) SignedIndividualCallbackGerrit(ctx context.Context, payload [] CLAGroupID: signature.ProjectID, }) - // Add User to Gerrit Group - if claUser.LfUsername != "" { - log.WithFields(f).Debugf("adding user to gerrit group: %s", claUser.LfUsername) - err = s.gerritService.AddUserToGroup(ctx, nil, signature.ProjectID, claUser.LfUsername, utils.ClaTypeICLA) - if err != nil { - log.WithFields(f).WithError(err).Warnf("unable to add user to gerrit group") - return err - } - } else { - log.WithFields(f).Warnf("user LF username is empty") - } + // // Add User to Gerrit Group + // if claUser.LfUsername != "" { + // log.WithFields(f).Debugf("adding user to gerrit group: %s", claUser.LfUsername) + // err = s.gerritService.AddUserToGroup(ctx, nil, signature.ProjectID, claUser.LfUsername, utils.ClaTypeICLA) + // if err != nil { + // log.WithFields(f).WithError(err).Warnf("unable to add user to gerrit group") + // return err + // } + // } else { + // log.WithFields(f).Warnf("user LF username is empty") + // } } else { log.WithFields(f).Debugf("envelope not signed - status: %s", status) @@ -1194,30 +1194,30 @@ func (s *service) SignedCorporateCallback(ctx context.Context, payload []byte, c CompanySFID: companyModel.CompanyExternalID, }) - // Check if project is a gerrit instance - var gerrits []*v1Models.Gerrit - gerritList, err := s.gerritService.GetClaGroupGerrits(ctx, projectID) - if err != nil { - log.WithFields(f).WithError(err).Warnf("unable to get gerrit instances for project: %s", projectID) - gerrits = []*v1Models.Gerrit{} - } else { - log.WithFields(f).Debugf("gerrit instances found for project: %s", projectID) - gerrits = gerritList.List - } - - // Add User to Gerrit Group - if len(gerrits) > 0 { - if user.LfUsername != "" { - log.WithFields(f).Debugf("adding user to gerrit group: %s", user.LfUsername) - err = s.gerritService.AddUserToGroup(ctx, nil, projectID, user.LfUsername, utils.ClaTypeCCLA) - if err != nil { - log.WithFields(f).WithError(err).Warnf("unable to add user to gerrit group") - return err - } - } else { - log.WithFields(f).Warnf("user LF username is empty") - } - } + // // Check if project is a gerrit instance + // var gerrits []*v1Models.Gerrit + // gerritList, err := s.gerritService.GetClaGroupGerrits(ctx, projectID) + // if err != nil { + // log.WithFields(f).WithError(err).Warnf("unable to get gerrit instances for project: %s", projectID) + // gerrits = []*v1Models.Gerrit{} + // } else { + // log.WithFields(f).Debugf("gerrit instances found for project: %s", projectID) + // gerrits = gerritList.List + // } + + // // Add User to Gerrit Group + // if len(gerrits) > 0 { + // if user.LfUsername != "" { + // log.WithFields(f).Debugf("adding user to gerrit group: %s", user.LfUsername) + // err = s.gerritService.AddUserToGroup(ctx, nil, projectID, user.LfUsername, utils.ClaTypeCCLA) + // if err != nil { + // log.WithFields(f).WithError(err).Warnf("unable to add user to gerrit group") + // return err + // } + // } else { + // log.WithFields(f).Warnf("user LF username is empty") + // } + // } return nil