feat: get secret by ID

This commit is contained in:
Daniel Hougaard
2025-03-07 19:25:53 +04:00
parent 58ebebb162
commit 50610945be
6 changed files with 178 additions and 8 deletions
+39 -3
View File
@@ -9,7 +9,8 @@ import {
SecretEncryptionAlgo,
SecretKeyEncoding,
SecretsSchema,
SecretType
SecretType,
TableName
} from "@app/db/schemas";
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service";
@@ -44,6 +45,7 @@ import { TSecretFolderDALFactory } from "../secret-folder/secret-folder-dal";
import { TSecretImportDALFactory } from "../secret-import/secret-import-dal";
import { fnSecretsFromImports } from "../secret-import/secret-import-fns";
import { TSecretTagDALFactory } from "../secret-tag/secret-tag-dal";
import { TSecretV2BridgeDALFactory } from "../secret-v2-bridge/secret-v2-bridge-dal";
import { TSecretV2BridgeServiceFactory } from "../secret-v2-bridge/secret-v2-bridge-service";
import { TGetSecretReferencesTreeDTO } from "../secret-v2-bridge/secret-v2-bridge-types";
import { TSecretDALFactory } from "./secret-dal";
@@ -71,6 +73,7 @@ import {
TDeleteManySecretRawDTO,
TDeleteSecretDTO,
TDeleteSecretRawDTO,
TGetASecretByIdRawDTO,
TGetASecretDTO,
TGetASecretRawDTO,
TGetSecretAccessListDTO,
@@ -89,13 +92,14 @@ import { TSecretVersionTagDALFactory } from "./secret-version-tag-dal";
type TSecretServiceFactoryDep = {
secretDAL: TSecretDALFactory;
secretV2BridgeDAL: Pick<TSecretV2BridgeDALFactory, "findOneWithTags">;
secretTagDAL: TSecretTagDALFactory;
secretVersionDAL: TSecretVersionDALFactory;
projectDAL: Pick<TProjectDALFactory, "checkProjectUpgradeStatus" | "findProjectBySlug" | "findById">;
projectEnvDAL: Pick<TProjectEnvDALFactory, "findOne">;
folderDAL: Pick<
TSecretFolderDALFactory,
"findBySecretPath" | "updateById" | "findById" | "findByManySecretPath" | "find"
"findBySecretPath" | "updateById" | "findById" | "findByManySecretPath" | "find" | "findSecretPathByFolderIds"
>;
secretV2BridgeService: TSecretV2BridgeServiceFactory;
secretBlindIndexDAL: TSecretBlindIndexDALFactory;
@@ -124,6 +128,7 @@ type TSecretServiceFactoryDep = {
export type TSecretServiceFactory = ReturnType<typeof secretServiceFactory>;
export const secretServiceFactory = ({
secretDAL,
secretV2BridgeDAL,
projectEnvDAL,
secretTagDAL,
secretVersionDAL,
@@ -1382,6 +1387,36 @@ export const secretServiceFactory = ({
};
};
const getSecretByIdRaw = async ({ secretId, actorId, actor, actorOrgId, actorAuthMethod }: TGetASecretByIdRawDTO) => {
const sec = await secretV2BridgeDAL.findOneWithTags({
[`${TableName.SecretV2}.id` as "id"]: secretId
});
if (!sec) {
throw new NotFoundError({
message: `Secret with id '${secretId}' not found`,
name: "GetSecretById"
});
}
const { shouldUseSecretV2Bridge } = await projectBotService.getBotKey(sec.projectId);
if (shouldUseSecretV2Bridge) {
const secret = await secretV2BridgeService.getSecretById({
secret: sec,
actorId,
actor,
actorOrgId,
actorAuthMethod
});
return secret;
}
throw new BadRequestError({
message: "Project version not supported. Please upgrade your project."
});
};
const getSecretByNameRaw = async ({
type,
path,
@@ -3088,6 +3123,7 @@ export const secretServiceFactory = ({
getSecretsRawMultiEnv,
getSecretReferenceTree,
getSecretsRawByFolderMappings,
getSecretAccessList
getSecretAccessList,
getSecretByIdRaw
};
};