update
This commit is contained in:
@@ -102,29 +102,43 @@ export function validateRouteAction(action: IRouteAction): { valid: boolean; err
|
||||
errors.push(`Invalid action type: ${action.type}`);
|
||||
}
|
||||
|
||||
// Validate target for 'forward' action
|
||||
// Validate targets for 'forward' action
|
||||
if (action.type === 'forward') {
|
||||
if (!action.target) {
|
||||
errors.push('Target is required for forward action');
|
||||
if (!action.targets || !Array.isArray(action.targets) || action.targets.length === 0) {
|
||||
errors.push('Targets array is required for forward action');
|
||||
} else {
|
||||
// Validate target host
|
||||
if (!action.target.host) {
|
||||
errors.push('Target host is required');
|
||||
} else if (typeof action.target.host !== 'string' &&
|
||||
!Array.isArray(action.target.host) &&
|
||||
typeof action.target.host !== 'function') {
|
||||
errors.push('Target host must be a string, array of strings, or function');
|
||||
}
|
||||
// Validate each target
|
||||
action.targets.forEach((target, index) => {
|
||||
// Validate target host
|
||||
if (!target.host) {
|
||||
errors.push(`Target[${index}] host is required`);
|
||||
} else if (typeof target.host !== 'string' &&
|
||||
!Array.isArray(target.host) &&
|
||||
typeof target.host !== 'function') {
|
||||
errors.push(`Target[${index}] host must be a string, array of strings, or function`);
|
||||
}
|
||||
|
||||
// Validate target port
|
||||
if (action.target.port === undefined) {
|
||||
errors.push('Target port is required');
|
||||
} else if (typeof action.target.port !== 'number' &&
|
||||
typeof action.target.port !== 'function') {
|
||||
errors.push('Target port must be a number or a function');
|
||||
} else if (typeof action.target.port === 'number' && !isValidPort(action.target.port)) {
|
||||
errors.push('Target port must be between 1 and 65535');
|
||||
}
|
||||
// Validate target port
|
||||
if (target.port === undefined) {
|
||||
errors.push(`Target[${index}] port is required`);
|
||||
} else if (typeof target.port !== 'number' &&
|
||||
typeof target.port !== 'function' &&
|
||||
target.port !== 'preserve') {
|
||||
errors.push(`Target[${index}] port must be a number, 'preserve', or a function`);
|
||||
} else if (typeof target.port === 'number' && !isValidPort(target.port)) {
|
||||
errors.push(`Target[${index}] port must be between 1 and 65535`);
|
||||
}
|
||||
|
||||
// Validate match criteria if present
|
||||
if (target.match) {
|
||||
if (target.match.ports && !Array.isArray(target.match.ports)) {
|
||||
errors.push(`Target[${index}] match.ports must be an array`);
|
||||
}
|
||||
if (target.match.method && !Array.isArray(target.match.method)) {
|
||||
errors.push(`Target[${index}] match.method must be an array`);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Validate TLS options for forward actions
|
||||
@@ -242,7 +256,10 @@ export function hasRequiredPropertiesForAction(route: IRouteConfig, actionType:
|
||||
|
||||
switch (actionType) {
|
||||
case 'forward':
|
||||
return !!route.action.target && !!route.action.target.host && !!route.action.target.port;
|
||||
return !!route.action.targets &&
|
||||
Array.isArray(route.action.targets) &&
|
||||
route.action.targets.length > 0 &&
|
||||
route.action.targets.every(t => t.host && t.port !== undefined);
|
||||
case 'socket-handler':
|
||||
return !!route.action.socketHandler && typeof route.action.socketHandler === 'function';
|
||||
default:
|
||||
|
Reference in New Issue
Block a user