From 4b06880320ac70b9052523f3802e35c3c9cbec3f Mon Sep 17 00:00:00 2001 From: x032205 Date: Tue, 1 Jul 2025 11:52:01 -0400 Subject: [PATCH] Feedback fixes --- backend/src/lib/config/env.ts | 17 +++++++++++++++++ .../services/super-admin/super-admin-service.ts | 11 ++++++++++- .../v2/HighlightText/HighlightText.tsx | 9 +++------ .../components/EnvironmentPageForm.tsx | 9 +++++++-- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/backend/src/lib/config/env.ts b/backend/src/lib/config/env.ts index 98a75cc10..2523c763c 100644 --- a/backend/src/lib/config/env.ts +++ b/backend/src/lib/config/env.ts @@ -2,6 +2,7 @@ import { z } from "zod"; import { QueueWorkerProfile } from "@app/lib/types"; +import { BadRequestError } from "../errors"; import { removeTrailingSlash } from "../fn"; import { CustomLogger } from "../logger/logger"; import { zpStr } from "../zod"; @@ -435,6 +436,22 @@ export const overridableKeys = new Set( Object.values(overwriteSchema).flatMap(({ fields }) => fields.map(({ key }) => key)) ); +export const validateOverrides = (config: Record) => { + const allowedOverrides = Object.fromEntries( + Object.entries(config).filter(([key]) => overridableKeys.has(key as keyof z.input)) + ); + + const tempEnv: Record = { ...process.env, ...allowedOverrides }; + const parsedResult = envSchema.safeParse(tempEnv); + + if (!parsedResult.success) { + const errorDetails = parsedResult.error.issues + .map((issue) => `Key: "${issue.path.join(".")}", Error: ${issue.message}`) + .join("\n"); + throw new BadRequestError({ message: errorDetails }); + } +}; + export const overrideEnvConfig = (config: Record) => { const allowedOverrides = Object.fromEntries( Object.entries(config).filter(([key]) => overridableKeys.has(key as keyof z.input)) diff --git a/backend/src/services/super-admin/super-admin-service.ts b/backend/src/services/super-admin/super-admin-service.ts index a179e646c..2ca7a0c33 100644 --- a/backend/src/services/super-admin/super-admin-service.ts +++ b/backend/src/services/super-admin/super-admin-service.ts @@ -5,7 +5,13 @@ import jwt from "jsonwebtoken"; import { IdentityAuthMethod, OrgMembershipRole, TSuperAdmin, TSuperAdminUpdate } from "@app/db/schemas"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; import { PgSqlLock, TKeyStoreFactory } from "@app/keystore/keystore"; -import { getConfig, getOriginalConfig, overrideEnvConfig, overwriteSchema } from "@app/lib/config/env"; +import { + getConfig, + getOriginalConfig, + overrideEnvConfig, + overwriteSchema, + validateOverrides +} from "@app/lib/config/env"; import { infisicalSymmetricEncypt } from "@app/lib/crypto/encryption"; import { generateUserSrpKeys, getUserPrivateKey } from "@app/lib/crypto/srp"; import { BadRequestError, NotFoundError } from "@app/lib/errors"; @@ -417,6 +423,9 @@ export const superAdminServiceFactory = ({ let envOverridesUpdated = false; if (data.envOverrides !== undefined) { + // Verify input format + validateOverrides(data.envOverrides); + const encryptedEnvOverrides = encryptWithRoot(Buffer.from(JSON.stringify(data.envOverrides))); updatedData.encryptedEnvOverrides = encryptedEnvOverrides; updatedData.envOverrides = undefined; diff --git a/frontend/src/components/v2/HighlightText/HighlightText.tsx b/frontend/src/components/v2/HighlightText/HighlightText.tsx index 9b1c525eb..7f7bd6bee 100644 --- a/frontend/src/components/v2/HighlightText/HighlightText.tsx +++ b/frontend/src/components/v2/HighlightText/HighlightText.tsx @@ -18,21 +18,18 @@ export const HighlightText = ({ const escapedSearchTerm = searchTerm.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); const regex = new RegExp(escapedSearchTerm, "gi"); - while (true) { - const match = regex.exec(text); - if (match === null) break; - + for (const match of text.matchAll(regex)) { if (match.index > lastIndex) { parts.push({text.substring(lastIndex, match.index)}); } parts.push( - {text.substring(match.index, match.index + match[0].length)} + {match[0]} ); - lastIndex = regex.lastIndex; + lastIndex = match.index + match[0].length; } if (lastIndex < text.length) { diff --git a/frontend/src/pages/admin/EnvironmentPage/components/EnvironmentPageForm.tsx b/frontend/src/pages/admin/EnvironmentPage/components/EnvironmentPageForm.tsx index f2c50a3f5..70cef790d 100644 --- a/frontend/src/pages/admin/EnvironmentPage/components/EnvironmentPageForm.tsx +++ b/frontend/src/pages/admin/EnvironmentPage/components/EnvironmentPageForm.tsx @@ -189,10 +189,15 @@ export const EnvironmentPageForm = () => { }); reset(formData); - } catch { + } catch (error) { + const errorMessage = + (error as any)?.response?.data?.message || + (error as any)?.message || + "An unknown error occurred"; createNotification({ type: "error", - text: "Failed to update environment overrides" + title: "Failed to update environment overrides", + text: errorMessage }); } },