mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-30 06:16:37 +08:00
74 lines
1.7 KiB
TypeScript
74 lines
1.7 KiB
TypeScript
import type { ManagedDomainItem } from '@/features/managed-domains/types';
|
|
|
|
export function isWildcardManagedDomain(domain: string) {
|
|
return domain.startsWith('*.');
|
|
}
|
|
|
|
export function buildRouteDomain(
|
|
managedDomain: string | undefined,
|
|
subdomainLabel: string,
|
|
) {
|
|
if (!managedDomain) {
|
|
return '';
|
|
}
|
|
|
|
if (!isWildcardManagedDomain(managedDomain)) {
|
|
return managedDomain.toLowerCase();
|
|
}
|
|
|
|
const normalizedLabel = subdomainLabel.trim().toLowerCase();
|
|
if (!normalizedLabel) {
|
|
return '';
|
|
}
|
|
|
|
return `${normalizedLabel}.${managedDomain.slice(2).toLowerCase()}`;
|
|
}
|
|
|
|
export function findManagedDomainForRoute(
|
|
routeDomain: string,
|
|
managedDomains: ManagedDomainItem[],
|
|
) {
|
|
const normalizedRouteDomain = routeDomain.trim().toLowerCase();
|
|
const exactMatch = managedDomains.find(
|
|
(item) => item.domain.toLowerCase() === normalizedRouteDomain,
|
|
);
|
|
|
|
if (exactMatch) {
|
|
return {
|
|
managedDomainId: exactMatch.domain,
|
|
subdomainLabel: '',
|
|
};
|
|
}
|
|
|
|
const wildcardMatch = managedDomains.find((item) => {
|
|
if (!isWildcardManagedDomain(item.domain)) {
|
|
return false;
|
|
}
|
|
|
|
const suffix = item.domain.slice(2).toLowerCase();
|
|
const suffixWithDot = `.${suffix}`;
|
|
if (!normalizedRouteDomain.endsWith(suffixWithDot)) {
|
|
return false;
|
|
}
|
|
|
|
const label = normalizedRouteDomain.slice(
|
|
0,
|
|
normalizedRouteDomain.length - suffixWithDot.length,
|
|
);
|
|
|
|
return Boolean(label) && !label.includes('.');
|
|
});
|
|
|
|
if (!wildcardMatch) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
managedDomainId: wildcardMatch.domain,
|
|
subdomainLabel: normalizedRouteDomain.slice(
|
|
0,
|
|
normalizedRouteDomain.length - wildcardMatch.domain.slice(1).length,
|
|
),
|
|
};
|
|
}
|