Files
EMS-ESP32/interface/src/validators/network.ts
2025-10-28 22:19:43 +01:00

50 lines
1.3 KiB
TypeScript

import Schema from 'async-validator';
import type { NetworkSettingsType } from 'types';
import { HOSTNAME_VALIDATOR, IP_ADDRESS_VALIDATOR } from './shared';
// Reusable validator rules
const REQUIRED_IP_VALIDATOR = (fieldName: string) => [
{ required: true, message: `${fieldName} is required` },
IP_ADDRESS_VALIDATOR
];
const OPTIONAL_IP_VALIDATOR = [IP_ADDRESS_VALIDATOR];
// Helper to create static IP validation rules
const createStaticIpRules = () => ({
local_ip: REQUIRED_IP_VALIDATOR('Local IP'),
gateway_ip: REQUIRED_IP_VALIDATOR('Gateway IP'),
subnet_mask: REQUIRED_IP_VALIDATOR('Subnet mask'),
dns_ip_1: OPTIONAL_IP_VALIDATOR,
dns_ip_2: OPTIONAL_IP_VALIDATOR
});
export const createNetworkSettingsValidator = (
networkSettings: NetworkSettingsType
) =>
new Schema({
ssid: [
{ type: 'string', max: 32, message: 'SSID must be 32 characters or less' }
],
bssid: [
{
type: 'string',
max: 17,
message: 'BSSID must be 17 characters or empty'
}
],
password: [
{
type: 'string',
max: 64,
message: 'Password must be 64 characters or less'
}
],
hostname: [
{ required: true, message: 'Hostname is required' },
HOSTNAME_VALIDATOR
],
...(networkSettings.static_ip_config && createStaticIpRules())
});