2025-07-13 18:25:09 +08:00
|
|
|
import {ISubDomainsGetter} from "@certd/plugin-cert";
|
2025-07-13 18:30:04 +08:00
|
|
|
import {SubDomainService} from "../sub-domain-service.js";
|
2026-01-31 02:39:28 +08:00
|
|
|
import { DomainService } from "../../../cert/service/domain-service.js";
|
2025-07-13 18:25:09 +08:00
|
|
|
|
|
|
|
|
export class SubDomainsGetter implements ISubDomainsGetter {
|
|
|
|
|
userId: number;
|
|
|
|
|
subDomainService: SubDomainService;
|
2026-01-31 02:39:28 +08:00
|
|
|
domainService: DomainService;
|
2025-07-13 18:25:09 +08:00
|
|
|
|
2026-01-31 02:39:28 +08:00
|
|
|
constructor(userId: number, subDomainService: SubDomainService, domainService: DomainService) {
|
2025-07-13 18:25:09 +08:00
|
|
|
this.userId = userId;
|
|
|
|
|
this.subDomainService = subDomainService;
|
2026-01-31 02:39:28 +08:00
|
|
|
this.domainService = domainService;
|
2025-07-13 18:25:09 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getSubDomains() {
|
|
|
|
|
return await this.subDomainService.getListByUserId(this.userId)
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-31 02:39:28 +08:00
|
|
|
async hasSubDomain(fullDomain: string) {
|
|
|
|
|
const subDomains = await this.getSubDomains()
|
|
|
|
|
if (subDomains && subDomains.length > 0) {
|
|
|
|
|
const fullDomainDot = "." + fullDomain;
|
|
|
|
|
for (const subDomain of subDomains) {
|
|
|
|
|
if (fullDomainDot.endsWith("." + subDomain)) {
|
|
|
|
|
//找到子域名托管
|
|
|
|
|
return subDomain;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
let arr = fullDomain.split(".")
|
|
|
|
|
while(arr.length>0){
|
|
|
|
|
const subDomain = arr.join(".")
|
|
|
|
|
const domain = await this.domainService.findOne({
|
|
|
|
|
where: {
|
|
|
|
|
userId: this.userId,
|
|
|
|
|
domain: subDomain,
|
|
|
|
|
challengeType: "dns",
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
if(domain){
|
|
|
|
|
return subDomain
|
|
|
|
|
}
|
|
|
|
|
arr = arr.slice(1)
|
|
|
|
|
}
|
|
|
|
|
return null
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-13 18:25:09 +08:00
|
|
|
}
|