Require CLIENT_SECRET for new access-review connectors → Drop Snyk, Ramp, Lever, Deel access-review providers
- Require CLIENT_SECRET for new access-review connectors - Use Heroku account UUID as ExternalID - Bump GitHub orgs picker to per_page=100 - Drop Snyk, Ramp, Lever, Deel access-review providers Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
This commit is contained in:
@@ -58,14 +58,10 @@ var providerDisplayNames = map[coredata.ConnectorProvider]string{
|
||||
coredata.ConnectorProviderHeroku: "Heroku",
|
||||
coredata.ConnectorProviderPagerDuty: "PagerDuty",
|
||||
coredata.ConnectorProviderAsana: "Asana",
|
||||
coredata.ConnectorProviderSnyk: "Snyk",
|
||||
coredata.ConnectorProviderNetlify: "Netlify",
|
||||
coredata.ConnectorProviderRamp: "Ramp",
|
||||
coredata.ConnectorProviderClickUp: "ClickUp",
|
||||
coredata.ConnectorProviderVercel: "Vercel",
|
||||
coredata.ConnectorProviderMonday: "Monday.com",
|
||||
coredata.ConnectorProviderLever: "Lever",
|
||||
coredata.ConnectorProviderDeel: "Deel",
|
||||
}
|
||||
|
||||
// ProviderDisplayName returns the human-readable label for a connector provider.
|
||||
@@ -802,53 +798,6 @@ func (r *asanaNameResolver) ResolveInstanceName(ctx context.Context) (string, er
|
||||
return resp.Data.Name, nil
|
||||
}
|
||||
|
||||
// snykNameResolver resolves the Snyk organization name.
|
||||
type snykNameResolver struct {
|
||||
httpClient *http.Client
|
||||
orgID string
|
||||
}
|
||||
|
||||
func NewSnykNameResolver(httpClient *http.Client, orgID string) NameResolver {
|
||||
return &snykNameResolver{httpClient: httpClient, orgID: orgID}
|
||||
}
|
||||
|
||||
func (r *snykNameResolver) ResolveInstanceName(ctx context.Context) (string, error) {
|
||||
if r.orgID == "" {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
endpoint := fmt.Sprintf("https://api.snyk.io/rest/orgs/%s?version=2024-10-15", url.PathEscape(r.orgID))
|
||||
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("cannot create snyk org request: %w", err)
|
||||
}
|
||||
req.Header.Set("Accept", "application/vnd.api+json")
|
||||
|
||||
httpResp, err := r.httpClient.Do(req)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("cannot execute snyk org request: %w", err)
|
||||
}
|
||||
defer func() { _ = httpResp.Body.Close() }()
|
||||
|
||||
if httpResp.StatusCode < 200 || httpResp.StatusCode >= 300 {
|
||||
return "", fmt.Errorf("cannot fetch snyk org: unexpected status %d", httpResp.StatusCode)
|
||||
}
|
||||
|
||||
var resp struct {
|
||||
Data struct {
|
||||
Attributes struct {
|
||||
Name string `json:"name"`
|
||||
} `json:"attributes"`
|
||||
} `json:"data"`
|
||||
}
|
||||
if err := json.NewDecoder(httpResp.Body).Decode(&resp); err != nil {
|
||||
return "", fmt.Errorf("cannot decode snyk org response: %w", err)
|
||||
}
|
||||
|
||||
return resp.Data.Attributes.Name, nil
|
||||
}
|
||||
|
||||
// netlifyNameResolver resolves the Netlify account name.
|
||||
type netlifyNameResolver struct {
|
||||
httpClient *http.Client
|
||||
@@ -892,51 +841,6 @@ func (r *netlifyNameResolver) ResolveInstanceName(ctx context.Context) (string,
|
||||
return resp.Name, nil
|
||||
}
|
||||
|
||||
// rampNameResolver resolves the Ramp business name.
|
||||
type rampNameResolver struct {
|
||||
httpClient *http.Client
|
||||
}
|
||||
|
||||
func NewRampNameResolver(httpClient *http.Client) NameResolver {
|
||||
return &rampNameResolver{httpClient: httpClient}
|
||||
}
|
||||
|
||||
func (r *rampNameResolver) ResolveInstanceName(ctx context.Context) (string, error) {
|
||||
req, err := http.NewRequestWithContext(
|
||||
ctx,
|
||||
http.MethodGet,
|
||||
"https://api.ramp.com/developer/v1/business",
|
||||
nil,
|
||||
)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("cannot create ramp business request: %w", err)
|
||||
}
|
||||
req.Header.Set("Accept", "application/json")
|
||||
|
||||
httpResp, err := r.httpClient.Do(req)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("cannot execute ramp business request: %w", err)
|
||||
}
|
||||
defer func() { _ = httpResp.Body.Close() }()
|
||||
|
||||
if httpResp.StatusCode < 200 || httpResp.StatusCode >= 300 {
|
||||
return "", fmt.Errorf("cannot fetch ramp business: unexpected status %d", httpResp.StatusCode)
|
||||
}
|
||||
|
||||
var resp struct {
|
||||
BusinessName string `json:"business_name"`
|
||||
LegalBusinessName string `json:"legal_business_name"`
|
||||
}
|
||||
if err := json.NewDecoder(httpResp.Body).Decode(&resp); err != nil {
|
||||
return "", fmt.Errorf("cannot decode ramp business response: %w", err)
|
||||
}
|
||||
|
||||
if resp.BusinessName != "" {
|
||||
return resp.BusinessName, nil
|
||||
}
|
||||
return resp.LegalBusinessName, nil
|
||||
}
|
||||
|
||||
// clickupNameResolver resolves the ClickUp team name.
|
||||
type clickupNameResolver struct {
|
||||
httpClient *http.Client
|
||||
@@ -1102,67 +1006,6 @@ func (r *mondayNameResolver) ResolveInstanceName(ctx context.Context) (string, e
|
||||
return resp.Data.Account.Name, nil
|
||||
}
|
||||
|
||||
// leverNameResolver returns an empty string: Lever does not expose a
|
||||
// dedicated org-name endpoint. The worker keeps the generic name and
|
||||
// the operator can rename the source manually.
|
||||
type leverNameResolver struct{}
|
||||
|
||||
func NewLeverNameResolver() NameResolver {
|
||||
return &leverNameResolver{}
|
||||
}
|
||||
|
||||
func (r *leverNameResolver) ResolveInstanceName(_ context.Context) (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
// deelNameResolver resolves the Deel organization name by reading the
|
||||
// first item of /rest/v2/organizations.
|
||||
type deelNameResolver struct {
|
||||
httpClient *http.Client
|
||||
}
|
||||
|
||||
func NewDeelNameResolver(httpClient *http.Client) NameResolver {
|
||||
return &deelNameResolver{httpClient: httpClient}
|
||||
}
|
||||
|
||||
func (r *deelNameResolver) ResolveInstanceName(ctx context.Context) (string, error) {
|
||||
req, err := http.NewRequestWithContext(
|
||||
ctx,
|
||||
http.MethodGet,
|
||||
"https://api.letsdeel.com/rest/v2/organizations",
|
||||
nil,
|
||||
)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("cannot create deel organizations request: %w", err)
|
||||
}
|
||||
req.Header.Set("Accept", "application/json")
|
||||
|
||||
httpResp, err := r.httpClient.Do(req)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("cannot execute deel organizations request: %w", err)
|
||||
}
|
||||
defer func() { _ = httpResp.Body.Close() }()
|
||||
|
||||
if httpResp.StatusCode < 200 || httpResp.StatusCode >= 300 {
|
||||
return "", fmt.Errorf("cannot fetch deel organizations: unexpected status %d", httpResp.StatusCode)
|
||||
}
|
||||
|
||||
var resp struct {
|
||||
Data []struct {
|
||||
Name string `json:"name"`
|
||||
} `json:"data"`
|
||||
}
|
||||
if err := json.NewDecoder(httpResp.Body).Decode(&resp); err != nil {
|
||||
return "", fmt.Errorf("cannot decode deel organizations response: %w", err)
|
||||
}
|
||||
|
||||
if len(resp.Data) == 0 {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
return resp.Data[0].Name, nil
|
||||
}
|
||||
|
||||
// notionNameResolver resolves the Notion workspace name via /v1/users/me.
|
||||
type notionNameResolver struct {
|
||||
httpClient *http.Client
|
||||
|
||||
Reference in New Issue
Block a user