feat: finished up integration for est config management

This commit is contained in:
Sheen Capadngan
2024-08-14 01:00:31 +08:00
parent f2a49a79f0
commit 1f38b92ec6
10 changed files with 334 additions and 30 deletions
+4 -1
View File
@@ -86,6 +86,7 @@ import { certificateDALFactory } from "@app/services/certificate/certificate-dal
import { certificateServiceFactory } from "@app/services/certificate/certificate-service";
import { certificateAuthorityCertDALFactory } from "@app/services/certificate-authority/certificate-authority-cert-dal";
import { certificateAuthorityDALFactory } from "@app/services/certificate-authority/certificate-authority-dal";
import { certificateAuthorityEstConfigDALFactory } from "@app/services/certificate-authority/certificate-authority-est-config-dal";
import { certificateAuthorityQueueFactory } from "@app/services/certificate-authority/certificate-authority-queue";
import { certificateAuthoritySecretDALFactory } from "@app/services/certificate-authority/certificate-authority-secret-dal";
import { certificateAuthorityServiceFactory } from "@app/services/certificate-authority/certificate-authority-service";
@@ -585,6 +586,7 @@ export const registerRoutes = async (
const certificateAuthorityCertDAL = certificateAuthorityCertDALFactory(db);
const certificateAuthoritySecretDAL = certificateAuthoritySecretDALFactory(db);
const certificateAuthorityCrlDAL = certificateAuthorityCrlDALFactory(db);
const certificateAuthorityEstConfigDAL = certificateAuthorityEstConfigDALFactory(db);
const certificateDAL = certificateDALFactory(db);
const certificateBodyDAL = certificateBodyDALFactory(db);
@@ -625,7 +627,8 @@ export const registerRoutes = async (
certificateBodyDAL,
projectDAL,
kmsService,
permissionService
permissionService,
certificateAuthorityEstConfigDAL
});
const certificateAuthorityCrlService = certificateAuthorityCrlServiceFactory({
@@ -2,6 +2,7 @@ import ms from "ms";
import { z } from "zod";
import { CertificateAuthoritiesSchema } from "@app/db/schemas";
import { CertificateAuthorityEstConfigsSchema } from "@app/db/schemas/certificate-authority-est-configs";
import { EventType } from "@app/ee/services/audit-log/audit-log-types";
import { CERTIFICATE_AUTHORITIES } from "@app/lib/api-docs";
import { readLimit, writeLimit } from "@app/server/config/rateLimiter";
@@ -697,4 +698,128 @@ export const registerCaRouter = async (server: FastifyZodProvider) => {
};
}
});
server.route({
method: "POST",
url: "/:caId/est-config",
config: {
rateLimit: writeLimit
},
onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]),
schema: {
description: "Create CA EST configuration",
params: z.object({
caId: z.string().trim()
}),
body: z.object({
caChain: z.string().trim().min(1),
passphrase: z.string().min(1),
isEnabled: z.boolean().default(true)
}),
response: {
200: z.object({
caEstConfig: CertificateAuthorityEstConfigsSchema.pick({
caId: true,
isEnabled: true
})
})
}
},
handler: async (req) => {
const caEstConfig = await server.services.certificateAuthority.createCaEstConfiguration({
caId: req.params.caId,
actor: req.permission.type,
actorId: req.permission.id,
actorAuthMethod: req.permission.authMethod,
actorOrgId: req.permission.orgId,
...req.body
});
return {
caEstConfig
};
}
});
server.route({
method: "PATCH",
url: "/:caId/est-config",
config: {
rateLimit: writeLimit
},
onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]),
schema: {
description: "Update CA EST configuration",
params: z.object({
caId: z.string().trim()
}),
body: z.object({
caChain: z.string().trim().min(1).optional(),
passphrase: z.string().min(1).optional(),
isEnabled: z.boolean().optional()
}),
response: {
200: z.object({
caEstConfig: CertificateAuthorityEstConfigsSchema.pick({
caId: true,
isEnabled: true
})
})
}
},
handler: async (req) => {
const caEstConfig = await server.services.certificateAuthority.updateCaEstConfiguration({
caId: req.params.caId,
actor: req.permission.type,
actorId: req.permission.id,
actorAuthMethod: req.permission.authMethod,
actorOrgId: req.permission.orgId,
...req.body
});
return {
caEstConfig
};
}
});
server.route({
method: "GET",
url: "/:caId/est-config",
config: {
rateLimit: readLimit
},
onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]),
schema: {
description: "Get CA EST configuration",
params: z.object({
caId: z.string().trim()
}),
response: {
200: z.object({
caEstConfig: CertificateAuthorityEstConfigsSchema.pick({
caId: true,
isEnabled: true
}).merge(
z.object({
caChain: z.string()
})
)
})
}
},
handler: async (req) => {
const caEstConfig = await server.services.certificateAuthority.getCaEstConfiguration({
caId: req.params.caId,
actor: req.permission.type,
actorId: req.permission.id,
actorAuthMethod: req.permission.authMethod,
actorOrgId: req.permission.orgId
});
return {
caEstConfig
};
}
});
};