validateInput method
Validate input before execution and permission checks.
Implementation
@override
ValidationResult validateInput(Map<String, dynamic> input) {
// Validate operation.
final opStr = input['operation'] as String?;
if (opStr == null || !isValidLspOperation(opStr)) {
return ValidationResult.invalid('Invalid operation: $opStr');
}
// Validate file path.
final filePath = input['filePath'] as String?;
if (filePath == null || filePath.isEmpty) {
return const ValidationResult.invalid('filePath is required');
}
final absolutePath = _expandPath(filePath);
// SECURITY: Skip filesystem checks for UNC paths.
if (absolutePath.startsWith('\\\\') || absolutePath.startsWith('//')) {
return const ValidationResult.valid();
}
// Check file exists.
final file = File(absolutePath);
if (!file.existsSync()) {
return ValidationResult.invalid('File does not exist: $filePath');
}
if (!file.statSync().type.toString().contains('file')) {
return ValidationResult.invalid('Path is not a file: $filePath');
}
// Validate line/character are positive integers.
final line = input['line'];
if (line is! int || line < 1) {
return const ValidationResult.invalid('line must be a positive integer');
}
final character = input['character'];
if (character is! int || character < 1) {
return const ValidationResult.invalid(
'character must be a positive integer',
);
}
return const ValidationResult.valid();
}