From 6064b39c05783c40eb429eb8cfeb4ca4ee887085 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Tue, 28 Oct 2025 19:14:37 -0700 Subject: [PATCH] Refactor --- backend/src/ee/routes/v1/pki-acme-router.ts | 7 ++----- .../ee/services/pki-acme/pki-acme-service.ts | 20 +++++++------------ 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/backend/src/ee/routes/v1/pki-acme-router.ts b/backend/src/ee/routes/v1/pki-acme-router.ts index 8361fd330..cda0fc478 100644 --- a/backend/src/ee/routes/v1/pki-acme-router.ts +++ b/backend/src/ee/routes/v1/pki-acme-router.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-floating-promises */ import { z } from "zod"; +import { AcmeBadPublicKeyError } from "@app/ee/services/pki-acme/pki-acme-errors"; import { CreateAcmeAccountBodySchema, CreateAcmeAccountResponseSchema, @@ -24,15 +25,11 @@ import { RespondToAcmeChallengeResponseSchema, RespondToAcmeChallengeSchema } from "@app/ee/services/pki-acme/pki-acme-schemas"; -import { TCreateAcmeAccountPayload, TRawJwsPayload } from "@app/ee/services/pki-acme/pki-acme-types"; +import { TRawJwsPayload } from "@app/ee/services/pki-acme/pki-acme-types"; import { ApiDocsTags } from "@app/lib/api-docs"; -import { getConfig } from "@app/lib/config/env"; import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; -import { AcmeBadPublicKeyError } from "@app/ee/services/pki-acme/pki-acme-errors"; export const registerPkiAcmeRouter = async (server: FastifyZodProvider) => { - const appCfg = getConfig(); - server.addContentTypeParser("application/jose+json", { parseAs: "string" }, (_, body, done) => { try { const strBody = body instanceof Buffer ? body.toString() : body; diff --git a/backend/src/ee/services/pki-acme/pki-acme-service.ts b/backend/src/ee/services/pki-acme/pki-acme-service.ts index b75a76979..316328784 100644 --- a/backend/src/ee/services/pki-acme/pki-acme-service.ts +++ b/backend/src/ee/services/pki-acme/pki-acme-service.ts @@ -33,7 +33,6 @@ import { TGetAcmeDirectoryResponse, TGetAcmeOrderResponse, TJwsPayload, - TJwsPayloadWithJwk, TListAcmeOrdersResponse, TPkiAcmeServiceFactory, TRawJwsPayload, @@ -74,15 +73,13 @@ export const pkiAcmeServiceFactory = ({ rawJwsPayload: TRawJwsPayload, getJWK: (protectedHeader: JWSHeaderParameters) => Promise, schema: z.ZodSchema - ): Promise => { + ): Promise> => { let result: FlattenedVerifyResult; try { result = await flattenedVerify(rawJwsPayload, async (protectedHeader: JWSHeaderParameters | undefined) => { if (protectedHeader === undefined) { throw new AcmeMalformedError({ detail: "Protected header is required" }); } - const parsedHeader = ProtectedHeaderSchema.parse(protectedHeader); - // TODO: consume the nonce here const jwk = await getJWK(protectedHeader); return await importJWK(jwk, protectedHeader.alg); }); @@ -96,15 +93,12 @@ export const pkiAcmeServiceFactory = ({ logger.error(error, "Unexpected error while verifying JWS payload"); throw new AcmeServerInternalError({ detail: "Failed to verify JWS payload" }); } - const { payload: rawPayload, protectedHeader: rawProtectedHeader } = result!; - const { success, data: protectedHeader } = ProtectedHeaderSchema.safeParse(rawProtectedHeader); - if (!success) { - throw new AcmeMalformedError({ detail: "Invalid protected header" }); - } - - const decoder = new TextDecoder(); - const jsonPayload = JSON.parse(decoder.decode(rawPayload)); + const { protectedHeader: rawProtectedHeader, payload: rawPayload } = result; try { + const protectedHeader = ProtectedHeaderSchema.parse(rawProtectedHeader); + // TODO: consume the nonce here + const decoder = new TextDecoder(); + const jsonPayload = JSON.parse(decoder.decode(rawPayload)); const payload = schema.parse(jsonPayload); return { protectedHeader, @@ -297,7 +291,7 @@ export const pkiAcmeServiceFactory = ({ }; return { - validateCreateAcmeAccountJwsPayload, + validateJwsPayload, getAcmeDirectory, getAcmeNewNonce, createAcmeAccount,