diff --git a/src/config.rs b/src/config.rs index b304c4a..a18df00 100644 --- a/src/config.rs +++ b/src/config.rs @@ -208,7 +208,7 @@ impl Default for ClientConfig { predict: true, predict_mode: default_predict_mode(), cache_attach_tickets: true, - credential_cache: "~/.local/share/dosh/credentials".to_string(), + credential_cache: default_credential_cache(), auth_preference: default_auth_preference(), trust_on_first_use: false, native_auth_timeout_ms: default_native_auth_timeout_ms(), @@ -264,6 +264,20 @@ fn default_auth_preference() -> String { "native,ssh".to_string() } +fn default_credential_cache() -> String { + #[cfg(windows)] + { + if let Some(local_app_data) = std::env::var_os("LOCALAPPDATA") { + return PathBuf::from(local_app_data) + .join("dosh") + .join("credentials") + .to_string_lossy() + .into_owned(); + } + } + "~/.local/share/dosh/credentials".to_string() +} + fn default_native_auth_timeout_ms() -> u64 { 700 } @@ -343,7 +357,7 @@ pub fn expand_tilde(path: &str) -> PathBuf { #[cfg(test)] mod tests { - use super::{ClientConfig, ServerConfig, expand_tilde}; + use super::{ClientConfig, ServerConfig, default_credential_cache, expand_tilde}; use std::path::PathBuf; #[test] @@ -359,6 +373,7 @@ dosh_port = 50000 assert!(config.predict); assert_eq!(config.predict_mode, "experimental"); assert_eq!(config.auth_preference, "native,ssh"); + assert_eq!(config.credential_cache, default_credential_cache()); assert_eq!(config.native_auth_timeout_ms, 700); assert_eq!(config.known_hosts, "~/.config/dosh/known_hosts"); assert_eq!(config.identity_files, vec!["~/.ssh/id_ed25519"]); @@ -383,6 +398,22 @@ dosh_port = 50000 ); } + #[test] + fn default_credential_cache_matches_platform() { + let cache = default_credential_cache(); + #[cfg(windows)] + if let Some(local_app_data) = std::env::var_os("LOCALAPPDATA") { + assert_eq!( + PathBuf::from(cache), + PathBuf::from(local_app_data) + .join("dosh") + .join("credentials") + ); + return; + } + assert_eq!(cache, "~/.local/share/dosh/credentials"); + } + #[test] fn old_server_configs_fill_new_fields_from_defaults() { let raw = r#"