pub use crate::shared::validation::{
sanitize_error_message, validate_hostname, validate_local_path, validate_remote_path,
validate_username,
};
#[cfg(test)]
mod tests {
use super::*;
use std::path::Path;
#[test]
fn test_validate_local_path() {
assert!(validate_local_path(Path::new("/tmp/test.txt")).is_ok());
assert!(validate_local_path(Path::new("./test.txt")).is_ok());
assert!(validate_local_path(Path::new("../etc/passwd")).is_err());
assert!(validate_local_path(Path::new("/tmp/../etc/passwd")).is_err());
assert!(validate_local_path(Path::new("/tmp//test")).is_err());
}
#[test]
fn test_validate_remote_path() {
assert!(validate_remote_path("/home/user/file.txt").is_ok());
assert!(validate_remote_path("~/documents/report.pdf").is_ok());
assert!(validate_remote_path("C:\\Users\\test\\file.txt").is_ok());
assert!(validate_remote_path("../etc/passwd").is_err());
assert!(validate_remote_path("/tmp/$(whoami)").is_err());
assert!(validate_remote_path("/tmp/test; rm -rf /").is_err());
assert!(validate_remote_path("/tmp/test`id`").is_err());
assert!(validate_remote_path("/tmp/test|cat").is_err());
assert!(validate_remote_path("").is_err());
}
#[test]
fn test_validate_hostname() {
assert!(validate_hostname("example.com").is_ok());
assert!(validate_hostname("192.168.1.1").is_ok());
assert!(validate_hostname("server-01.example.com").is_ok());
assert!(validate_hostname("[::1]").is_ok());
assert!(validate_hostname("example..com").is_err());
assert!(validate_hostname("server--01").is_err());
assert!(validate_hostname("example.com; ls").is_err());
assert!(validate_hostname("").is_err());
}
#[test]
fn test_validate_username() {
assert!(validate_username("john_doe").is_ok());
assert!(validate_username("user123").is_ok());
assert!(validate_username("test.user").is_ok());
assert!(validate_username("-user").is_err());
assert!(validate_username("user@domain").is_err());
assert!(validate_username("user name").is_err());
assert!(validate_username("").is_err());
assert!(validate_username(&"a".repeat(50)).is_err());
}
}