summaryrefslogtreecommitdiffhomepage
path: root/mullvad-paths
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2018-06-12 13:35:21 +0200
committerLinus Färnstrand <linus@mullvad.net>2018-06-13 16:34:56 +0200
commita87ef879f22606a6f18ff80222d8035f0ca797d2 (patch)
treeeeb1e0ddfdcf1f2ae503aafb9bba0d1cbe86d02a /mullvad-paths
parentca4c4e9f122fc0961d1103b101365c1a1aeef3d9 (diff)
downloadmullvadvpn-a87ef879f22606a6f18ff80222d8035f0ca797d2.tar.xz
mullvadvpn-a87ef879f22606a6f18ff80222d8035f0ca797d2.zip
Rename mullvad-metadata -> mullvad-paths
Diffstat (limited to 'mullvad-paths')
-rw-r--r--mullvad-paths/Cargo.toml17
-rw-r--r--mullvad-paths/src/cache.rs26
-rw-r--r--mullvad-paths/src/lib.rs31
-rw-r--r--mullvad-paths/src/resources.rs25
-rw-r--r--mullvad-paths/src/settings.rs24
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)
+}