upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config.rs36
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);