fix(secrets-service): throw on invalid env / path

This commit is contained in:
Daniel Hougaard
2025-08-26 19:55:52 +02:00
parent 8ffff7e779
commit 8f00bab61c
3 changed files with 41 additions and 1 deletions
@@ -22,6 +22,26 @@ const INTERPOLATION_TEST_REGEX = new RE2(INTERPOLATION_PATTERN_STRING);
export const shouldUseSecretV2Bridge = (version: number) => version === 3; export const shouldUseSecretV2Bridge = (version: number) => version === 3;
export const validateSecretPath = async (
data: {
projectId: string;
environment: string;
secretPath: string;
},
folderDAL: Pick<TSecretFolderDALFactory, "findBySecretPath">
) => {
const { projectId, environment, secretPath } = data;
const folder = await folderDAL.findBySecretPath(projectId, environment, secretPath);
if (!folder) {
throw new NotFoundError({
message: `Folder with path '${secretPath}' in environment '${environment}' was not found. Please ensure the environment slug and secret path is correct.`,
name: "SecretPathNotFound"
});
}
};
/** /**
* Grabs and processes nested secret references from a string * Grabs and processes nested secret references from a string
* *
@@ -64,7 +64,8 @@ import {
generatePaths, generatePaths,
getAllSecretReferences, getAllSecretReferences,
recursivelyGetSecretPaths, recursivelyGetSecretPaths,
reshapeBridgeSecret reshapeBridgeSecret,
validateSecretPath
} from "./secret-v2-bridge-fns"; } from "./secret-v2-bridge-fns";
import { import {
SecretOperations, SecretOperations,
@@ -1040,6 +1041,15 @@ export const secretV2BridgeServiceFactory = ({
projectId projectId
}); });
await validateSecretPath(
{
projectId,
environment,
secretPath: path
},
folderDAL
);
const encryptedCachedSecrets = await keyStore.getItem(cacheKey); const encryptedCachedSecrets = await keyStore.getItem(cacheKey);
if (encryptedCachedSecrets) { if (encryptedCachedSecrets) {
try { try {
@@ -97,6 +97,7 @@ import {
} from "./secret-types"; } from "./secret-types";
import { TSecretVersionDALFactory } from "./secret-version-dal"; import { TSecretVersionDALFactory } from "./secret-version-dal";
import { TSecretVersionTagDALFactory } from "./secret-version-tag-dal"; import { TSecretVersionTagDALFactory } from "./secret-version-tag-dal";
import { validateSecretPath } from "../secret-v2-bridge/secret-v2-bridge-fns";
type TSecretServiceFactoryDep = { type TSecretServiceFactoryDep = {
secretDAL: TSecretDALFactory; secretDAL: TSecretDALFactory;
@@ -616,6 +617,15 @@ export const secretServiceFactory = ({
actionProjectType: ActionProjectType.SecretManager actionProjectType: ActionProjectType.SecretManager
}); });
await validateSecretPath(
{
projectId,
environment,
secretPath: path
},
folderDAL
);
let paths: { folderId: string; path: string }[] = []; let paths: { folderId: string; path: string }[] = [];
if (recursive) { if (recursive) {