feat: updated based on review feedback

This commit is contained in:
=
2025-02-18 00:45:53 +05:30
parent 8a7f7ac9fd
commit 1ca578ee03
4 changed files with 44 additions and 15 deletions
@@ -352,6 +352,7 @@ interface CreateSecretBatchEvent {
secrets: Array<{ secrets: Array<{
secretId: string; secretId: string;
secretKey: string; secretKey: string;
secretPath?: string;
secretVersion: number; secretVersion: number;
secretMetadata?: TSecretMetadata; secretMetadata?: TSecretMetadata;
}>; }>;
@@ -374,8 +375,14 @@ interface UpdateSecretBatchEvent {
type: EventType.UPDATE_SECRETS; type: EventType.UPDATE_SECRETS;
metadata: { metadata: {
environment: string; environment: string;
secretPath: string; secretPath?: string;
secrets: Array<{ secretId: string; secretKey: string; secretVersion: number; secretMetadata?: TSecretMetadata }>; secrets: Array<{
secretId: string;
secretKey: string;
secretVersion: number;
secretMetadata?: TSecretMetadata;
secretPath?: string;
}>;
}; };
} }
+1 -1
View File
@@ -722,7 +722,7 @@ export const RAW_SECRETS = {
secretComment: "Update comment to the secret.", secretComment: "Update comment to the secret.",
environment: "The slug of the environment where the secret is located.", environment: "The slug of the environment where the secret is located.",
mode: "Defines how the system should handle missing secrets during an update.", mode: "Defines how the system should handle missing secrets during an update.",
secretPath: "The path of the secret to update.", secretPath: "The default path for secrets to update or upsert, if not provided in the secret details.",
secretValue: "The new value of the secret.", secretValue: "The new value of the secret.",
skipMultilineEncoding: "Skip multiline encoding for the secret value.", skipMultilineEncoding: "Skip multiline encoding for the secret value.",
type: "The type of the secret to update.", type: "The type of the secret to update.",
+31 -7
View File
@@ -2035,7 +2035,7 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
.nativeEnum(SecretUpdateMode) .nativeEnum(SecretUpdateMode)
.optional() .optional()
.default(SecretUpdateMode.FailOnNotFound) .default(SecretUpdateMode.FailOnNotFound)
.describe(RAW_SECRETS.UPDATE.environment), .describe(RAW_SECRETS.UPDATE.mode),
secrets: z secrets: z
.object({ .object({
secretKey: SecretNameSchema.describe(RAW_SECRETS.UPDATE.secretName), secretKey: SecretNameSchema.describe(RAW_SECRETS.UPDATE.secretName),
@@ -2105,15 +2105,39 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
metadata: { metadata: {
environment: req.body.environment, environment: req.body.environment,
secretPath: req.body.secretPath, secretPath: req.body.secretPath,
secrets: secrets.map((secret) => ({ secrets: secrets
secretId: secret.id, .filter((el) => el.version > 1)
secretKey: secret.secretKey, .map((secret) => ({
secretVersion: secret.version, secretId: secret.id,
secretMetadata: secretMetadataMap.get(secret.secretKey) secretPath: secret.secretPath,
})) secretKey: secret.secretKey,
secretVersion: secret.version,
secretMetadata: secretMetadataMap.get(secret.secretKey)
}))
} }
} }
}); });
const createdSecrets = secrets.filter((el) => el.version === 1);
if (createdSecrets.length) {
await server.services.auditLog.createAuditLog({
projectId: secrets[0].workspace,
...req.auditLogInfo,
event: {
type: EventType.CREATE_SECRETS,
metadata: {
environment: req.body.environment,
secretPath: req.body.secretPath,
secrets: createdSecrets.map((secret) => ({
secretId: secret.id,
secretPath: secret.secretPath,
secretKey: secret.secretKey,
secretVersion: secret.version,
secretMetadata: secretMetadataMap.get(secret.secretKey)
}))
}
}
});
}
await server.services.telemetry.sendPostHogEvents({ await server.services.telemetry.sendPostHogEvents({
event: PostHogEventTypes.SecretUpdated, event: PostHogEventTypes.SecretUpdated,
@@ -1294,9 +1294,8 @@ export const secretV2BridgeServiceFactory = ({
await kmsService.createCipherPairWithDataKey({ type: KmsDataKey.SecretManager, projectId }); await kmsService.createCipherPairWithDataKey({ type: KmsDataKey.SecretManager, projectId });
const updatedSecrets: Array<TSecretsV2 & { secretPath: string }> = []; const updatedSecrets: Array<TSecretsV2 & { secretPath: string }> = [];
/* eslint-disable no-await-in-loop */
await secretDAL.transaction(async (tx) => { await secretDAL.transaction(async (tx) => {
for (const folder of folders) { for await (const folder of folders) {
if (!folder) throw new NotFoundError({ message: "Folder not found" }); if (!folder) throw new NotFoundError({ message: "Folder not found" });
const folderId = folder.id; const folderId = folder.id;
@@ -1336,7 +1335,7 @@ export const secretV2BridgeServiceFactory = ({
message: `Secret does not exist: ${diff( message: `Secret does not exist: ${diff(
secretsToUpdate.map((el) => el.secretKey), secretsToUpdate.map((el) => el.secretKey),
secretsToUpdateInDB.map((el) => el.key) secretsToUpdateInDB.map((el) => el.key)
).join(",")} in path ${folder.path}` ).join(", ")} in path ${folder.path}`
}); });
const secretsToUpdateInDBGroupedByKey = groupBy(secretsToUpdateInDB, (i) => i.key); const secretsToUpdateInDBGroupedByKey = groupBy(secretsToUpdateInDB, (i) => i.key);
@@ -1426,7 +1425,7 @@ export const secretV2BridgeServiceFactory = ({
throw new BadRequestError({ throw new BadRequestError({
message: `Secret with new name already exists: ${secretsWithNewName message: `Secret with new name already exists: ${secretsWithNewName
.map((el) => el.newSecretName) .map((el) => el.newSecretName)
.join(",")}` .join(", ")}`
}); });
secretsWithNewName.forEach((el) => { secretsWithNewName.forEach((el) => {
@@ -1530,7 +1529,6 @@ export const secretV2BridgeServiceFactory = ({
} }
}); });
/* eslint-enable */
await Promise.allSettled(folders.map((el) => (el?.id ? snapshotService.performSnapshot(el.id) : undefined))); await Promise.allSettled(folders.map((el) => (el?.id ? snapshotService.performSnapshot(el.id) : undefined)));
await Promise.allSettled( await Promise.allSettled(
folders.map((el) => folders.map((el) =>