Improve overall domain input validation

This commit is contained in:
Johannes Zellner
2025-06-10 21:42:26 +02:00
parent f933716bf5
commit c3edf44cb4
4 changed files with 30 additions and 17 deletions
+20 -2
View File
@@ -2,6 +2,7 @@
import { ref, onMounted, computed } from 'vue';
import { Button, SingleSelect, InputGroup, FormGroup, TextInput } from 'pankow';
import { isValidDomain } from 'pankow/utils';
import PortBindings from '../PortBindings.vue';
import AppsModel from '../../models/AppsModel.js';
import DomainsModel from '../../models/DomainsModel.js';
@@ -52,6 +53,23 @@ function onAddRedirect() {
});
}
const formValid = computed(() => {
if (!domain.value) return false;
const checkForDomains = [{
domain: domain.value,
subdomain: subdomain.value,
}];
for (const d in secondaryDomains.value) checkForDomains.push({ domain: secondaryDomains.value[d].domain, subdomain: secondaryDomains.value[d].subdomain });
for (const d of aliases.value) checkForDomains.push({ domain: d.domain, subdomain: d.subdomain });
for (const d of redirects.value) checkForDomains.push({ domain: d.domain, subdomain: d.subdomain });
if (checkForDomains.find(d => !isValidDomain((d.subdomain ? (d.subdomain + '.') : '') + d.domain))) return false;
return true;
});
function onRemoveRedirect(index) {
redirects.value.splice(index, 1);
}
@@ -161,7 +179,7 @@ onMounted(async () => {
<div>
<form @submit.prevent="onSubmit()" autocomplete="off" novalidate>
<fieldset :disabled="busy">
<input type="submit" style="display: none;" :disabled="app.error || app.taskId"/>
<input type="submit" style="display: none;" :disabled="app.error || app.taskId || !formValid"/>
<FormGroup>
<label>{{ $t('app.location.location') }}</label>
@@ -228,6 +246,6 @@ onMounted(async () => {
<br/>
<Button @click="onSubmit()" :loading="busy" :disabled="busy || app.error || app.taskId" v-tooltip="app.error ? 'App is in error state' : (app.taskId ? 'App is busy' : '')">{{ $t('app.location.saveAction') }}</Button>
<Button @click="onSubmit()" :loading="busy" :disabled="busy || app.error || app.taskId || !formValid" v-tooltip="app.error ? 'App is in error state' : (app.taskId ? 'App is busy' : '')">{{ $t('app.location.saveAction') }}</Button>
</div>
</template>