mirror of
https://github.com/certd/certd.git
synced 2026-04-23 19:57:27 +08:00
chore: 优化域名match
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
//域名是否匹配,支持通配符
|
||||
function match(targetDomains: string | string[], inDomains: string[]) {
|
||||
if (!targetDomains || targetDomains.length == 0) {
|
||||
return false;
|
||||
}
|
||||
if (!inDomains || inDomains.length == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof targetDomains === 'string') {
|
||||
targetDomains = [targetDomains];
|
||||
}
|
||||
for (let targetDomain of targetDomains) {
|
||||
let matched = false;
|
||||
if (targetDomain.startsWith('.')) {
|
||||
targetDomain = '*' + targetDomain;
|
||||
}
|
||||
for (let inDomain of inDomains) {
|
||||
if (inDomain.startsWith('.')) {
|
||||
inDomain = '*' + inDomain;
|
||||
}
|
||||
if (targetDomain === inDomain) {
|
||||
matched = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!inDomain.startsWith('*.')) {
|
||||
//不可能匹配
|
||||
break;
|
||||
}
|
||||
//子域名匹配通配符即可
|
||||
if (targetDomain === inDomain.substring(2)) {
|
||||
matched = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//有一个没有匹配上,就失败
|
||||
if (matched) {
|
||||
//这个匹配上了,检查下一个
|
||||
break;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//没有提前return 全部匹配上了
|
||||
return true;
|
||||
}
|
||||
|
||||
export const domainUtils = {
|
||||
match,
|
||||
};
|
||||
Reference in New Issue
Block a user