diff options
| author | Linus Färnstrand <linus@mullvad.net> | 2018-06-12 13:35:21 +0200 |
|---|---|---|
| committer | Linus Färnstrand <linus@mullvad.net> | 2018-06-13 16:34:56 +0200 |
| commit | a87ef879f22606a6f18ff80222d8035f0ca797d2 (patch) | |
| tree | eeb1e0ddfdcf1f2ae503aafb9bba0d1cbe86d02a /mullvad-paths | |
| parent | ca4c4e9f122fc0961d1103b101365c1a1aeef3d9 (diff) | |
| download | mullvadvpn-a87ef879f22606a6f18ff80222d8035f0ca797d2.tar.xz mullvadvpn-a87ef879f22606a6f18ff80222d8035f0ca797d2.zip | |
Rename mullvad-metadata -> mullvad-paths
Diffstat (limited to 'mullvad-paths')
| -rw-r--r-- | mullvad-paths/Cargo.toml | 17 | ||||
| -rw-r--r-- | mullvad-paths/src/cache.rs | 26 | ||||
| -rw-r--r-- | mullvad-paths/src/lib.rs | 31 | ||||
| -rw-r--r-- | mullvad-paths/src/resources.rs | 25 | ||||
| -rw-r--r-- | mullvad-paths/src/settings.rs | 24 |
5 files changed, 123 insertions, 0 deletions
diff --git a/mullvad-paths/Cargo.toml b/mullvad-paths/Cargo.toml new file mode 100644 index 0000000000..8a0b8babb8 --- /dev/null +++ b/mullvad-paths/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "mullvad-paths" +version = "0.1.0" +authors = [ + "Mullvad VPN <admin@mullvad.net>", + "Janito Vaqueiro Ferreira Filho <janito@mullvad.net>", + "Linus Färnstrand <linus@mullvad.net>" +] +description = "Mullvad VPN application paths and directories" +license = "GPL-3.0" + +[dependencies] +error-chain = "0.11" +log = "0.4" + +[target.'cfg(any(windows, target_os = "macos"))'.dependencies] +app_dirs = "1.2" diff --git a/mullvad-paths/src/cache.rs b/mullvad-paths/src/cache.rs new file mode 100644 index 0000000000..8a50b967c6 --- /dev/null +++ b/mullvad-paths/src/cache.rs @@ -0,0 +1,26 @@ +use {ErrorKind, Result, ResultExt}; + +use std::env; +use std::path::PathBuf; + +pub fn get_cache_dir() -> Result<PathBuf> { + match env::var_os("MULLVAD_CACHE_DIR") { + Some(path) => Ok(PathBuf::from(path)), + None => get_default_cache_dir(), + } +} + +#[cfg(target_os = "linux")] +fn get_default_cache_dir() -> Result<PathBuf> { + use std::fs; + + let dir = PathBuf::from("/var/cache/mullvad-daemon"); + fs::create_dir_all(&dir).chain_err(|| ErrorKind::CreateDirFailed)?; + Ok(dir) +} + +#[cfg(any(target_os = "macos", windows))] +fn get_default_cache_dir() -> Result<PathBuf> { + ::app_dirs::app_root(::app_dirs::AppDataType::UserCache, &::APP_INFO) + .chain_err(|| ErrorKind::CreateDirFailed) +} diff --git a/mullvad-paths/src/lib.rs b/mullvad-paths/src/lib.rs new file mode 100644 index 0000000000..4629d8efb1 --- /dev/null +++ b/mullvad-paths/src/lib.rs @@ -0,0 +1,31 @@ +#[cfg(any(windows, target_os = "macos"))] +extern crate app_dirs; +#[macro_use] +extern crate error_chain; +#[macro_use] +extern crate log; + + +#[cfg(windows)] +const PRODUCT_NAME: &str = "Mullvad VPN"; + +#[cfg(windows)] +const APP_INFO: AppInfo = app_dirs::AppInfo { + name: PRODUCT_NAME, + author: "Mullvad", +}; + +error_chain! { + errors { + CreateDirFailed { description("Failed to create directory") } + } +} + +mod cache; +pub use cache::get_cache_dir; + +mod resources; +pub use resources::get_resource_dir; + +mod settings; +pub use settings::get_settings_dir; diff --git a/mullvad-paths/src/resources.rs b/mullvad-paths/src/resources.rs new file mode 100644 index 0000000000..4f60a88287 --- /dev/null +++ b/mullvad-paths/src/resources.rs @@ -0,0 +1,25 @@ +use std::env; +use std::path::PathBuf; + +pub fn get_resource_dir() -> PathBuf { + match env::var_os("MULLVAD_RESOURCE_DIR") { + Some(path) => PathBuf::from(path), + None => get_default_resource_dir(), + } +} + +fn get_default_resource_dir() -> PathBuf { + match env::current_exe() { + Ok(mut path) => { + path.pop(); + path + } + Err(e) => { + error!( + "Failed finding the install directory. Using working directory: {}", + e + ); + PathBuf::from(".") + } + } +} diff --git a/mullvad-paths/src/settings.rs b/mullvad-paths/src/settings.rs new file mode 100644 index 0000000000..680ddf3c8d --- /dev/null +++ b/mullvad-paths/src/settings.rs @@ -0,0 +1,24 @@ +use {ErrorKind, Result, ResultExt}; + +use std::env; +use std::path::PathBuf; + +pub fn get_settings_dir() -> Result<PathBuf> { + match env::var_os("MULLVAD_SETTINGS_DIR") { + Some(path) => Ok(PathBuf::from(path)), + None => get_default_settings_dir(), + } +} + +#[cfg(unix)] +fn get_default_settings_dir() -> Result<PathBuf> { + let dir = PathBuf::from("/etc/mullvad-daemon"); + ::std::fs::create_dir_all(&dir).chain_err(|| ErrorKind::CreateDirFailed)?; + Ok(dir) +} + +#[cfg(windows)] +fn get_default_settings_dir() -> Result<PathBuf> { + ::app_dirs::app_root(::app_dirs::AppDataType::UserConfig, &::APP_INFO) + .chain_err(|| ErrorKind::CreateDirFailed) +} |
