From 162ebfd4e0c25727efb33952d3bbf7420a02e2c3 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Thu, 24 Apr 2025 11:55:14 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=94=AF=E6=8C=81=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E5=9F=9F=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin-cert/src/plugin/cert-plugin/acme.ts | 16 ++++++++++++---- .../src/modules/cname/service/common-provider.ts | 14 +++++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts b/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts index 29c96247..41fa8cfc 100644 --- a/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts +++ b/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts @@ -7,7 +7,7 @@ import { IContext } from "@certd/pipeline"; import { ILogger, utils } from "@certd/basic"; import { IDnsProvider, IDomainParser } from "../../dns-provider/index.js"; import { HttpChallengeUploader } from "./uploads/api.js"; - +import punycode from "node:punycode"; export type CnameVerifyPlan = { type?: string; domain: string; @@ -203,14 +203,15 @@ export class AcmeService { this.logger.info("dns校验"); const keyAuthorization = await keyAuthorizationGetter(challenge); + const mainDomain = dnsProvider.usePunyCode() ? domain : punycode.toUnicode(domain); const recordValue = keyAuthorization; - let hostRecord = fullRecord.replace(`${domain}`, ""); + let hostRecord = fullRecord.replace(`${mainDomain}`, ""); if (hostRecord.endsWith(".")) { hostRecord = hostRecord.substring(0, hostRecord.length - 1); } const recordReq = { - domain, + domain: mainDomain, fullRecord, hostRecord, type: "TXT", @@ -321,9 +322,16 @@ export class AcmeService { isTest?: boolean; privateKeyType?: string; }): Promise { - const { email, isTest, domains, csrInfo, dnsProvider, domainsVerifyPlan, httpUploader } = options; + const { email, isTest, csrInfo, dnsProvider, domainsVerifyPlan, httpUploader } = options; const client: acme.Client = await this.getAcmeClient(email, isTest); + let domains = options.domains; + const encodingDomains = []; + for (const domain of domains) { + encodingDomains.push(punycode.toASCII(domain)); + } + domains = encodingDomains; + /* Create CSR */ const { commonName, altNames } = this.buildCommonNameByDomains(domains); let privateKey = null; diff --git a/packages/ui/certd-server/src/modules/cname/service/common-provider.ts b/packages/ui/certd-server/src/modules/cname/service/common-provider.ts index c4913074..5125d269 100644 --- a/packages/ui/certd-server/src/modules/cname/service/common-provider.ts +++ b/packages/ui/certd-server/src/modules/cname/service/common-provider.ts @@ -1,5 +1,5 @@ -import { CreateRecordOptions, DnsProviderContext, IDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert'; -import { PlusService } from '@certd/lib-server'; +import {CreateRecordOptions, DnsProviderContext, IDnsProvider, RemoveRecordOptions} from '@certd/plugin-cert'; +import {PlusService} from '@certd/lib-server'; export type CommonCnameProvider = { id: number; @@ -24,7 +24,13 @@ export class CommonDnsProvider implements IDnsProvider { this.plusService = opts.plusService; } - async onInstance() {} + usePunyCode(): boolean { + return false + } + + async onInstance() { + } + async createRecord(options: CreateRecordOptions) { if (!this.config.domain.endsWith(options.domain)) { throw new Error('cname服务域名不匹配'); @@ -45,6 +51,7 @@ export class CommonDnsProvider implements IDnsProvider { }); return res; } + async removeRecord(options: RemoveRecordOptions) { const res = await this.plusService.requestWithToken({ url: '/activation/certd/cname/recordRemove', @@ -60,6 +67,7 @@ export class CommonDnsProvider implements IDnsProvider { }); return res; } + setCtx(ctx: DnsProviderContext): void { this.ctx = ctx; }