use std::path::Path;
#[cfg(unix)]
pub fn set_secure_permissions(path: &Path) -> std::io::Result<()> {
use std::os::unix::fs::PermissionsExt;
let mut perms = std::fs::metadata(path)?.permissions();
perms.set_mode(0o600); std::fs::set_permissions(path, perms)
}
#[cfg(not(unix))]
pub fn set_secure_permissions(_path: &Path) -> std::io::Result<()> {
Ok(()) }
#[cfg(test)]
mod tests {
use super::*;
use std::fs::File;
use tempfile::tempdir;
#[cfg(unix)]
#[test]
fn test_set_secure_permissions() {
use std::os::unix::fs::PermissionsExt;
let dir = tempdir().expect("Failed to create temp directory");
let file_path = dir.path().join("test_config.toml");
File::create(&file_path).expect("Failed to create test file");
set_secure_permissions(&file_path).expect("Failed to set permissions");
let metadata = std::fs::metadata(&file_path).expect("Failed to get metadata");
let mode = metadata.permissions().mode() & 0o777; assert_eq!(mode, 0o600, "Expected permissions 0600, got {:o}", mode);
}
#[cfg(unix)]
#[test]
fn test_set_secure_permissions_nonexistent_file() {
let path = Path::new("/nonexistent/path/to/file.toml");
let result = set_secure_permissions(path);
assert!(result.is_err(), "Expected error for nonexistent file");
}
#[cfg(not(unix))]
#[test]
fn test_set_secure_permissions_noop() {
let path = Path::new("any_path.toml");
let result = set_secure_permissions(path);
assert!(result.is_ok(), "Non-Unix should always return Ok");
}
}