diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/config.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/config.rs b/src/config.rs index 74327c9..1812fe2 100644 --- a/src/config.rs +++ b/src/config.rs | |||
| @@ -185,6 +185,10 @@ impl Config { | |||
| 185 | // If relay_owner_nsec not provided, load from file or generate | 185 | // If relay_owner_nsec not provided, load from file or generate |
| 186 | if config.relay_owner_nsec.is_none() { | 186 | if config.relay_owner_nsec.is_none() { |
| 187 | config.relay_owner_nsec = Some(Self::load_or_generate_relay_owner_key()?); | 187 | config.relay_owner_nsec = Some(Self::load_or_generate_relay_owner_key()?); |
| 188 | } else { | ||
| 189 | // If provided via CLI/env, trim any whitespace (newlines, spaces, etc.) | ||
| 190 | // This handles cases where the value is read from a file with trailing newline | ||
| 191 | config.relay_owner_nsec = config.relay_owner_nsec.map(|s| s.trim().to_string()); | ||
| 188 | } | 192 | } |
| 189 | 193 | ||
| 190 | Ok(config) | 194 | Ok(config) |
| @@ -371,6 +375,38 @@ mod tests { | |||
| 371 | } | 375 | } |
| 372 | 376 | ||
| 373 | #[test] | 377 | #[test] |
| 378 | fn test_relay_owner_nsec_trims_whitespace() { | ||
| 379 | // Test that Config::load() trims whitespace from provided nsec | ||
| 380 | // This simulates what happens when nsec is read from a file with trailing newline | ||
| 381 | let nsec_clean = "nsec1rt5f3gfnktvd77fdarg00ff94l8j833y778ym3xlzkx89g9v5zvq4y2qee"; | ||
| 382 | let nsec_with_newline = format!("{}\n", nsec_clean); | ||
| 383 | let nsec_with_spaces = format!(" {} ", nsec_clean); | ||
| 384 | |||
| 385 | // Test that trimming happens by directly creating config with whitespace | ||
| 386 | let mut config1 = Config::for_testing(); | ||
| 387 | config1.relay_owner_nsec = Some(nsec_with_newline.clone()); | ||
| 388 | // Simulate what Config::load() does | ||
| 389 | config1.relay_owner_nsec = config1.relay_owner_nsec.map(|s| s.trim().to_string()); | ||
| 390 | |||
| 391 | let mut config2 = Config::for_testing(); | ||
| 392 | config2.relay_owner_nsec = Some(nsec_with_spaces.clone()); | ||
| 393 | config2.relay_owner_nsec = config2.relay_owner_nsec.map(|s| s.trim().to_string()); | ||
| 394 | |||
| 395 | // Both should parse successfully after trimming | ||
| 396 | assert!(config1.relay_owner_keys().is_ok()); | ||
| 397 | assert!(config2.relay_owner_keys().is_ok()); | ||
| 398 | |||
| 399 | // Both should produce the same public key | ||
| 400 | let keys1 = config1.relay_owner_keys().unwrap(); | ||
| 401 | let keys2 = config2.relay_owner_keys().unwrap(); | ||
| 402 | assert_eq!(keys1.public_key(), keys2.public_key()); | ||
| 403 | |||
| 404 | // Verify trimmed nsec equals clean nsec | ||
| 405 | assert_eq!(config1.relay_owner_nsec.unwrap(), nsec_clean); | ||
| 406 | assert_eq!(config2.relay_owner_nsec.unwrap(), nsec_clean); | ||
| 407 | } | ||
| 408 | |||
| 409 | #[test] | ||
| 374 | fn test_metrics_config_defaults() { | 410 | fn test_metrics_config_defaults() { |
| 375 | let config = Config::for_testing(); | 411 | let config = Config::for_testing(); |
| 376 | assert!(config.metrics_enabled); | 412 | assert!(config.metrics_enabled); |