chore(backend): добавить поддержку ACME и управление сертификатами
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
import { z } from "zod"
|
||||
|
||||
export const certUsageSchema = z.enum([
|
||||
"server",
|
||||
"client",
|
||||
"ca",
|
||||
"crl-sign",
|
||||
])
|
||||
|
||||
export const certStatusSchema = z.enum(["valid", "expired", "revoked"])
|
||||
|
||||
export const certificateDtoSchema = z.object({
|
||||
id: z.string().min(1),
|
||||
name: z.string().min(1),
|
||||
serverId: z.string().min(1),
|
||||
serverName: z.string().optional(),
|
||||
commonName: z.string(),
|
||||
sans: z.array(z.string()),
|
||||
issuedBy: z.string(),
|
||||
validFrom: z.string(),
|
||||
validUntil: z.string(),
|
||||
daysLeft: z.number().int(),
|
||||
keySize: z.number().int().nonnegative(),
|
||||
usage: z.array(certUsageSchema),
|
||||
trusted: z.boolean(),
|
||||
status: certStatusSchema,
|
||||
acmeStatus: z.string().optional(),
|
||||
})
|
||||
|
||||
export const certificatesListResponseSchema = z.object({
|
||||
certificates: z.array(certificateDtoSchema),
|
||||
failures: z.array(z.object({
|
||||
serverId: z.string(),
|
||||
serverName: z.string().optional(),
|
||||
error: z.string(),
|
||||
})),
|
||||
})
|
||||
|
||||
export const certificateTrustStoreSchema = z.enum([
|
||||
"www",
|
||||
"api",
|
||||
"sstp",
|
||||
"ovpn",
|
||||
"ipsec",
|
||||
"email",
|
||||
"radius",
|
||||
"fetch",
|
||||
"container",
|
||||
])
|
||||
|
||||
export const certificateIssueRequestSchema = z.object({
|
||||
serverId: z.union([z.string(), z.number()]),
|
||||
certName: z.string().min(1).max(64),
|
||||
domainNames: z.array(z.string().min(1)).min(1),
|
||||
keyType: z.enum(["rsa2048", "ec256"]).optional(),
|
||||
trustStore: z.array(certificateTrustStoreSchema).optional(),
|
||||
})
|
||||
|
||||
export const certificateIssueJobStatusSchema = z.enum([
|
||||
"queued",
|
||||
"running",
|
||||
"done",
|
||||
"failed",
|
||||
])
|
||||
|
||||
export const certificateIssueStepSchema = z.enum([
|
||||
"queued",
|
||||
"acme_order",
|
||||
"dns_challenge",
|
||||
"finalize",
|
||||
"import",
|
||||
"cleanup",
|
||||
"done",
|
||||
])
|
||||
|
||||
export const certificateIssueJobSchema = z.object({
|
||||
id: z.string().min(1),
|
||||
status: certificateIssueJobStatusSchema,
|
||||
step: certificateIssueStepSchema,
|
||||
serverId: z.string(),
|
||||
certName: z.string(),
|
||||
domainNames: z.array(z.string()),
|
||||
requestedAt: z.string(),
|
||||
startedAt: z.string().optional(),
|
||||
finishedAt: z.string().optional(),
|
||||
error: z.string().optional(),
|
||||
})
|
||||
|
||||
export const acmeCloudflareSettingsDtoSchema = z.object({
|
||||
directoryUrl: z.string().url(),
|
||||
defaultZoneId: z.string().optional(),
|
||||
tokenConfigured: z.boolean(),
|
||||
updatedAt: z.string().optional(),
|
||||
})
|
||||
|
||||
export const putAcmeCloudflareSettingsSchema = z.object({
|
||||
directoryUrl: z.string().url().optional(),
|
||||
defaultZoneId: z.union([z.string(), z.null()]).optional(),
|
||||
cloudflareApiToken: z.union([z.string(), z.null()]).optional(),
|
||||
})
|
||||
|
||||
export const testAcmeCloudflareSettingsSchema = z.object({
|
||||
cloudflareApiToken: z.string().optional(),
|
||||
})
|
||||
|
||||
export type CertificateDto = z.infer<typeof certificateDtoSchema>
|
||||
export type CertificatesListResponse = z.infer<typeof certificatesListResponseSchema>
|
||||
export type CertificateIssueRequest = z.infer<typeof certificateIssueRequestSchema>
|
||||
export type CertificateIssueJob = z.infer<typeof certificateIssueJobSchema>
|
||||
export type AcmeCloudflareSettingsDto = z.infer<typeof acmeCloudflareSettingsDtoSchema>
|
||||
@@ -8,6 +8,7 @@ export const eventSourceModuleSchema = z.enum([
|
||||
"filters",
|
||||
"traffic",
|
||||
"alerts",
|
||||
"certificates",
|
||||
"system",
|
||||
])
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
export * from "./servers.js"
|
||||
export * from "./alerts.js"
|
||||
export * from "./events.js"
|
||||
export * from "./certificates.js"
|
||||
|
||||
Reference in New Issue
Block a user