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

View File

@@ -162,7 +162,8 @@ export const registerProjectRouter = async (server: FastifyZodProvider) => {
.default(InfisicalProjectTemplate.Default)
.describe(PROJECTS.CREATE.template),
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: {
200: z.object({
@@ -183,7 +184,8 @@ export const registerProjectRouter = async (server: FastifyZodProvider) => {
kmsKeyId: req.body.kmsKeyId,
template: req.body.template,
type: req.body.type,
createDefaultEnvs: req.body.shouldCreateDefaultEnvs
createDefaultEnvs: req.body.shouldCreateDefaultEnvs,
hasDeleteProtection: req.body.hasDeleteProtection
});
await server.services.telemetry.sendPostHogEvents({

View File

@@ -110,7 +110,8 @@ export const registerDeprecatedProjectRouter = async (server: FastifyZodProvider
.default(InfisicalProjectTemplate.Default)
.describe(PROJECTS.CREATE.template),
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: {
200: z.object({
@@ -131,7 +132,8 @@ export const registerDeprecatedProjectRouter = async (server: FastifyZodProvider
kmsKeyId: req.body.kmsKeyId,
template: req.body.template,
type: req.body.type,
createDefaultEnvs: req.body.shouldCreateDefaultEnvs
createDefaultEnvs: req.body.shouldCreateDefaultEnvs,
hasDeleteProtection: req.body.hasDeleteProtection
});
await server.services.telemetry.sendPostHogEvents({

View File

@@ -252,7 +252,8 @@ export const projectServiceFactory = ({
tx: trx,
createDefaultEnvs = true,
template = InfisicalProjectTemplate.Default,
type = ProjectType.SecretManager
type = ProjectType.SecretManager,
hasDeleteProtection
}: TCreateProjectDTO) => {
const organization = await orgDAL.findOne({ id: actorOrgId });
const { permission } = await permissionService.getOrgPermission({
@@ -325,7 +326,8 @@ export const projectServiceFactory = ({
slug,
kmsSecretManagerKeyId: kmsKeyId,
version: ProjectVersion.V3,
pitVersionLimit: 10
pitVersionLimit: 10,
hasDeleteProtection
},
tx
);
@@ -587,6 +589,7 @@ export const projectServiceFactory = ({
actorOrgId,
actionProjectType: ActionProjectType.Any
});
return project;
};

View File

@@ -51,6 +51,7 @@ export type TCreateProjectDTO = {
pitVersionLimit?: number;
tx?: Knex;
type?: ProjectType;
hasDeleteProtection?: boolean;
};
export type TDeleteProjectBySlugDTO = {