From 64093e91752910d6254dbf0c4ce0e9d033ee55cc Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Wed, 11 Jun 2025 14:55:41 +0800 Subject: [PATCH] misc: final revisions --- .../ee/services/dynamic-secret/providers/models.ts | 14 ++++++++++++-- .../KubernetesInputForm.tsx | 8 +++++++- .../EditDynamicSecretKubernetesForm.tsx | 5 ++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/backend/src/ee/services/dynamic-secret/providers/models.ts b/backend/src/ee/services/dynamic-secret/providers/models.ts index 2c244575e..32cc46d22 100644 --- a/backend/src/ee/services/dynamic-secret/providers/models.ts +++ b/backend/src/ee/services/dynamic-secret/providers/models.ts @@ -1,6 +1,8 @@ import RE2 from "re2"; import { z } from "zod"; +import { CharacterType, characterValidator } from "@app/lib/validator/validate-string"; + import { TDynamicSecretLeaseConfig } from "../../dynamic-secret-lease/dynamic-secret-lease-types"; export type PasswordRequirements = { @@ -341,7 +343,11 @@ export const DynamicSecretKubernetesSchema = z .string() .trim() .min(1) - .refine((val) => !val.includes(","), "Namespace must be a single value, not a comma-separated list"), + .refine((val) => !val.includes(","), "Namespace must be a single value, not a comma-separated list") + .refine( + (val) => characterValidator([CharacterType.AlphaNumeric, CharacterType.Hyphen])(val), + "Invalid namespace format" + ), gatewayId: z.string().optional(), audiences: z.array(z.string().trim().min(1)), authMethod: z.nativeEnum(KubernetesAuthMethod).default(KubernetesAuthMethod.Api) @@ -364,7 +370,11 @@ export const DynamicSecretKubernetesSchema = z .min(1) .refine((val) => { const namespaces = val.split(",").map((ns) => ns.trim()); - return namespaces.length > 0 && namespaces.every((ns) => ns.length > 0); + return ( + namespaces.length > 0 && + namespaces.every((ns) => ns.length > 0) && + namespaces.every((ns) => characterValidator([CharacterType.AlphaNumeric, CharacterType.Hyphen])(ns)) + ); }, "Must be a valid comma-separated list of namespace values"), gatewayId: z.string().optional(), audiences: z.array(z.string().trim().min(1)), diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/KubernetesInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/KubernetesInputForm.tsx index 00a9f4f6f..9cb031138 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/KubernetesInputForm.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/KubernetesInputForm.tsx @@ -211,7 +211,13 @@ export const KubernetesInputForm = ({ try { const isDefaultUsernameTemplate = usernameTemplate === "{{randomUsername}}"; await createDynamicSecret.mutateAsync({ - provider: { type: DynamicSecretProviders.Kubernetes, inputs: provider }, + provider: { + type: DynamicSecretProviders.Kubernetes, + inputs: { + ...provider, + url: provider.url || undefined + } + }, maxTTL: rest.maxTTL, name: rest.name, path: secretPath, diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/DynamicSecretListView/EditDynamicSecretForm/EditDynamicSecretKubernetesForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/DynamicSecretListView/EditDynamicSecretForm/EditDynamicSecretKubernetesForm.tsx index 3ba946808..2f40c7a14 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/DynamicSecretListView/EditDynamicSecretForm/EditDynamicSecretKubernetesForm.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/DynamicSecretListView/EditDynamicSecretForm/EditDynamicSecretKubernetesForm.tsx @@ -201,7 +201,10 @@ export const EditDynamicSecretKubernetesForm = ({ projectSlug, environmentSlug: environment, data: { - inputs: formData.inputs, + inputs: { + ...formData.inputs, + url: formData.inputs.url || undefined + }, newName: formData.newName === dynamicSecret.name ? undefined : formData.newName, defaultTTL: formData.defaultTTL, maxTTL: formData.maxTTL,