Skip to content

Commit 4037b41

Browse files
committed
using min access level for project listing
1 parent 2da57fd commit 4037b41

2 files changed

Lines changed: 17 additions & 6 deletions

File tree

internal/core/integrations/external_entity_provider_service.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,13 +206,19 @@ func (s externalEntityProviderService) createProjectsMap(created, updated []mode
206206
}
207207

208208
func (s externalEntityProviderService) syncProjectsAndAssets(ctx core.Context, domainRBAC core.AccessControl, user string, originalProjects []models.Project, roles []core.Role, projects []models.Project) error {
209+
wg := utils.ErrGroup[any](10)
209210
for i, project := range projects {
210-
if err := s.syncSingleProject(ctx, domainRBAC, user, &originalProjects[i], roles[i], &project); err != nil {
211-
slog.Error("could not sync project", "projectSlug", project.Slug, "projectID", project.ID, "err", err)
212-
continue
213-
}
211+
wg.Go(func() (any, error) {
212+
if err := s.syncSingleProject(ctx, domainRBAC, user, &originalProjects[i], roles[i], &project); err != nil {
213+
slog.Error("could not sync project", "projectSlug", project.Slug, "projectID", project.ID, "err", err)
214+
// swallow the error right here
215+
}
216+
return nil, nil
217+
})
218+
214219
}
215-
return nil
220+
_, err := wg.WaitAndCollect()
221+
return err
216222
}
217223

218224
func (s externalEntityProviderService) syncSingleProject(ctx core.Context, domainRBAC core.AccessControl, user string, originalProject *models.Project, userRole core.Role, project *models.Project) error {

internal/core/integrations/gitlabint/gitlab_integration.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,8 @@ func (g *GitlabIntegration) ListProjects(ctx context.Context, userID string, pro
426426
}
427427
// get the projects in the group
428428
projects, _, err := gitlabClient.ListProjectsInGroup(ctx, groupIDInt, &gitlab.ListGroupProjectsOptions{
429-
WithShared: gitlab.Ptr(false),
429+
WithShared: gitlab.Ptr(false),
430+
MinAccessLevel: gitlab.Ptr(gitlab.DeveloperPermissions), // only list projects where the user has at least developer permissions
430431
})
431432
if err != nil {
432433
slog.Error("failed to list projects in group", "err", err)
@@ -441,6 +442,10 @@ func (g *GitlabIntegration) ListProjects(ctx context.Context, userID string, pro
441442
if project.Permissions != nil && project.Permissions.ProjectAccess != nil {
442443
result = append(result, projectToAsset(project, providerID))
443444
accessLevels = append(accessLevels, gitlabAccessLevelToRole(project.Permissions.ProjectAccess.AccessLevel))
445+
} else {
446+
// if the project has no permissions set, it is a public project - but we asked for min access level of developer, so we can assume that the user has at least developer permissions
447+
result = append(result, projectToAsset(project, providerID))
448+
accessLevels = append(accessLevels, core.RoleMember) // default to member if no higher access level is found
444449
}
445450
}
446451

0 commit comments

Comments
 (0)