Add List*Organizations helpers in pkg/accessreview/drivers → Ignore .oauth-credentials.txt
- Add List*Organizations helpers in pkg/accessreview/drivers - Replace AccessSource picker switches with map dispatch - Drop dead per-provider connector settings wrappers - Ignore .oauth-credentials.txt Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
This commit is contained in:
@@ -398,76 +398,29 @@ func (r *accessSourceResolver) ProviderOrganizations(ctx context.Context, obj *t
|
||||
return nil, fmt.Errorf("cannot get connector HTTP client: %w", err)
|
||||
}
|
||||
|
||||
switch dbConnector.Provider {
|
||||
case coredata.ConnectorProviderGitHub:
|
||||
orgs, err := fetchGitHubOrganizations(ctx, httpClient)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot fetch github organizations: %w", err)
|
||||
}
|
||||
return orgs, nil
|
||||
case coredata.ConnectorProviderSentry:
|
||||
orgs, err := fetchSentryOrganizations(ctx, httpClient)
|
||||
if err != nil {
|
||||
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:
|
||||
cfg, ok := providerOrgConfigs[dbConnector.Provider]
|
||||
if !ok || cfg.ListOrgs == nil {
|
||||
return []*types.ProviderOrganization{}, nil
|
||||
}
|
||||
|
||||
orgs, err := cfg.ListOrgs(ctx, httpClient)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := make([]*types.ProviderOrganization, len(orgs))
|
||||
for i, o := range orgs {
|
||||
result[i] = &types.ProviderOrganization{Slug: o.Slug, DisplayName: o.DisplayName}
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// NeedsConfiguration is the resolver for the needsConfiguration field.
|
||||
//
|
||||
// True when the provider has a picker UI (NeedsPicker) AND the user has
|
||||
// not yet picked an org. 2-auto providers (PagerDuty, Vercel) always
|
||||
// return false: the identifier is captured during the OAuth callback,
|
||||
// not via a follow-up configure mutation.
|
||||
func (r *accessSourceResolver) NeedsConfiguration(ctx context.Context, obj *types.AccessSource) (bool, error) {
|
||||
if err := r.authorize(ctx, obj.ID, probo.ActionAccessSourceGet); err != nil {
|
||||
return false, err
|
||||
@@ -487,48 +440,11 @@ func (r *accessSourceResolver) NeedsConfiguration(ctx context.Context, obj *type
|
||||
panic(fmt.Errorf("cannot get connector: %w", err))
|
||||
}
|
||||
|
||||
switch dbConnector.Provider {
|
||||
case coredata.ConnectorProviderGitHub:
|
||||
settings, _ := dbConnector.GitHubSettings()
|
||||
return settings.Organization == "", nil
|
||||
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:
|
||||
cfg, ok := providerOrgConfigs[dbConnector.Provider]
|
||||
if !ok || !cfg.NeedsPicker {
|
||||
return false, nil
|
||||
}
|
||||
return cfg.SelectedSlug(dbConnector) == "", nil
|
||||
}
|
||||
|
||||
// ConnectionStatus is the resolver for the connectionStatus field.
|
||||
@@ -582,65 +498,15 @@ func (r *accessSourceResolver) SelectedOrganization(ctx context.Context, obj *ty
|
||||
panic(fmt.Errorf("cannot get connector: %w", err))
|
||||
}
|
||||
|
||||
switch dbConnector.Provider {
|
||||
case coredata.ConnectorProviderGitHub:
|
||||
settings, _ := dbConnector.GitHubSettings()
|
||||
if settings.Organization != "" {
|
||||
return &settings.Organization, nil
|
||||
}
|
||||
case coredata.ConnectorProviderSentry:
|
||||
settings, _ := dbConnector.SentrySettings()
|
||||
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
|
||||
}
|
||||
cfg, ok := providerOrgConfigs[dbConnector.Provider]
|
||||
if !ok {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
slug := cfg.SelectedSlug(dbConnector)
|
||||
if slug == "" {
|
||||
return nil, nil
|
||||
}
|
||||
return &slug, nil
|
||||
}
|
||||
|
||||
// Permission is the resolver for the permission field.
|
||||
|
||||
Reference in New Issue
Block a user