Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 86 additions & 20 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ thiserror = "2.0.21"
tracing = "0.1.44"
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
serde = { version = "1.0.229", features = ["derive"] }
serde_yaml = "0.9"
serde-saphyr = "2.1.1"
futures = "0.3.34"
async-trait = "0.1.92"
indicatif = "0.18.6"
Expand Down
4 changes: 2 additions & 2 deletions src/config/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ impl Config {
.with_context(|| format!("Failed to read configuration file at {}. Please check file permissions and ensure the file is accessible.", expanded_path.display()))?;

let config: Config =
serde_yaml::from_str(&content).with_context(|| format!("Failed to parse YAML configuration file at {}. Please check the YAML syntax is valid.\nCommon issues:\n - Incorrect indentation (use spaces, not tabs)\n - Missing colons after keys\n - Unquoted special characters", expanded_path.display()))?;
serde_saphyr::from_str(&content).with_context(|| format!("Failed to parse YAML configuration file at {}. Please check the YAML syntax is valid.\nCommon issues:\n - Incorrect indentation (use spaces, not tabs)\n - Missing colons after keys\n - Unquoted special characters", expanded_path.display()))?;

Ok(config)
}
Expand Down Expand Up @@ -194,7 +194,7 @@ impl Config {
}

let yaml =
serde_yaml::to_string(self).context("Failed to serialize configuration to YAML")?;
serde_saphyr::to_string(self).context("Failed to serialize configuration to YAML")?;

fs::write(&expanded_path, yaml)
.await
Expand Down
30 changes: 15 additions & 15 deletions src/config/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ clusters:
user: staging_user
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();
assert_eq!(config.defaults.user, Some("admin".to_string()));
assert_eq!(config.clusters.len(), 2);

Expand Down Expand Up @@ -160,7 +160,7 @@ clusters:
- host2
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// Test cluster with override - merged config
let with_override = config.get_interactive_config(Some("with_override"));
Expand Down Expand Up @@ -240,7 +240,7 @@ clusters:
user: detailed-user
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();
let nodes = config.resolve_nodes("ipv6").unwrap();

assert_eq!(
Expand Down Expand Up @@ -271,7 +271,7 @@ clusters:
- host: prod2.internal
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// Both nodes should inherit global jump_host
assert_eq!(
Expand Down Expand Up @@ -308,7 +308,7 @@ clusters:
- host: staging1.internal
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// production cluster nodes should use cluster jump_host
assert_eq!(
Expand Down Expand Up @@ -354,7 +354,7 @@ clusters:
jump_host: prod-bastion.example.com
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// prod1 should use node-level jump_host
assert_eq!(
Expand Down Expand Up @@ -395,7 +395,7 @@ clusters:
jump_host: ""
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// prod1 should use cluster jump_host
assert_eq!(
Expand Down Expand Up @@ -425,7 +425,7 @@ clusters:
- host: prod1.internal
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// No jump_host configured anywhere
assert_eq!(config.get_jump_host("production", 0), None);
Expand All @@ -445,7 +445,7 @@ clusters:
- host: prod1.internal
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// Nonexistent cluster should return global default from get_cluster_jump_host
assert_eq!(
Expand Down Expand Up @@ -473,7 +473,7 @@ clusters:
jump_host: prod-bastion.example.com
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// Simple node (string) should inherit cluster jump_host
// Simple nodes cannot have node-level jump_host override
Expand Down Expand Up @@ -503,7 +503,7 @@ clusters:
jump_host: ${TEST_BASTION_HOST}:${TEST_BASTION_PORT}
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// Node-level with $VAR syntax
assert_eq!(
Expand Down Expand Up @@ -537,7 +537,7 @@ clusters:
jump_host: prod-bastion.example.com
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// Node at index 0 exists - should use cluster jump_host
assert_eq!(
Expand Down Expand Up @@ -575,7 +575,7 @@ clusters:
jump_host: prod-bastion.example.com
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// Simple node at index 0 - inherits cluster jump_host
assert_eq!(
Expand Down Expand Up @@ -617,7 +617,7 @@ clusters:
jump_host: cluster-bastion:4444
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// Node with port in jump_host
assert_eq!(
Expand Down Expand Up @@ -653,7 +653,7 @@ clusters:
jump_host: bastion1,bastion2
"#;

let config: Config = serde_yaml::from_str(yaml).unwrap();
let config: Config = serde_saphyr::from_str(yaml).unwrap();

// Node with multi-hop jump_host
assert_eq!(
Expand Down
2 changes: 1 addition & 1 deletion src/server/auth/password.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ impl PasswordVerifier {
match tokio::fs::read_to_string(path).await {
Ok(content) => {
let file_users: UsersFile =
serde_yaml::from_str(&content).with_context(|| {
serde_saphyr::from_str(&content).with_context(|| {
format!("Failed to parse users file: {}", path.display())
})?;

Expand Down
6 changes: 3 additions & 3 deletions src/server/config/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ pub fn generate_config_template() -> String {
yaml.push_str("# 4. Default values\n\n");

// Serialize config with defaults
yaml.push_str(&serde_yaml::to_string(&config).unwrap_or_default());
yaml.push_str(&serde_saphyr::to_string(&config).unwrap_or_default());

yaml
}
Expand All @@ -159,7 +159,7 @@ fn load_config_file(path: &Path) -> Result<ServerFileConfig> {
let content =
std::fs::read_to_string(path).context(format!("Failed to read {}", path.display()))?;

serde_yaml::from_str(&content).context(format!("Failed to parse {}", path.display()))
serde_saphyr::from_str(&content).context(format!("Failed to parse {}", path.display()))
}

/// Check configuration file permissions on Unix systems.
Expand Down Expand Up @@ -453,7 +453,7 @@ mod tests {
assert!(template.contains("shell:"));

// Template should be valid YAML
let parsed: Result<ServerFileConfig, _> = serde_yaml::from_str(&template);
let parsed: Result<ServerFileConfig, _> = serde_saphyr::from_str(&template);
assert!(parsed.is_ok());
}

Expand Down
Loading
Loading