Improve domain name limitations checks

This commit is contained in:
nemunaire 2024-01-19 11:12:30 +01:00
parent 3506f744b8
commit e505e002d0
4 changed files with 15 additions and 17 deletions

View File

@ -61,7 +61,7 @@
value = "";
}
export let dn: string;
export let dn: string = "";
export let origin: Domain | DomainInList;
export let value: string = "";
export let zone: Zone;
@ -70,10 +70,7 @@
$: newDomainState = value?validateNewSubdomain(value):undefined;
let endsWithOrigin = false;
$: endsWithOrigin = value.length > origin.domain.length && (
value.substring(value.length - origin.domain.length) === origin.domain ||
value.substring(value.length - origin.domain.length + 1) === origin.domain.substring(0, origin.domain.length - 1)
)
$: endsWithOrigin = value.endsWith(origin.domain) || value.endsWith(origin.domain.substring(0, origin.domain.length - 1));
let newDomainAppend: string | null = null;
$: {
@ -90,7 +87,7 @@
// Check domain is valid
newDomainState = validateDomain(
value,
(value.length > origin.domain.length && value.substring(value.length - origin.domain.length) === origin.domain)?origin.domain:""
origin.domain
);
// Check domain doesn't already exists

View File

@ -45,9 +45,9 @@
export let step: number;
export let service: ServiceCombined | null = null;
export let form = "addSvcForm";
export let origin: Domain | DomainInList | undefined;
export let origin: Domain | DomainInList | undefined = undefined;
export let update = false;
export let zoneId: number | undefined;
export let zoneId: number | undefined = undefined;
export let canDelete = false;
export let canContinue = false;

View File

@ -58,10 +58,7 @@
$: newDomainState = value?validateNewSubdomain(value):undefined;
let endsWithOrigin = false;
$: endsWithOrigin = value.length > origin.domain.length && (
value.substring(value.length - origin.domain.length) === origin.domain ||
value.substring(value.length - origin.domain.length + 1) === origin.domain.substring(0, origin.domain.length - 1)
)
$: endsWithOrigin = value.endsWith(origin.domain) || value.endsWith(origin.domain.substring(0, origin.domain.length - 1));
let newDomainAppend: string | null = null;
$: {
@ -77,7 +74,7 @@
function validateNewSubdomain(value: string): boolean | undefined {
newDomainState = validateDomain(
value,
(value.length > origin.domain.length && value.substring(value.length - origin.domain.length) === origin.domain)?origin.domain:""
origin.domain
);
return newDomainState;
}

View File

@ -213,24 +213,28 @@ export function nsrrtype(input: number | string): string {
}
}
export function validateDomain(dn: string, subdomain: string = ""): boolean | undefined {
export function validateDomain(dn: string, origin: string = "", hostname: boolean = false): boolean | undefined {
let ret: boolean | undefined = undefined;
if (dn.length !== 0) {
dn = fqdn(dn, origin);
if (!dn.endsWith(origin)) {
return false;
}
ret = dn.length >= 1 && dn.length <= 254;
if (ret) {
const domains = dn.split('.');
// Remove the last . if any, it's ok
if (!subdomain && domains[domains.length - 1] === '') {
if (domains[domains.length - 1] === '') {
domains.pop();
}
let newDomainState: boolean = ret
domains.forEach(function (domain) {
newDomainState = newDomainState && domain.length >= 1 && domain.length <= 63;
newDomainState = newDomainState && domain[0] !== '-' && domain[domain.length - 1] !== '-';
newDomainState = newDomainState && /^(\*|_?[a-zA-Z0-9]([a-zA-Z0-9-]?[a-zA-Z0-9])*)$/.test(domain);
newDomainState = newDomainState && (!hostname || /^(\*|_?[a-zA-Z0-9]([a-zA-Z0-9-]?[a-zA-Z0-9])*)$/.test(domain));
})
ret = newDomainState;
}