mirror of
https://github.com/certd/certd.git
synced 2026-04-14 20:40:53 +08:00
33 lines
925 B
TypeScript
33 lines
925 B
TypeScript
|
|
import { IDomainParser, ISubDomainsGetter } from "./api";
|
||
|
|
//@ts-ignore
|
||
|
|
import psl from "psl";
|
||
|
|
|
||
|
|
export class DomainParser implements IDomainParser {
|
||
|
|
subDomainsGetter: ISubDomainsGetter;
|
||
|
|
constructor(subDomainsGetter: ISubDomainsGetter) {
|
||
|
|
this.subDomainsGetter = subDomainsGetter;
|
||
|
|
}
|
||
|
|
|
||
|
|
parseDomain(fullDomain: string) {
|
||
|
|
const parsed = psl.parse(fullDomain) as psl.ParsedDomain;
|
||
|
|
if (parsed.error) {
|
||
|
|
throw new Error(`解析${fullDomain}域名失败:` + JSON.stringify(parsed.error));
|
||
|
|
}
|
||
|
|
return parsed.domain as string;
|
||
|
|
}
|
||
|
|
|
||
|
|
async parse(fullDomain: string) {
|
||
|
|
const subDomains = await this.subDomainsGetter.getSubDomains();
|
||
|
|
if (subDomains && subDomains.length > 0) {
|
||
|
|
for (const subDomain of subDomains) {
|
||
|
|
if (fullDomain.endsWith(subDomain)) {
|
||
|
|
//找到子域名托管
|
||
|
|
return subDomain;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return this.parseDomain(fullDomain);
|
||
|
|
}
|
||
|
|
}
|