Link the 19 API-key access-review connector docs
Each of these providers ships an API-key connection path and a driver, but no Registration carried a DocumentationURL, so the console rendered no "how do I get this token" link on the connect dialog. probo.com now has a page per provider, so point each Registration at it. Slugs are passed explicitly rather than derived from the enum, per accessReviewDocsURL's contract, so BETTER_STACK maps to better-stack and INCIDENT_IO to incident-io. Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
This commit is contained in:
@@ -38,10 +38,11 @@ import (
|
||||
// name that scopes the team-members listing.
|
||||
func betterStackRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderBetterStack,
|
||||
DisplayName: "Better Stack",
|
||||
SupportsAPIKey: true,
|
||||
ProbeURL: "https://betterstack.com/api/v2/team-members",
|
||||
Provider: coredata.ConnectorProviderBetterStack,
|
||||
DisplayName: "Better Stack",
|
||||
DocumentationURL: accessReviewDocsURL("better-stack"),
|
||||
SupportsAPIKey: true,
|
||||
ProbeURL: "https://betterstack.com/api/v2/team-members",
|
||||
APIKeyExtraSettings: []ExtraSetting{
|
||||
{Key: "teamName", Label: "Team Name", Required: true},
|
||||
},
|
||||
|
||||
@@ -31,9 +31,10 @@ import (
|
||||
|
||||
func brevoRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderBrevo,
|
||||
DisplayName: "Brevo",
|
||||
SupportsAPIKey: true,
|
||||
Provider: coredata.ConnectorProviderBrevo,
|
||||
DisplayName: "Brevo",
|
||||
DocumentationURL: accessReviewDocsURL("brevo"),
|
||||
SupportsAPIKey: true,
|
||||
// Brevo authenticates with an API key sent in the api-key header
|
||||
// rather than Authorization: Bearer. APIKeyHeader makes the
|
||||
// APIKeyConnection send api-key instead and omit Authorization. There
|
||||
|
||||
@@ -31,9 +31,10 @@ import (
|
||||
|
||||
func clickhouseRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderClickHouse,
|
||||
DisplayName: "ClickHouse Cloud",
|
||||
SupportsAPIKey: true,
|
||||
Provider: coredata.ConnectorProviderClickHouse,
|
||||
DisplayName: "ClickHouse Cloud",
|
||||
DocumentationURL: accessReviewDocsURL("clickhouse"),
|
||||
SupportsAPIKey: true,
|
||||
// ClickHouse Cloud's control-plane API authenticates with HTTP Basic
|
||||
// auth where the credential is keyId:keySecret. APIKeyBasicAuthUserPass
|
||||
// makes the APIKeyConnection base64 the verbatim "keyId:keySecret"
|
||||
|
||||
@@ -34,10 +34,11 @@ import (
|
||||
|
||||
func grafanaRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderGrafana,
|
||||
DisplayName: "Grafana",
|
||||
SupportsAPIKey: true,
|
||||
BuildProbeURL: buildGrafanaProbeURL,
|
||||
Provider: coredata.ConnectorProviderGrafana,
|
||||
DisplayName: "Grafana",
|
||||
DocumentationURL: accessReviewDocsURL("grafana"),
|
||||
SupportsAPIKey: true,
|
||||
BuildProbeURL: buildGrafanaProbeURL,
|
||||
APIKeyExtraSettings: []ExtraSetting{
|
||||
{Key: "baseUrl", Label: "Base URL", Required: true},
|
||||
},
|
||||
|
||||
@@ -31,9 +31,10 @@ import (
|
||||
|
||||
func incidentioRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderIncidentIO,
|
||||
DisplayName: "incident.io",
|
||||
SupportsAPIKey: true,
|
||||
Provider: coredata.ConnectorProviderIncidentIO,
|
||||
DisplayName: "incident.io",
|
||||
DocumentationURL: accessReviewDocsURL("incident-io"),
|
||||
SupportsAPIKey: true,
|
||||
// incident.io publishes an OAuth2 flow, but it is outbound-only (for
|
||||
// incident.io to call other apps), so access review authenticates
|
||||
// with an API key presented as Authorization: Bearer, the default
|
||||
|
||||
@@ -34,9 +34,10 @@ import (
|
||||
|
||||
func langfuseRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderLangfuse,
|
||||
DisplayName: "Langfuse",
|
||||
SupportsAPIKey: true,
|
||||
Provider: coredata.ConnectorProviderLangfuse,
|
||||
DisplayName: "Langfuse",
|
||||
DocumentationURL: accessReviewDocsURL("langfuse"),
|
||||
SupportsAPIKey: true,
|
||||
// Langfuse's organization-scoped public API authenticates with HTTP
|
||||
// Basic auth where the credential is publicKey:secretKey.
|
||||
// APIKeyBasicAuthUserPass base64s the verbatim "publicKey:secretKey" the
|
||||
|
||||
@@ -31,9 +31,10 @@ import (
|
||||
|
||||
func mercuryRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderMercury,
|
||||
DisplayName: "Mercury",
|
||||
SupportsAPIKey: true,
|
||||
Provider: coredata.ConnectorProviderMercury,
|
||||
DisplayName: "Mercury",
|
||||
DocumentationURL: accessReviewDocsURL("mercury"),
|
||||
SupportsAPIKey: true,
|
||||
// Mercury authenticates with a self-serve API token presented as
|
||||
// Authorization: Bearer, the default APIKeyConnection scheme. There
|
||||
// is no third-party OAuth2 flow for the Users API. The token is
|
||||
|
||||
@@ -34,11 +34,12 @@ import (
|
||||
|
||||
func metabaseRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderMetabase,
|
||||
DisplayName: "Metabase",
|
||||
SupportsAPIKey: true,
|
||||
APIKeyHeader: "x-api-key",
|
||||
BuildProbeURL: buildMetabaseProbeURL,
|
||||
Provider: coredata.ConnectorProviderMetabase,
|
||||
DisplayName: "Metabase",
|
||||
DocumentationURL: accessReviewDocsURL("metabase"),
|
||||
SupportsAPIKey: true,
|
||||
APIKeyHeader: "x-api-key",
|
||||
BuildProbeURL: buildMetabaseProbeURL,
|
||||
APIKeyExtraSettings: []ExtraSetting{
|
||||
{Key: "instanceUrl", Label: "Instance URL", Required: true},
|
||||
},
|
||||
|
||||
@@ -32,8 +32,9 @@ import (
|
||||
|
||||
func neonRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderNeon,
|
||||
DisplayName: "Neon",
|
||||
Provider: coredata.ConnectorProviderNeon,
|
||||
DisplayName: "Neon",
|
||||
DocumentationURL: accessReviewDocsURL("neon"),
|
||||
// Neon's API authenticates with an API key (napi_...) presented
|
||||
// as Authorization: Bearer, the default APIKeyConnection scheme.
|
||||
// Neon's OAuth is partner-gated (manual application), so the
|
||||
|
||||
@@ -41,6 +41,7 @@ func oktaRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderOkta,
|
||||
DisplayName: "Okta",
|
||||
DocumentationURL: accessReviewDocsURL("okta"),
|
||||
SupportsAPIKey: true,
|
||||
APIKeyAuthScheme: "SSWS",
|
||||
BuildProbeURL: buildOktaProbeURL,
|
||||
|
||||
@@ -35,6 +35,7 @@ func onePasswordRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderOnePassword,
|
||||
DisplayName: "1Password",
|
||||
DocumentationURL: accessReviewDocsURL("one-password"),
|
||||
ProbeURL: "https://events.1password.com/api/v1/auditevents",
|
||||
SupportsAPIKey: true,
|
||||
SupportsClientCredentials: true,
|
||||
|
||||
@@ -31,9 +31,10 @@ import (
|
||||
|
||||
func pylonRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderPylon,
|
||||
DisplayName: "Pylon",
|
||||
SupportsAPIKey: true,
|
||||
Provider: coredata.ConnectorProviderPylon,
|
||||
DisplayName: "Pylon",
|
||||
DocumentationURL: accessReviewDocsURL("pylon"),
|
||||
SupportsAPIKey: true,
|
||||
// Pylon authenticates with an account API token presented as
|
||||
// Authorization: Bearer, the default APIKeyConnection scheme. There
|
||||
// is no third-party OAuth2 flow for the Users API. The token is bound
|
||||
|
||||
@@ -34,6 +34,7 @@ func qoveryRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderQovery,
|
||||
DisplayName: "Qovery",
|
||||
DocumentationURL: accessReviewDocsURL("qovery"),
|
||||
SupportsAPIKey: true,
|
||||
APIKeyAuthScheme: "Token",
|
||||
BuildProbeURL: buildQoveryProbeURL,
|
||||
|
||||
@@ -39,10 +39,11 @@ import (
|
||||
// omitted.
|
||||
func renderRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderRender,
|
||||
DisplayName: "Render",
|
||||
SupportsAPIKey: true,
|
||||
BuildProbeURL: buildRenderProbeURL,
|
||||
Provider: coredata.ConnectorProviderRender,
|
||||
DisplayName: "Render",
|
||||
DocumentationURL: accessReviewDocsURL("render"),
|
||||
SupportsAPIKey: true,
|
||||
BuildProbeURL: buildRenderProbeURL,
|
||||
APIKeyExtraSettings: []ExtraSetting{
|
||||
{Key: "workspaceId", Label: "Workspace ID", Required: true},
|
||||
},
|
||||
|
||||
@@ -31,10 +31,11 @@ import (
|
||||
|
||||
func sendgridRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderSendGrid,
|
||||
DisplayName: "SendGrid",
|
||||
ProbeURL: "https://api.sendgrid.com/v3/teammates?limit=1&offset=0",
|
||||
SupportsAPIKey: true,
|
||||
Provider: coredata.ConnectorProviderSendGrid,
|
||||
DisplayName: "SendGrid",
|
||||
DocumentationURL: accessReviewDocsURL("sendgrid"),
|
||||
ProbeURL: "https://api.sendgrid.com/v3/teammates?limit=1&offset=0",
|
||||
SupportsAPIKey: true,
|
||||
NewDriver: func(_ context.Context, c *http.Client, _ *coredata.Connector, logger *log.Logger) (drivers.Driver, error) {
|
||||
return drivers.NewSendGridDriver(c, logger.Named("sendgrid")), nil
|
||||
},
|
||||
|
||||
@@ -34,11 +34,12 @@ import (
|
||||
|
||||
func signozRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderSigNoz,
|
||||
DisplayName: "SigNoz",
|
||||
SupportsAPIKey: true,
|
||||
APIKeyHeader: "SIGNOZ-API-KEY",
|
||||
BuildProbeURL: buildSigNozProbeURL,
|
||||
Provider: coredata.ConnectorProviderSigNoz,
|
||||
DisplayName: "SigNoz",
|
||||
DocumentationURL: accessReviewDocsURL("signoz"),
|
||||
SupportsAPIKey: true,
|
||||
APIKeyHeader: "SIGNOZ-API-KEY",
|
||||
BuildProbeURL: buildSigNozProbeURL,
|
||||
APIKeyExtraSettings: []ExtraSetting{
|
||||
{Key: "baseUrl", Label: "Base URL", Required: true},
|
||||
},
|
||||
|
||||
@@ -32,10 +32,11 @@ import (
|
||||
|
||||
func supabaseRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderSupabase,
|
||||
DisplayName: "Supabase",
|
||||
ProbeURL: "https://api.supabase.com/v1/organizations",
|
||||
SupportsAPIKey: true,
|
||||
Provider: coredata.ConnectorProviderSupabase,
|
||||
DisplayName: "Supabase",
|
||||
DocumentationURL: accessReviewDocsURL("supabase"),
|
||||
ProbeURL: "https://api.supabase.com/v1/organizations",
|
||||
SupportsAPIKey: true,
|
||||
APIKeyExtraSettings: []ExtraSetting{
|
||||
{Key: "organizationSlug", Label: "Organization Slug", Required: true},
|
||||
},
|
||||
|
||||
@@ -31,10 +31,11 @@ import (
|
||||
|
||||
func tailscaleRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderTailscale,
|
||||
DisplayName: "Tailscale",
|
||||
SupportsAPIKey: true,
|
||||
ProbeURL: "https://api.tailscale.com/api/v2/tailnet/-/users",
|
||||
Provider: coredata.ConnectorProviderTailscale,
|
||||
DisplayName: "Tailscale",
|
||||
DocumentationURL: accessReviewDocsURL("tailscale"),
|
||||
SupportsAPIKey: true,
|
||||
ProbeURL: "https://api.tailscale.com/api/v2/tailnet/-/users",
|
||||
NewDriver: func(_ context.Context, c *http.Client, _ *coredata.Connector, _ *log.Logger) (drivers.Driver, error) {
|
||||
return drivers.NewTailscaleDriver(c), nil
|
||||
},
|
||||
|
||||
@@ -32,10 +32,11 @@ import (
|
||||
|
||||
func tallyRegistration() *Registration {
|
||||
return &Registration{
|
||||
Provider: coredata.ConnectorProviderTally,
|
||||
DisplayName: "Tally",
|
||||
ProbeURL: "https://api.tally.so/me",
|
||||
SupportsAPIKey: true,
|
||||
Provider: coredata.ConnectorProviderTally,
|
||||
DisplayName: "Tally",
|
||||
DocumentationURL: accessReviewDocsURL("tally"),
|
||||
ProbeURL: "https://api.tally.so/me",
|
||||
SupportsAPIKey: true,
|
||||
APIKeyExtraSettings: []ExtraSetting{
|
||||
{Key: "organizationId", Label: "Organization ID", Required: true},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user