chore: further cleanup

This commit is contained in:
Daniel Hougaard
2025-03-05 22:47:40 +04:00
parent 9cb1a31287
commit 12b447425b
5 changed files with 14 additions and 20 deletions
-7
View File
@@ -60,13 +60,6 @@ export class ForbiddenRequestError extends Error {
} }
} }
export class ForbiddenReadSecretError extends ForbiddenRequestError {
constructor({ error, message }: { message?: string; error?: unknown } = {}) {
super({ message, error });
this.name = "ForbiddenReadSecretError";
}
}
export class BadRequestError extends Error { export class BadRequestError extends Error {
name: string; name: string;
@@ -292,7 +292,8 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
secrets: secretRawSchema secrets: secretRawSchema
.omit({ createdAt: true, updatedAt: true }) .omit({ createdAt: true, updatedAt: true })
.extend({ .extend({
// secretValueHidden: z.boolean(), // No `secretValueHidden` on imports, because imported secrets that the user doesn't have read value permission on, will be filtered out.
// Therefore all returned secret imports will have the value present.
secretMetadata: ResourceMetadataSchema.optional() secretMetadata: ResourceMetadataSchema.optional()
}) })
.array() .array()
@@ -2322,7 +2323,6 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
} }
}); });
// ? No work needed, does not expose secret value.
server.route({ server.route({
method: "POST", method: "POST",
url: "/backfill-secret-references", url: "/backfill-secret-references",
@@ -7,6 +7,7 @@ import { logger } from "@app/lib/logger";
import { TProjectEnvDALFactory } from "../project-env/project-env-dal"; import { TProjectEnvDALFactory } from "../project-env/project-env-dal";
import { ResourceMetadataDTO } from "../resource-metadata/resource-metadata-schema"; import { ResourceMetadataDTO } from "../resource-metadata/resource-metadata-schema";
import { INFISICAL_SECRET_VALUE_HIDDEN_MASK } from "../secret/secret-fns";
import { TSecretFolderDALFactory } from "../secret-folder/secret-folder-dal"; import { TSecretFolderDALFactory } from "../secret-folder/secret-folder-dal";
import { TSecretV2BridgeDALFactory } from "./secret-v2-bridge-dal"; import { TSecretV2BridgeDALFactory } from "./secret-v2-bridge-dal";
import { TFnSecretBulkDelete, TFnSecretBulkInsert, TFnSecretBulkUpdate } from "./secret-v2-bridge-types"; import { TFnSecretBulkDelete, TFnSecretBulkInsert, TFnSecretBulkUpdate } from "./secret-v2-bridge-types";
@@ -649,7 +650,7 @@ export const reshapeBridgeSecret = (
...(secretValueHidden ...(secretValueHidden
? { ? {
secretValue: "<hidden-by-infisical>", secretValue: INFISICAL_SECRET_VALUE_HIDDEN_MASK,
secretValueHidden: true secretValueHidden: true
} }
: { : {
@@ -20,7 +20,7 @@ import { TSecretApprovalPolicyServiceFactory } from "@app/ee/services/secret-app
import { TSecretApprovalRequestDALFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-dal"; import { TSecretApprovalRequestDALFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-dal";
import { TSecretApprovalRequestSecretDALFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-secret-dal"; import { TSecretApprovalRequestSecretDALFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-secret-dal";
import { TSecretSnapshotServiceFactory } from "@app/ee/services/secret-snapshot/secret-snapshot-service"; import { TSecretSnapshotServiceFactory } from "@app/ee/services/secret-snapshot/secret-snapshot-service";
import { BadRequestError, ForbiddenReadSecretError, ForbiddenRequestError, NotFoundError } from "@app/lib/errors"; import { BadRequestError, ForbiddenRequestError, NotFoundError } from "@app/lib/errors";
import { diff, groupBy } from "@app/lib/fn"; import { diff, groupBy } from "@app/lib/fn";
import { setKnexStringValue } from "@app/lib/knex"; import { setKnexStringValue } from "@app/lib/knex";
import { logger } from "@app/lib/logger"; import { logger } from "@app/lib/logger";
@@ -987,7 +987,6 @@ export const secretV2BridgeServiceFactory = ({
secretDAL, secretDAL,
decryptSecretValue: (value) => (value ? secretManagerDecryptor({ cipherTextBlob: value }).toString() : undefined), decryptSecretValue: (value) => (value ? secretManagerDecryptor({ cipherTextBlob: value }).toString() : undefined),
canExpandValue: (expandEnvironment, expandSecretPath, expandSecretKey, expandSecretTags) => canExpandValue: (expandEnvironment, expandSecretPath, expandSecretKey, expandSecretTags) =>
// ? Question(Daniel): Will throw an error if the user doesn't have access to any of the expanded secrets.
permission.can( permission.can(
ProjectPermissionSecretActions.ReadValue, ProjectPermissionSecretActions.ReadValue,
subject(ProjectPermissionSub.Secrets, { subject(ProjectPermissionSub.Secrets, {
@@ -1249,8 +1248,9 @@ export const secretV2BridgeServiceFactory = ({
) && ) &&
secretType !== SecretType.Personal secretType !== SecretType.Personal
) { ) {
throw new ForbiddenReadSecretError({ throw new ForbiddenRequestError({
message: `You do not have permission to view secret value on secret with name '${secretName}'` message: `You do not have permission to view secret value on secret with name '${secretName}'`,
name: "ForbiddenReadSecretError"
}); });
} }
+6 -6
View File
@@ -51,6 +51,8 @@ import {
TUpdateManySecretsRawFnFactory TUpdateManySecretsRawFnFactory
} from "./secret-types"; } from "./secret-types";
export const INFISICAL_SECRET_VALUE_HIDDEN_MASK = "<hidden-by-infisical>";
export const generateSecretBlindIndexBySalt = async (secretName: string, secretBlindIndexDoc: TSecretBlindIndexes) => { export const generateSecretBlindIndexBySalt = async (secretName: string, secretBlindIndexDoc: TSecretBlindIndexes) => {
const appCfg = getConfig(); const appCfg = getConfig();
const secretBlindIndex = await buildSecretBlindIndexFromName({ const secretBlindIndex = await buildSecretBlindIndexFromName({
@@ -370,7 +372,7 @@ export const decryptSecretRaw = (
tag: secret.secretValueTag, tag: secret.secretValueTag,
key key
}) })
: "<hidden-by-infisical>"; : INFISICAL_SECRET_VALUE_HIDDEN_MASK;
let secretComment = ""; let secretComment = "";
@@ -1214,12 +1216,10 @@ export const conditionallyHideSecretValue = (
secretValueTag: string; secretValueTag: string;
} }
) => { ) => {
const hiddenPlaceholder = "hidden-by-infisical>";
return { return {
secretValueCiphertext: shouldHideValue ? hiddenPlaceholder : secretValueCiphertext, secretValueCiphertext: shouldHideValue ? INFISICAL_SECRET_VALUE_HIDDEN_MASK : secretValueCiphertext,
secretValueIV: shouldHideValue ? hiddenPlaceholder : secretValueIV, secretValueIV: shouldHideValue ? INFISICAL_SECRET_VALUE_HIDDEN_MASK : secretValueIV,
secretValueTag: shouldHideValue ? hiddenPlaceholder : secretValueTag, secretValueTag: shouldHideValue ? INFISICAL_SECRET_VALUE_HIDDEN_MASK : secretValueTag,
secretValueHidden: shouldHideValue secretValueHidden: shouldHideValue
}; };
}; };