diff options
| -rw-r--r-- | README.md | 16 | ||||
| -rw-r--r-- | mullvad-paths/Cargo.toml | 2 | ||||
| -rw-r--r-- | mullvad-paths/src/cache.rs | 27 | ||||
| -rw-r--r-- | mullvad-paths/src/lib.rs | 34 | ||||
| -rw-r--r-- | mullvad-paths/src/logs.rs | 24 | ||||
| -rw-r--r-- | mullvad-paths/src/rpc_address.rs | 15 | ||||
| -rw-r--r-- | mullvad-paths/src/settings.rs | 27 |
7 files changed, 67 insertions, 78 deletions
@@ -278,9 +278,9 @@ The settings directory can be changed by setting the `MULLVAD_SETTINGS_DIR` envi | Platform | Path | |----------|------| -| Linux | `/etc/mullvad-daemon/settings.json` | -| macOS | `/etc/mullvad-daemon/settings.json` | -| Windows | `%LOCALAPPDATA%\Mullvad\Mullvad VPN\settings.json` +| Linux | `/etc/mullvad-vpn/` | +| macOS | `/etc/mullvad-vpn/` | +| Windows | `%LOCALAPPDATA%\Mullvad VPN\` #### Logs @@ -288,8 +288,8 @@ The log directory can be changed by setting the `MULLVAD_LOG_DIR` environment va | Platform | Path | |----------|------| -| Linux | `/var/log/mullvad-daemon/` + systemd | -| macOS | `/var/log/mullvad-daemon/` | +| Linux | `/var/log/mullvad-vpn/` + systemd | +| macOS | `/var/log/mullvad-vpn/` | | Windows | `C:\ProgramData\Mullvad VPN\` | #### Cache @@ -298,9 +298,9 @@ The cache directory can be changed by setting the `MULLVAD_CACHE_DIR` environmen | Platform | Path | |----------|------| -| Linux | `/var/cache/mullvad-daemon/` | -| macOS | `/var/root/Library/Caches/mullvad-daemon/` | -| Windows | `%LOCALAPPDATA%\Mullvad\Mullvad VPN\` | +| Linux | `/var/cache/mullvad-vpn/` | +| macOS | `/var/root/Library/Caches/mullvad-vpn/` | +| Windows | `%LOCALAPPDATA%\Mullvad VPN\` | #### RPC address file diff --git a/mullvad-paths/Cargo.toml b/mullvad-paths/Cargo.toml index 2b28fcf377..b08e19b947 100644 --- a/mullvad-paths/Cargo.toml +++ b/mullvad-paths/Cargo.toml @@ -14,4 +14,4 @@ error-chain = "0.12" log = "0.4" [target.'cfg(any(windows, target_os = "macos"))'.dependencies] -app_dirs = "1.2" +dirs = "1.0" diff --git a/mullvad-paths/src/cache.rs b/mullvad-paths/src/cache.rs index 3f0b7130f9..133d08df86 100644 --- a/mullvad-paths/src/cache.rs +++ b/mullvad-paths/src/cache.rs @@ -1,33 +1,28 @@ -use {ErrorKind, Result, ResultExt}; +use Result; use std::env; -use std::fs; use std::path::PathBuf; /// Creates and returns the cache directory pointed to by `MULLVAD_CACHE_DIR`, or the default /// one if that variable is unset. pub fn cache_dir() -> Result<PathBuf> { - let dir = get_cache_dir()?; - fs::create_dir_all(&dir).chain_err(|| ErrorKind::CreateDirFailed(dir.clone()))?; - Ok(dir) + ::create_and_return(get_cache_dir) } fn get_cache_dir() -> Result<PathBuf> { match env::var_os("MULLVAD_CACHE_DIR") { Some(path) => Ok(PathBuf::from(path)), - None => get_default_cache_dir(), + None => get_default_cache_dir().map(|dir| dir.join(::PRODUCT_NAME)), } } -#[cfg(target_os = "linux")] fn get_default_cache_dir() -> Result<PathBuf> { - Ok(PathBuf::from("/var/cache/mullvad-daemon")) -} - -#[cfg(any(target_os = "macos", windows))] -fn get_default_cache_dir() -> Result<PathBuf> { - Ok(::app_dirs::get_app_root( - ::app_dirs::AppDataType::UserCache, - &::metadata::APP_INFO, - )?) + #[cfg(target_os = "linux")] + { + Ok(PathBuf::from("/var/cache")) + } + #[cfg(any(target_os = "macos", windows))] + { + ::dirs::cache_dir().ok_or_else(|| ::ErrorKind::FindDirError.into()) + } } diff --git a/mullvad-paths/src/lib.rs b/mullvad-paths/src/lib.rs index e7a8ffbc9e..a2f5478d31 100644 --- a/mullvad-paths/src/lib.rs +++ b/mullvad-paths/src/lib.rs @@ -1,10 +1,11 @@ #[cfg(any(windows, target_os = "macos"))] -extern crate app_dirs; +extern crate dirs; #[macro_use] extern crate error_chain; #[macro_use] extern crate log; +use std::fs; use std::path::PathBuf; error_chain! { @@ -13,35 +14,34 @@ error_chain! { description("Failed to create directory") display("Failed to create directory {}", path.display()) } + #[cfg(any(windows, target_os = "macos"))] + FindDirError { description("Not able to find requested directory" )} #[cfg(windows)] NoProgramDataDir { description("Missing %ALLUSERSPROFILE% environment variable") } } - foreign_links { - AppDirs(app_dirs::AppDirsError) #[cfg(any(windows, target_os = "macos"))]; - } } -#[cfg(any(windows, target_os = "macos"))] -mod metadata { - use app_dirs::AppInfo; +#[cfg(unix)] +const PRODUCT_NAME: &str = "mullvad-vpn"; - pub const PRODUCT_NAME: &str = "Mullvad VPN"; +#[cfg(windows)] +const PRODUCT_NAME: &str = "Mullvad VPN"; - pub const APP_INFO: AppInfo = AppInfo { - name: PRODUCT_NAME, - author: "Mullvad", - }; -} #[cfg(windows)] -fn get_program_data_dir() -> Result<PathBuf> { - use std::{env, path::Path}; - match env::var_os("ALLUSERSPROFILE") { - Some(dir) => Ok(Path::new(&dir).join(::metadata::PRODUCT_NAME)), +fn get_allusersprofile_dir() -> Result<PathBuf> { + match std::env::var_os("ALLUSERSPROFILE") { + Some(dir) => Ok(PathBuf::from(&dir)), None => bail!(ErrorKind::NoProgramDataDir), } } +fn create_and_return(dir_fn: fn() -> Result<PathBuf>) -> Result<PathBuf> { + let dir = dir_fn()?; + fs::create_dir_all(&dir).chain_err(|| ErrorKind::CreateDirFailed(dir.clone()))?; + Ok(dir) +} + mod cache; pub use cache::cache_dir; diff --git a/mullvad-paths/src/logs.rs b/mullvad-paths/src/logs.rs index 2a6f1a22d6..fe717b71c0 100644 --- a/mullvad-paths/src/logs.rs +++ b/mullvad-paths/src/logs.rs @@ -1,31 +1,29 @@ -use {ErrorKind, Result, ResultExt}; +use Result; use std::env; -use std::fs; use std::path::PathBuf; /// Creates and returns the logging directory pointed to by `MULLVAD_LOG_DIR`, or the default /// one if that variable is unset. pub fn log_dir() -> Result<PathBuf> { - let dir = get_log_dir()?; - fs::create_dir_all(&dir).chain_err(|| ErrorKind::CreateDirFailed(dir.clone()))?; - Ok(dir) + ::create_and_return(get_log_dir) } /// Get the logging directory, but don't try to create it. pub fn get_log_dir() -> Result<PathBuf> { match env::var_os("MULLVAD_LOG_DIR") { Some(path) => Ok(PathBuf::from(path)), - None => get_default_log_dir(), + None => get_default_log_dir().map(|dir| dir.join(::PRODUCT_NAME)), } } -#[cfg(unix)] fn get_default_log_dir() -> Result<PathBuf> { - Ok(PathBuf::from("/var/log/mullvad-daemon")) -} - -#[cfg(windows)] -fn get_default_log_dir() -> Result<PathBuf> { - ::get_program_data_dir() + #[cfg(unix)] + { + Ok(PathBuf::from("/var/log")) + } + #[cfg(windows)] + { + ::get_allusersprofile_dir() + } } diff --git a/mullvad-paths/src/rpc_address.rs b/mullvad-paths/src/rpc_address.rs index 68ed349edf..a97b3e0c36 100644 --- a/mullvad-paths/src/rpc_address.rs +++ b/mullvad-paths/src/rpc_address.rs @@ -12,12 +12,13 @@ pub fn get_rpc_address_path() -> Result<PathBuf> { } } -#[cfg(unix)] fn get_default_rpc_address_dir() -> Result<PathBuf> { - Ok(PathBuf::from("/tmp")) -} - -#[cfg(windows)] -fn get_default_rpc_address_dir() -> Result<PathBuf> { - ::get_program_data_dir() + #[cfg(unix)] + { + Ok(PathBuf::from("/tmp")) + } + #[cfg(windows)] + { + ::get_allusersprofile_dir().map(|dir| dir.join(::PRODUCT_NAME)) + } } diff --git a/mullvad-paths/src/settings.rs b/mullvad-paths/src/settings.rs index 80c0c73947..6f7a7fb867 100644 --- a/mullvad-paths/src/settings.rs +++ b/mullvad-paths/src/settings.rs @@ -1,33 +1,28 @@ -use {ErrorKind, Result, ResultExt}; +use Result; use std::env; -use std::fs; use std::path::PathBuf; /// Creates and returns the settings directory pointed to by `MULLVAD_SETTINGS_DIR`, or the default /// one if that variable is unset. pub fn settings_dir() -> Result<PathBuf> { - let dir = get_settings_dir()?; - fs::create_dir_all(&dir).chain_err(|| ErrorKind::CreateDirFailed(dir.clone()))?; - Ok(dir) + ::create_and_return(get_settings_dir) } fn get_settings_dir() -> Result<PathBuf> { match env::var_os("MULLVAD_SETTINGS_DIR") { Some(path) => Ok(PathBuf::from(path)), - None => get_default_settings_dir(), + None => get_default_settings_dir().map(|dir| dir.join(::PRODUCT_NAME)), } } -#[cfg(unix)] fn get_default_settings_dir() -> Result<PathBuf> { - Ok(PathBuf::from("/etc/mullvad-daemon")) -} - -#[cfg(windows)] -fn get_default_settings_dir() -> Result<PathBuf> { - Ok(::app_dirs::get_app_root( - ::app_dirs::AppDataType::UserData, - &::metadata::APP_INFO, - )?) + #[cfg(unix)] + { + Ok(PathBuf::from("/etc")) + } + #[cfg(windows)] + { + ::dirs::data_local_dir().ok_or_else(|| ::ErrorKind::FindDirError.into()) + } } |
