From 2ac110f00e865fe14afe84ab6134505c503d1194 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard Date: Wed, 11 Dec 2024 21:17:01 +0400 Subject: [PATCH] fix: requested changes --- backend/src/lib/api-docs/constants.ts | 3 +- .../integration-sync-secret.ts | 8 +- .../integration/integration-schema.ts | 2 +- .../src/hooks/api/integrations/queries.tsx | 2 +- frontend/src/hooks/api/integrations/types.ts | 1 + .../azure-app-configuration/create.tsx | 91 +++++++++++-------- .../components/IntegrationSettingsSection.tsx | 3 +- 7 files changed, 61 insertions(+), 49 deletions(-) diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index 70e3d0ccd..5326a977c 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -1126,8 +1126,7 @@ export const INTEGRATION = { shouldAutoRedeploy: "Used by Render to trigger auto deploy.", secretGCPLabel: "The label for GCP secrets.", secretAWSTag: "The tags for AWS secrets.", - azureUseLabels: - "If enabled, each secret will be given a label that represents which Infisical environment they belong to.", + azureLabel: "Define which label to assign to secrets created in Azure App Configuration.", githubVisibility: "Define where the secrets from the Github Integration should be visible. Option 'selected' lets you directly define which repositories to sync secrets to.", githubVisibilityRepoIds: diff --git a/backend/src/services/integration-auth/integration-sync-secret.ts b/backend/src/services/integration-auth/integration-sync-secret.ts index 7a1b104ce..53ff9ca67 100644 --- a/backend/src/services/integration-auth/integration-sync-secret.ts +++ b/backend/src/services/integration-auth/integration-sync-secret.ts @@ -422,9 +422,9 @@ const syncSecretsAzureAppConfig = async ({ }) }, { - ...(metadata.azureUseLabels && { + ...(metadata.azureLabel && { params: { - label: integration.environment.slug + label: metadata.azureLabel } }), @@ -447,9 +447,9 @@ const syncSecretsAzureAppConfig = async ({ headers: { Authorization: `Bearer ${accessToken}` }, - ...(metadata.azureUseLabels && { + ...(metadata.azureLabel && { params: { - label: integration.environment.slug + label: metadata.azureLabel } }), // we force IPV4 because docker setup fails with ipv6 diff --git a/backend/src/services/integration/integration-schema.ts b/backend/src/services/integration/integration-schema.ts index 01a928db0..de4790188 100644 --- a/backend/src/services/integration/integration-schema.ts +++ b/backend/src/services/integration/integration-schema.ts @@ -35,7 +35,7 @@ export const IntegrationMetadataSchema = z.object({ .optional() .describe(INTEGRATION.CREATE.metadata.secretAWSTag), - azureUseLabels: z.boolean().optional().describe(INTEGRATION.CREATE.metadata.azureUseLabels), + azureLabel: z.string().optional().describe(INTEGRATION.CREATE.metadata.azureLabel), githubVisibility: z .union([z.literal("selected"), z.literal("private"), z.literal("all")]) diff --git a/frontend/src/hooks/api/integrations/queries.tsx b/frontend/src/hooks/api/integrations/queries.tsx index a40ef35eb..5c059ae98 100644 --- a/frontend/src/hooks/api/integrations/queries.tsx +++ b/frontend/src/hooks/api/integrations/queries.tsx @@ -80,7 +80,7 @@ export const useCreateIntegration = () => { key: string; value: string; }[]; - azureUseLabels?: boolean; + azureLabel?: string; githubVisibility?: string; githubVisibilityRepoIds?: string[]; kmsKeyId?: string; diff --git a/frontend/src/hooks/api/integrations/types.ts b/frontend/src/hooks/api/integrations/types.ts index 0346b065a..7054befc7 100644 --- a/frontend/src/hooks/api/integrations/types.ts +++ b/frontend/src/hooks/api/integrations/types.ts @@ -41,6 +41,7 @@ export type TIntegration = { key: string; value: string; }[]; + azureLabel?: string; kmsKeyId?: string; secretSuffix?: string; diff --git a/frontend/src/pages/integrations/azure-app-configuration/create.tsx b/frontend/src/pages/integrations/azure-app-configuration/create.tsx index a7b137adf..13c233f53 100644 --- a/frontend/src/pages/integrations/azure-app-configuration/create.tsx +++ b/frontend/src/pages/integrations/azure-app-configuration/create.tsx @@ -14,6 +14,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; import queryString from "query-string"; import { z } from "zod"; +import { createNotification } from "@app/components/notifications"; import { SecretPathInput } from "@app/components/v2/SecretPathInput"; import { useCreateIntegration } from "@app/hooks/api"; import { IntegrationSyncBehavior } from "@app/hooks/api/integrations/types"; @@ -46,7 +47,8 @@ const schema = z.object({ sourceEnvironment: z.string().trim().min(1, { message: "Source environment is required" }), initialSyncBehavior: z.nativeEnum(IntegrationSyncBehavior), secretPrefix: z.string().default(""), - useLabels: z.boolean().default(false) + useLabels: z.boolean().default(false), + azureLabel: z.string().min(1).optional() }); type TFormSchema = z.infer; @@ -93,7 +95,7 @@ export default function AzureAppConfigurationCreateIntegration() { } }, [workspace]); - const sourceEnv = watch("sourceEnvironment"); + const shouldUseLabels = watch("useLabels"); const handleIntegrationSubmit = async ({ secretPath, @@ -101,11 +103,20 @@ export default function AzureAppConfigurationCreateIntegration() { sourceEnvironment, baseUrl, initialSyncBehavior, - secretPrefix + secretPrefix, + azureLabel }: TFormSchema) => { try { if (!integrationAuth?.id) return; + if (useLabels && !azureLabel) { + createNotification({ + type: "error", + text: "Label must be provided when 'Use Labels' is enabled" + }); + return; + } + await mutateAsync({ integrationAuthId: integrationAuth?.id, isActive: true, @@ -115,7 +126,7 @@ export default function AzureAppConfigurationCreateIntegration() { metadata: { initialSyncBehavior, secretPrefix, - azureUseLabels: useLabels + ...(useLabels && { azureLabel }) } }); @@ -167,7 +178,7 @@ export default function AzureAppConfigurationCreateIntegration() {
-
+
- ( - onChange(isChecked)} - isChecked={value} - > -
- Use Environment Labels - -

- Use the environment slug as the label on the secret keys created in - Azure App Configuration. -
-
- {sourceEnv && ( -

- You have selected the{" "} - {sourceEnv} environment, - therefore the label will be set to{" "} - {sourceEnv}. -

- )} -

-
- } +
+ ( + onChange(isChecked)} + isChecked={value} + > +
+ Use Labels + + + +
+
+ )} + /> + + {shouldUseLabels && ( + ( + - - -
-
+ + + )} + /> )} - /> +
{ Object.entries(integration.metadata).map(([key, value]) => (

- {metadataMappings[key as keyof typeof metadataMappings]} + {!!value && metadataMappings[key as keyof typeof metadataMappings]}

{renderValue(key as MetadataKey, value)}