misc: add delete protection for projects on create

This commit is contained in:
Sheen Capadngan
2025-11-11 01:52:48 +08:00
parent 5534924f54
commit d546335345
4 changed files with 14 additions and 6 deletions
@@ -162,7 +162,8 @@ export const registerProjectRouter = async (server: FastifyZodProvider) => {
.default(InfisicalProjectTemplate.Default) .default(InfisicalProjectTemplate.Default)
.describe(PROJECTS.CREATE.template), .describe(PROJECTS.CREATE.template),
type: z.nativeEnum(ProjectType).default(ProjectType.SecretManager), type: z.nativeEnum(ProjectType).default(ProjectType.SecretManager),
shouldCreateDefaultEnvs: z.boolean().optional().default(true) shouldCreateDefaultEnvs: z.boolean().optional().default(true),
hasDeleteProtection: z.boolean().optional().default(false)
}), }),
response: { response: {
200: z.object({ 200: z.object({
@@ -183,7 +184,8 @@ export const registerProjectRouter = async (server: FastifyZodProvider) => {
kmsKeyId: req.body.kmsKeyId, kmsKeyId: req.body.kmsKeyId,
template: req.body.template, template: req.body.template,
type: req.body.type, type: req.body.type,
createDefaultEnvs: req.body.shouldCreateDefaultEnvs createDefaultEnvs: req.body.shouldCreateDefaultEnvs,
hasDeleteProtection: req.body.hasDeleteProtection
}); });
await server.services.telemetry.sendPostHogEvents({ await server.services.telemetry.sendPostHogEvents({
@@ -110,7 +110,8 @@ export const registerDeprecatedProjectRouter = async (server: FastifyZodProvider
.default(InfisicalProjectTemplate.Default) .default(InfisicalProjectTemplate.Default)
.describe(PROJECTS.CREATE.template), .describe(PROJECTS.CREATE.template),
type: z.nativeEnum(ProjectType).default(ProjectType.SecretManager), type: z.nativeEnum(ProjectType).default(ProjectType.SecretManager),
shouldCreateDefaultEnvs: z.boolean().optional().default(true) shouldCreateDefaultEnvs: z.boolean().optional().default(true),
hasDeleteProtection: z.boolean().optional().default(false)
}), }),
response: { response: {
200: z.object({ 200: z.object({
@@ -131,7 +132,8 @@ export const registerDeprecatedProjectRouter = async (server: FastifyZodProvider
kmsKeyId: req.body.kmsKeyId, kmsKeyId: req.body.kmsKeyId,
template: req.body.template, template: req.body.template,
type: req.body.type, type: req.body.type,
createDefaultEnvs: req.body.shouldCreateDefaultEnvs createDefaultEnvs: req.body.shouldCreateDefaultEnvs,
hasDeleteProtection: req.body.hasDeleteProtection
}); });
await server.services.telemetry.sendPostHogEvents({ await server.services.telemetry.sendPostHogEvents({
@@ -252,7 +252,8 @@ export const projectServiceFactory = ({
tx: trx, tx: trx,
createDefaultEnvs = true, createDefaultEnvs = true,
template = InfisicalProjectTemplate.Default, template = InfisicalProjectTemplate.Default,
type = ProjectType.SecretManager type = ProjectType.SecretManager,
hasDeleteProtection
}: TCreateProjectDTO) => { }: TCreateProjectDTO) => {
const organization = await orgDAL.findOne({ id: actorOrgId }); const organization = await orgDAL.findOne({ id: actorOrgId });
const { permission } = await permissionService.getOrgPermission({ const { permission } = await permissionService.getOrgPermission({
@@ -325,7 +326,8 @@ export const projectServiceFactory = ({
slug, slug,
kmsSecretManagerKeyId: kmsKeyId, kmsSecretManagerKeyId: kmsKeyId,
version: ProjectVersion.V3, version: ProjectVersion.V3,
pitVersionLimit: 10 pitVersionLimit: 10,
hasDeleteProtection
}, },
tx tx
); );
@@ -587,6 +589,7 @@ export const projectServiceFactory = ({
actorOrgId, actorOrgId,
actionProjectType: ActionProjectType.Any actionProjectType: ActionProjectType.Any
}); });
return project; return project;
}; };
@@ -51,6 +51,7 @@ export type TCreateProjectDTO = {
pitVersionLimit?: number; pitVersionLimit?: number;
tx?: Knex; tx?: Knex;
type?: ProjectType; type?: ProjectType;
hasDeleteProtection?: boolean;
}; };
export type TDeleteProjectBySlugDTO = { export type TDeleteProjectBySlugDTO = {