From 2cb38dae055298f93d67fcb2b1001c6ef90b0179 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 31 Oct 2025 10:47:45 -0700 Subject: [PATCH] Add missing imports --- backend/src/@types/knex.d.ts | 21 ++++++++++++-- backend/src/db/schemas/models.ts | 14 +++++---- .../pki-acme/pki-acme-challenge-dal.ts | 29 +++++++++++++++---- .../pki-acme/pki-acme-challenge-service.ts | 4 +-- .../services/pki-acme/pki-acme-order-dal.ts | 14 +++++++-- 5 files changed, 62 insertions(+), 20 deletions(-) diff --git a/backend/src/@types/knex.d.ts b/backend/src/@types/knex.d.ts index 1daf722a1..580da4749 100644 --- a/backend/src/@types/knex.d.ts +++ b/backend/src/@types/knex.d.ts @@ -266,6 +266,24 @@ import { TOrgRoles, TOrgRolesInsert, TOrgRolesUpdate, + TPkiAcmeAccounts, + TPkiAcmeAccountsInsert, + TPkiAcmeAccountsUpdate, + TPkiAcmeAuths, + TPkiAcmeAuthsInsert, + TPkiAcmeAuthsUpdate, + TPkiAcmeChallenges, + TPkiAcmeChallengesInsert, + TPkiAcmeChallengesUpdate, + TPkiAcmeEnrollmentConfigs, + TPkiAcmeEnrollmentConfigsInsert, + TPkiAcmeEnrollmentConfigsUpdate, + TPkiAcmeOrderAuths, + TPkiAcmeOrderAuthsInsert, + TPkiAcmeOrderAuthsUpdate, + TPkiAcmeOrders, + TPkiAcmeOrdersInsert, + TPkiAcmeOrdersUpdate, TPkiAlerts, TPkiAlertsInsert, TPkiAlertsUpdate, @@ -287,9 +305,6 @@ import { TPkiEstEnrollmentConfigs, TPkiEstEnrollmentConfigsInsert, TPkiEstEnrollmentConfigsUpdate, - TPkiAcmeEnrollmentConfigs, - TPkiAcmeEnrollmentConfigsInsert, - TPkiAcmeEnrollmentConfigsUpdate, TPkiSubscribers, TPkiSubscribersInsert, TPkiSubscribersUpdate, diff --git a/backend/src/db/schemas/models.ts b/backend/src/db/schemas/models.ts index a031c83b9..1170138a3 100644 --- a/backend/src/db/schemas/models.ts +++ b/backend/src/db/schemas/models.ts @@ -28,11 +28,6 @@ export enum TableName { PkiEstEnrollmentConfig = "pki_est_enrollment_configs", PkiApiEnrollmentConfig = "pki_api_enrollment_configs", PkiAcmeEnrollmentConfig = "pki_acme_enrollment_configs", - PkiAcmeAccount = "pki_acme_accounts", - PkiAcmeOrder = "pki_acme_orders", - PkiAcmeOrderAuth = "pki_acme_order_auths", - PkiAcmeAuth = "pki_acme_auths", - PkiAcmeChallenge = "pki_acme_challenges", PkiSubscriber = "pki_subscribers", PkiAlert = "pki_alerts", PkiCollection = "pki_collections", @@ -216,7 +211,14 @@ export enum TableName { PamAccount = "pam_accounts", PamSession = "pam_sessions", - VaultExternalMigrationConfig = "vault_external_migration_configs" + VaultExternalMigrationConfig = "vault_external_migration_configs", + + // PKI ACME + PkiAcmeAccount = "pki_acme_accounts", + PkiAcmeOrder = "pki_acme_orders", + PkiAcmeOrderAuth = "pki_acme_order_auths", + PkiAcmeAuth = "pki_acme_auths", + PkiAcmeChallenge = "pki_acme_challenges" } export type TImmutableDBKeys = "id" | "createdAt" | "updatedAt" | "commitId"; diff --git a/backend/src/ee/services/pki-acme/pki-acme-challenge-dal.ts b/backend/src/ee/services/pki-acme/pki-acme-challenge-dal.ts index ae5c1f994..3103fec7e 100644 --- a/backend/src/ee/services/pki-acme/pki-acme-challenge-dal.ts +++ b/backend/src/ee/services/pki-acme/pki-acme-challenge-dal.ts @@ -1,5 +1,5 @@ import { TDbClient } from "@app/db"; -import { TableName } from "@app/db/schemas"; +import { TableName, TPkiAcmeAccounts, TPkiAcmeAuths } from "@app/db/schemas"; import { DatabaseError } from "@app/lib/errors"; import { ormify, selectAllTableCols, sqlNestRelationships } from "@app/lib/knex"; import { Knex } from "knex"; @@ -34,9 +34,14 @@ export const pkiAcmeChallengeDALFactory = (db: TDbClient) => { throw new DatabaseError({ error, name: "Find PKI ACME challenge by account id, auth id and challenge id" }); } }; - const findByIdWithAuthForUpdate = async (id: string, tx?: Knex) => { + const findByIdForChallengeValidation = async (id: string, tx?: Knex) => { const rows = await (tx || db)(TableName.PkiAcmeChallenge) - .join(TableName.PkiAcmeAuth, `${TableName.PkiAcmeChallenge}.authId`, `${TableName.PkiAcmeAuth}.id`) + .join(TableName.PkiAcmeAuth, `${TableName.PkiAcmeChallenge}.authId`, `${TableName.PkiAcmeAuth}.id`) + .join( + TableName.PkiAcmeAccount, + `${TableName.PkiAcmeAuth}.accountId`, + `${TableName.PkiAcmeAccount}.id` + ) .select( selectAllTableCols(TableName.PkiAcmeChallenge), db.ref("id").withSchema(TableName.PkiAcmeAuth).as("authId"), @@ -44,7 +49,9 @@ export const pkiAcmeChallengeDALFactory = (db: TDbClient) => { db.ref("status").withSchema(TableName.PkiAcmeAuth).as("authStatus"), db.ref("identifierType").withSchema(TableName.PkiAcmeAuth).as("authIdentifierType"), db.ref("identifierValue").withSchema(TableName.PkiAcmeAuth).as("authIdentifierValue"), - db.ref("expiresAt").withSchema(TableName.PkiAcmeAuth).as("authExpiresAt") + db.ref("expiresAt").withSchema(TableName.PkiAcmeAuth).as("authExpiresAt"), + db.ref("id").withSchema(TableName.PkiAcmeAccount).as("accountId"), + db.ref("publicKeyThumbprint").withSchema(TableName.PkiAcmeAccount).as("accountPublicKeyThumbprint") ) // For all challenges, acquire update lock on the auth to avoid race conditions .forUpdate(TableName.PkiAcmeAuth) @@ -68,7 +75,17 @@ export const pkiAcmeChallengeDALFactory = (db: TDbClient) => { identifierType: authIdentifierType, identifierValue: authIdentifierValue, expiresAt: authExpiresAt - }) + }), + childrenMapper: [ + { + key: "accountId", + label: "account" as const, + mapper: ({ accountId, accountPublicKeyThumbprint }) => ({ + id: accountId, + publicKeyThumbprint: accountPublicKeyThumbprint + }) + } + ] } ] })?.[0]; @@ -77,6 +94,6 @@ export const pkiAcmeChallengeDALFactory = (db: TDbClient) => { return { ...pkiAcmeChallengeOrm, findByAccountAuthAndChallengeIdWithToken, - findByIdWithAuthForUpdate + findByIdForChallengeValidation }; }; diff --git a/backend/src/ee/services/pki-acme/pki-acme-challenge-service.ts b/backend/src/ee/services/pki-acme/pki-acme-challenge-service.ts index 6e077d0c4..feaceb92f 100644 --- a/backend/src/ee/services/pki-acme/pki-acme-challenge-service.ts +++ b/backend/src/ee/services/pki-acme/pki-acme-challenge-service.ts @@ -6,7 +6,7 @@ import { getConfig } from "@app/lib/config/env"; import { calculateJwkThumbprint } from "jose"; type TPkiAcmeChallengeServiceFactoryDep = { - acmeChallengeDAL: Pick; + acmeChallengeDAL: Pick; }; export const pkiAcmeChallengeServiceFactory = ({ @@ -16,7 +16,7 @@ export const pkiAcmeChallengeServiceFactory = ({ const validateChallengeResponse = async (challengeId: string): Promise => { return await acmeChallengeDAL.transaction(async (tx) => { - const challenge = await acmeChallengeDAL.findByIdWithAuthForUpdate(challengeId, tx); + const challenge = await acmeChallengeDAL.findByIdForChallengeValidation(challengeId, tx); if (!challenge) { throw new NotFoundError({ message: "ACME challenge not found" }); } diff --git a/backend/src/ee/services/pki-acme/pki-acme-order-dal.ts b/backend/src/ee/services/pki-acme/pki-acme-order-dal.ts index d3b7466e4..cf544876c 100644 --- a/backend/src/ee/services/pki-acme/pki-acme-order-dal.ts +++ b/backend/src/ee/services/pki-acme/pki-acme-order-dal.ts @@ -1,7 +1,7 @@ import { Knex } from "knex"; import { TDbClient } from "@app/db"; -import { TableName } from "@app/db/schemas"; +import { TableName, TPkiAcmeAuths, TPkiAcmeOrderAuths } from "@app/db/schemas"; import { DatabaseError } from "@app/lib/errors"; import { ormify, selectAllTableCols, sqlNestRelationships } from "@app/lib/knex"; @@ -13,8 +13,16 @@ export const pkiAcmeOrderDALFactory = (db: TDbClient) => { const findByAccountAndOrderIdWithAuthorizations = async (accountId: string, orderId: string, tx?: Knex) => { try { const rows = await (tx || db)(TableName.PkiAcmeOrder) - .join(TableName.PkiAcmeOrderAuth, `${TableName.PkiAcmeOrderAuth}.orderId`, `${TableName.PkiAcmeOrder}.id`) - .join(TableName.PkiAcmeAuth, `${TableName.PkiAcmeOrderAuth}.authId`, `${TableName.PkiAcmeAuth}.id`) + .join( + TableName.PkiAcmeOrderAuth, + `${TableName.PkiAcmeOrderAuth}.orderId`, + `${TableName.PkiAcmeOrder}.id` + ) + .join( + TableName.PkiAcmeAuth, + `${TableName.PkiAcmeOrderAuth}.authId`, + `${TableName.PkiAcmeAuth}.id` + ) .select( selectAllTableCols(TableName.PkiAcmeOrder), db.ref("id").withSchema(TableName.PkiAcmeAuth).as("authId"),