fix: improve input handling and validation for settings fields
CI / changes (push) Successful in 6s
CI / openapi (push) Has been skipped
CI / go (push) Has been skipped
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, , evobgp-web) (push) Successful in 1m2s
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, evobgp-all, evobgp-web-all) (push) Successful in 1m2s
CI / docker-bird (push) Has been skipped
CI / bird2 (push) Has been skipped
CI / docker-go-prime (push) Has been skipped
CI / docker-go (deploy/docker/evobgp-agent/Dockerfile, , evobgp-agent) (push) Has been skipped
CI / docker-go (evobgp-all, 1, deploy/docker/gobinary/Dockerfile, , evobgp-all) (push) Has been skipped
CI / docker-go (evobgp-api, 1, deploy/docker/gobinary/Dockerfile, , evobgp-api) (push) Has been skipped
CI / docker-go (evobgp-deploy, 0, deploy/docker/gobinary/Dockerfile, , evobgp-deploy) (push) Has been skipped
CI / docker-go (evobgp-ingest, 0, deploy/docker/gobinary/Dockerfile, , evobgp-ingest) (push) Has been skipped
CI / docker-go (evobgp-node, 0, deploy/docker/gobinary/Dockerfile, , evobgp-node) (push) Has been skipped
CI / docker-go (evobgp-render, 0, deploy/docker/gobinary/Dockerfile, , evobgp-render) (push) Has been skipped
CI / docker-go (evobgp-scheduler, 0, deploy/docker/gobinary/Dockerfile, , evobgp-scheduler) (push) Has been skipped

Updated the settings page to ensure proper handling of potentially undefined values by using the nullish coalescing operator. This change enhances the validation logic for various input fields, ensuring that only valid IPv4 and IPv6 addresses, as well as positive integers, are accepted. Additionally, improved user feedback by adding an error message when attempting to save settings with validation errors.
This commit is contained in:
Denozordec
2026-04-08 14:33:43 +07:00
parent 4f50350990
commit 1386b63db2
+13 -10
View File
@@ -105,25 +105,25 @@
revision_retention_minutes: ''
};
const routerId = knownFields.bird_router_id.trim();
const routerId = String(knownFields.bird_router_id ?? '').trim();
if (routerId && !isValidIPv4(routerId)) errors.bird_router_id = 'Введите корректный IPv4 адрес';
const localV4 = knownFields.bird_local_ipv4.trim();
const localV4 = String(knownFields.bird_local_ipv4 ?? '').trim();
if (localV4 && !isValidIPv4(localV4)) errors.bird_local_ipv4 = 'Введите корректный IPv4 адрес';
const localV6 = knownFields.bird_local_ipv6.trim();
const localV6 = String(knownFields.bird_local_ipv6 ?? '').trim();
if (localV6 && !isValidIPv6(localV6)) errors.bird_local_ipv6 = 'Введите корректный IPv6 адрес';
const asn = knownFields.bird_local_asn.trim();
const asn = String(knownFields.bird_local_asn ?? '').trim();
if (asn && !isPositiveInt(asn)) errors.bird_local_asn = 'ASN должен быть целым числом больше 0';
const bgpV4 = knownFields.bird_bgp_source_ipv4.trim();
const bgpV4 = String(knownFields.bird_bgp_source_ipv4 ?? '').trim();
if (bgpV4 && !isValidIPv4(bgpV4)) errors.bird_bgp_source_ipv4 = 'Введите корректный IPv4 адрес';
const bgpV6 = knownFields.bird_bgp_source_ipv6.trim();
const bgpV6 = String(knownFields.bird_bgp_source_ipv6 ?? '').trim();
if (bgpV6 && !isValidIPv6(bgpV6)) errors.bird_bgp_source_ipv6 = 'Введите корректный IPv6 адрес';
const revisionRetentionMinutes = knownFields.revision_retention_minutes.trim();
const revisionRetentionMinutes = String(knownFields.revision_retention_minutes ?? '').trim();
if (revisionRetentionMinutes) {
const ttl = Number(revisionRetentionMinutes);
if (
@@ -210,7 +210,7 @@
if (loadingSettings || savingSettings || hasValidationErrors) return false;
const hasKnownValues = knownFieldKeys.some((key) => {
const value = knownFields[key].trim();
const value = String(knownFields[key] ?? '').trim();
return value !== '' && !knownFieldErrors[key];
});
const hasAdditionalValues = additionalSettings.some((entry) => entry.key.trim() !== '');
@@ -219,11 +219,14 @@
});
async function saveApiSettings() {
if (!canSaveSettings) return;
if (!canSaveSettings) {
toast.error('Нечего сохранять или есть ошибки в полях');
return;
}
const payload: Record<string, string | number> = {};
for (const key of knownFieldKeys) {
const value = knownFields[key].trim();
const value = String(knownFields[key] ?? '').trim();
if (!value || knownFieldErrors[key]) continue;
if (key === 'bird_local_asn' || key === 'revision_retention_minutes') payload[key] = Number(value);
else payload[key] = value;