Wire post-OAuth pickers and 2-auto callback handling → Track e2e gap for new access-review connectors

- Wire post-OAuth pickers and 2-auto callback handling
- Add 13 vendor logo components for new connectors
- Wire access-review connectors into bootstrap config
- Track e2e gap for new access-review connectors

Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
This commit is contained in:
Aurélien Sibiril
2026-05-17 17:22:48 +02:00
parent 1532e94eb1
commit 8f6ecd9f81
24 changed files with 913 additions and 10 deletions

View File

@@ -411,6 +411,57 @@ func (r *accessSourceResolver) ProviderOrganizations(ctx context.Context, obj *t
return nil, fmt.Errorf("cannot fetch sentry organizations: %w", err)
}
return orgs, nil
case coredata.ConnectorProviderGitLab:
orgs, err := fetchGitLabOrganizations(ctx, httpClient)
if err != nil {
return nil, fmt.Errorf("cannot fetch gitlab organizations: %w", err)
}
return orgs, nil
case coredata.ConnectorProviderBitbucket:
orgs, err := fetchBitbucketOrganizations(ctx, httpClient)
if err != nil {
return nil, fmt.Errorf("cannot fetch bitbucket organizations: %w", err)
}
return orgs, nil
case coredata.ConnectorProviderHeroku:
orgs, err := fetchHerokuOrganizations(ctx, httpClient)
if err != nil {
return nil, fmt.Errorf("cannot fetch heroku organizations: %w", err)
}
return orgs, nil
case coredata.ConnectorProviderAsana:
orgs, err := fetchAsanaOrganizations(ctx, httpClient)
if err != nil {
return nil, fmt.Errorf("cannot fetch asana organizations: %w", err)
}
return orgs, nil
case coredata.ConnectorProviderPagerDuty:
// PagerDuty uses Pattern 2-auto: the subdomain is captured during
// the OAuth callback, no picker UI is required.
return []*types.ProviderOrganization{}, nil
case coredata.ConnectorProviderSnyk:
orgs, err := fetchSnykOrganizations(ctx, httpClient)
if err != nil {
return nil, fmt.Errorf("cannot fetch snyk organizations: %w", err)
}
return orgs, nil
case coredata.ConnectorProviderNetlify:
orgs, err := fetchNetlifyOrganizations(ctx, httpClient)
if err != nil {
return nil, fmt.Errorf("cannot fetch netlify organizations: %w", err)
}
return orgs, nil
case coredata.ConnectorProviderClickUp:
orgs, err := fetchClickUpOrganizations(ctx, httpClient)
if err != nil {
return nil, fmt.Errorf("cannot fetch clickup organizations: %w", err)
}
return orgs, nil
case coredata.ConnectorProviderVercel:
// Vercel uses Pattern 2-auto: the team_id is captured during the
// OAuth callback (or synthesized from /v2/user for personal
// accounts), no picker UI is required.
return []*types.ProviderOrganization{}, nil
default:
return []*types.ProviderOrganization{}, nil
}
@@ -439,6 +490,38 @@ func (r *accessSourceResolver) NeedsConfiguration(ctx context.Context, obj *type
case coredata.ConnectorProviderSentry:
settings, _ := dbConnector.SentrySettings()
return settings.OrganizationSlug == "", nil
case coredata.ConnectorProviderGitLab:
settings, _ := dbConnector.GitLabSettings()
return settings.GroupID == "", nil
case coredata.ConnectorProviderBitbucket:
settings, _ := dbConnector.BitbucketSettings()
return settings.Workspace == "", nil
case coredata.ConnectorProviderHeroku:
settings, _ := dbConnector.HerokuSettings()
return settings.TeamID == "", nil
case coredata.ConnectorProviderAsana:
settings, _ := dbConnector.AsanaSettings()
return settings.WorkspaceGID == "", nil
case coredata.ConnectorProviderPagerDuty:
// 2-auto: subdomain is set during the OAuth callback. If for any
// reason it is missing, we still return false so the configure
// mutation does not surface — there is no manual picker.
return false, nil
case coredata.ConnectorProviderSnyk:
settings, _ := dbConnector.SnykSettings()
return settings.OrgID == "", nil
case coredata.ConnectorProviderNetlify:
settings, _ := dbConnector.NetlifySettings()
return settings.AccountSlug == "", nil
case coredata.ConnectorProviderClickUp:
settings, _ := dbConnector.ClickUpSettings()
return settings.TeamID == "", nil
case coredata.ConnectorProviderVercel:
// 2-auto: team_id is set during the OAuth callback (or synthesized
// from /v2/user for personal accounts). If for any reason it is
// missing, return false so the configure mutation does not surface
// — there is no manual picker.
return false, nil
default:
return false, nil
}
@@ -502,6 +585,51 @@ func (r *accessSourceResolver) SelectedOrganization(ctx context.Context, obj *ty
if settings.OrganizationSlug != "" {
return &settings.OrganizationSlug, nil
}
case coredata.ConnectorProviderGitLab:
settings, _ := dbConnector.GitLabSettings()
if settings.GroupID != "" {
return &settings.GroupID, nil
}
case coredata.ConnectorProviderBitbucket:
settings, _ := dbConnector.BitbucketSettings()
if settings.Workspace != "" {
return &settings.Workspace, nil
}
case coredata.ConnectorProviderHeroku:
settings, _ := dbConnector.HerokuSettings()
if settings.TeamID != "" {
return &settings.TeamID, nil
}
case coredata.ConnectorProviderPagerDuty:
settings, _ := dbConnector.PagerDutySettings()
if settings.Subdomain != "" {
return &settings.Subdomain, nil
}
case coredata.ConnectorProviderAsana:
settings, _ := dbConnector.AsanaSettings()
if settings.WorkspaceGID != "" {
return &settings.WorkspaceGID, nil
}
case coredata.ConnectorProviderSnyk:
settings, _ := dbConnector.SnykSettings()
if settings.OrgID != "" {
return &settings.OrgID, nil
}
case coredata.ConnectorProviderNetlify:
settings, _ := dbConnector.NetlifySettings()
if settings.AccountSlug != "" {
return &settings.AccountSlug, nil
}
case coredata.ConnectorProviderClickUp:
settings, _ := dbConnector.ClickUpSettings()
if settings.TeamID != "" {
return &settings.TeamID, nil
}
case coredata.ConnectorProviderVercel:
settings, _ := dbConnector.VercelSettings()
if settings.TeamID != "" {
return &settings.TeamID, nil
}
}
return nil, nil