From 3f7ac939326b0c7ec013a7534b6c0e58fb3e8cb4 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 7 Feb 2026 00:03:37 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=AD=90=E5=9F=9F=E5=90=8D=E6=89=98?= =?UTF-8?q?=E7=AE=A1=E5=9F=9F=E5=90=8D=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=80=9A=E9=85=8D=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/locales/langs/en-US/certd.ts | 1 + .../src/locales/langs/zh-CN/certd.ts | 1 + .../views/certd/pipeline/sub-domain/crud.tsx | 11 +++--- .../service/getter/sub-domain-getter.ts | 35 +++++++++++++++---- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts index b1daa1bf4..778ce2893 100644 --- a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts @@ -511,6 +511,7 @@ export default { selectRecordFirst: "Please select records first", subdomainHosted: "Hosted Subdomain", subdomainHelpText: "If you don't understand what subdomain hosting is,Do not set it randomly, as it may result in the inability to apply for the certificate. please refer to the documentation ", + subdomainHelpSupportStart: "Supports * wildcard, indicating that all subdomains of the domain are hosted (free subdomains)", subdomainManagement: "Subdomain Management", isDisabled: "Is Disabled", enabled: "Enabled", diff --git a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts index d12f92ff6..09d501223 100644 --- a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts @@ -521,6 +521,7 @@ export default { selectRecordFirst: "请先勾选记录", subdomainHosted: "托管的子域名", subdomainHelpText: "如果您不理解什么是子域托管,请不要随意设置(可能导致证书无法申请,以前设置过的cname记录也需要重新配置),可以参考文档", + subdomainHelpSupportStart: "支持*号通配符,表示该域名下的子域名都是托管的(免费子域名)", subdomainManagement: "子域管理", isDisabled: "是否禁用", enabled: "启用", diff --git a/packages/ui/certd-client/src/views/certd/pipeline/sub-domain/crud.tsx b/packages/ui/certd-client/src/views/certd/pipeline/sub-domain/crud.tsx index 6b1d39c1f..8e3544a64 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/sub-domain/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/pipeline/sub-domain/crud.tsx @@ -80,10 +80,13 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat render() { return (
- {t("certd.subdomainHelpText")} - - {t("certd.subdomainManagement")} - +
+ 1. {t("certd.subdomainHelpText")} + + {t("certd.subdomainManagement")} + +
+
2. {t("certd.subdomainHelpSupportStart")}
); }, diff --git a/packages/ui/certd-server/src/modules/pipeline/service/getter/sub-domain-getter.ts b/packages/ui/certd-server/src/modules/pipeline/service/getter/sub-domain-getter.ts index 87092264e..a95a310b4 100644 --- a/packages/ui/certd-server/src/modules/pipeline/service/getter/sub-domain-getter.ts +++ b/packages/ui/certd-server/src/modules/pipeline/service/getter/sub-domain-getter.ts @@ -1,5 +1,5 @@ -import {ISubDomainsGetter} from "@certd/plugin-cert"; -import {SubDomainService} from "../sub-domain-service.js"; +import { ISubDomainsGetter } from "@certd/plugin-cert"; +import { SubDomainService } from "../sub-domain-service.js"; import { DomainService } from "../../../cert/service/domain-service.js"; export class SubDomainsGetter implements ISubDomainsGetter { @@ -18,18 +18,39 @@ export class SubDomainsGetter implements ISubDomainsGetter { } async hasSubDomain(fullDomain: string) { + let arr = fullDomain.split(".") const subDomains = await this.getSubDomains() - if (subDomains && subDomains.length > 0) { + if (subDomains && subDomains.length > 0) { const fullDomainDot = "." + fullDomain; for (const subDomain of subDomains) { if (fullDomainDot.endsWith("." + subDomain)) { //找到子域名托管 return subDomain; } + + if (subDomain.startsWith("*.")) { + //如果子域名配置的是泛域名,说明这一层及以下的子域名都是托管的 + //以fullDomain在这一层的子域名作为返回值 + const nonStarDomain = subDomain.slice(1) + if (fullDomainDot.endsWith(nonStarDomain)) { + //提取fullDomain在这一层的子域名 + const fullArr = arr.reverse() + const subArr = subDomain.split(".").reverse() + let strBuilder = "" + for (let i =0 ;i0){ + while (arr.length > 0) { const subDomain = arr.join(".") const domain = await this.domainService.findOne({ where: { @@ -38,10 +59,10 @@ export class SubDomainsGetter implements ISubDomainsGetter { challengeType: "dns", } }) - if(domain){ + if (domain) { return subDomain } - arr = arr.slice(1) + arr = arr.slice(1) } return null }