import { ReactNode } from "react"; import { subject } from "@casl/ability"; import { faEdit } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { ProjectPermissionCan } from "@app/components/permissions"; import { GenericFieldLabel } from "@app/components/secret-syncs"; import { IconButton } from "@app/components/v2"; import { ProjectPermissionSub } from "@app/context"; import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types"; import { APP_CONNECTION_MAP } from "@app/helpers/appConnections"; import { SecretSync, TSecretSync } from "@app/hooks/api/secretSyncs"; import { OnePassSyncDestinationSection } from "./1PasswordSyncDestinationSection"; import { AwsParameterStoreSyncDestinationSection } from "./AwsParameterStoreSyncDestinationSection"; import { AwsSecretsManagerSyncDestinationSection } from "./AwsSecretsManagerSyncDestinationSection"; import { AzureAppConfigurationSyncDestinationSection } from "./AzureAppConfigurationSyncDestinationSection"; import { AzureDevOpsSyncDestinationSection } from "./AzureDevOpsSyncDestinationSection"; import { AzureKeyVaultSyncDestinationSection } from "./AzureKeyVaultSyncDestinationSection"; import { BitbucketSyncDestinationSection } from "./BitbucketSyncDestinationSection"; import { CamundaSyncDestinationSection } from "./CamundaSyncDestinationSection"; import { ChecklySyncDestinationSection } from "./ChecklySyncDestinationSection"; import { CloudflarePagesSyncDestinationSection } from "./CloudflarePagesSyncDestinationSection"; import { CloudflareWorkersSyncDestinationSection } from "./CloudflareWorkersSyncDestinationSection"; import { DatabricksSyncDestinationSection } from "./DatabricksSyncDestinationSection"; import { FlyioSyncDestinationSection } from "./FlyioSyncDestinationSection"; import { GcpSyncDestinationSection } from "./GcpSyncDestinationSection"; import { GitHubSyncDestinationSection } from "./GitHubSyncDestinationSection"; import { GitLabSyncDestinationSection } from "./GitLabSyncDestinationSection"; import { HCVaultSyncDestinationSection } from "./HCVaultSyncDestinationSection"; import { HerokuSyncDestinationSection } from "./HerokuSyncDestinationSection"; import { HumanitecSyncDestinationSection } from "./HumanitecSyncDestinationSection"; import { OCIVaultSyncDestinationSection } from "./OCIVaultSyncDestinationSection"; import { RailwaySyncDestinationSection } from "./RailwaySyncDestinationSection"; import { RenderSyncDestinationSection } from "./RenderSyncDestinationSection"; import { SupabaseSyncDestinationSection } from "./SupabaseSyncDestinationSection"; import { TeamCitySyncDestinationSection } from "./TeamCitySyncDestinationSection"; import { TerraformCloudSyncDestinationSection } from "./TerraformCloudSyncDestinationSection"; import { VercelSyncDestinationSection } from "./VercelSyncDestinationSection"; import { WindmillSyncDestinationSection } from "./WindmillSyncDestinationSection"; import { ZabbixSyncDestinationSection } from "./ZabbixSyncDestinationSection"; type Props = { secretSync: TSecretSync; onEditDestination: VoidFunction; }; export const SecretSyncDestinationSection = ({ secretSync, onEditDestination }: Props) => { const { destination, connection, folder, environment } = secretSync; const app = APP_CONNECTION_MAP[connection.app].name; let DestinationComponents: ReactNode; switch (destination) { case SecretSync.AWSParameterStore: DestinationComponents = ; break; case SecretSync.AWSSecretsManager: DestinationComponents = ; break; case SecretSync.GitHub: DestinationComponents = ; break; case SecretSync.GCPSecretManager: DestinationComponents = ; break; case SecretSync.AzureKeyVault: DestinationComponents = ; break; case SecretSync.AzureAppConfiguration: DestinationComponents = ( ); break; case SecretSync.Databricks: DestinationComponents = ; break; case SecretSync.Humanitec: DestinationComponents = ; break; case SecretSync.TerraformCloud: DestinationComponents = ; break; case SecretSync.Camunda: DestinationComponents = ; break; case SecretSync.Vercel: DestinationComponents = ; break; case SecretSync.Windmill: DestinationComponents = ; break; case SecretSync.HCVault: DestinationComponents = ; break; case SecretSync.TeamCity: DestinationComponents = ; break; case SecretSync.OCIVault: DestinationComponents = ; break; case SecretSync.OnePass: DestinationComponents = ; break; case SecretSync.AzureDevOps: DestinationComponents = ; break; case SecretSync.Heroku: DestinationComponents = ; break; case SecretSync.Render: DestinationComponents = ; break; case SecretSync.Flyio: DestinationComponents = ; break; case SecretSync.GitLab: DestinationComponents = ; break; case SecretSync.CloudflarePages: DestinationComponents = ; break; case SecretSync.CloudflareWorkers: DestinationComponents = ; break; case SecretSync.Zabbix: DestinationComponents = ; break; case SecretSync.Railway: DestinationComponents = ; break; case SecretSync.Checkly: DestinationComponents = ; break; case SecretSync.Supabase: DestinationComponents = ; break; case SecretSync.Bitbucket: DestinationComponents = ; break; default: throw new Error(`Unhandled Destination Section components: ${destination}`); } const permissionSubject = environment && folder ? subject(ProjectPermissionSub.SecretSyncs, { environment: environment.slug, secretPath: folder.path }) : ProjectPermissionSub.SecretSyncs; return (

Destination Configuration

{(isAllowed) => ( )}
{connection.name} {DestinationComponents}
); };