summaryrefslogtreecommitdiffhomepage
path: root/mullvad-cli/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2018-04-23 19:36:06 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2018-05-03 14:51:17 -0300
commitd4c110b635be72bffb0acfa709f18a37cbe7b4ab (patch)
tree8afec9ef5533a381f6e603337c54180bb1531b16 /mullvad-cli/src
parent3ca2971a0aeaa8151e714f031f8a836601b10242 (diff)
downloadmullvadvpn-d4c110b635be72bffb0acfa709f18a37cbe7b4ab.tar.xz
mullvadvpn-d4c110b635be72bffb0acfa709f18a37cbe7b4ab.zip
Use `mullvad-ipc-client` in `mullvad-cli`
Diffstat (limited to 'mullvad-cli/src')
-rw-r--r--mullvad-cli/src/main.rs10
-rw-r--r--mullvad-cli/src/rpc.rs90
2 files changed, 12 insertions, 88 deletions
diff --git a/mullvad-cli/src/main.rs b/mullvad-cli/src/main.rs
index 69b9c8905b..0f92cebff0 100644
--- a/mullvad-cli/src/main.rs
+++ b/mullvad-cli/src/main.rs
@@ -11,13 +11,9 @@ extern crate clap;
extern crate env_logger;
#[macro_use]
extern crate error_chain;
-#[macro_use]
-extern crate lazy_static;
-#[macro_use]
-extern crate log;
+extern crate mullvad_ipc_client;
extern crate mullvad_types;
extern crate serde;
-extern crate talpid_ipc;
extern crate talpid_types;
mod cmds;
@@ -31,6 +27,10 @@ error_chain! {
Io(io::Error);
ParseIntError(::std::num::ParseIntError);
}
+
+ links {
+ RpcError(mullvad_ipc_client::Error, mullvad_ipc_client::ErrorKind);
+ }
}
quick_main!(run);
diff --git a/mullvad-cli/src/rpc.rs b/mullvad-cli/src/rpc.rs
index a355175c55..946f69afc0 100644
--- a/mullvad-cli/src/rpc.rs
+++ b/mullvad-cli/src/rpc.rs
@@ -1,90 +1,14 @@
-use serde;
-use {Result, ResultExt};
+use serde::{Deserialize, Serialize};
-use std::fs::{File, Metadata};
-use std::io::{BufRead, BufReader};
-#[cfg(unix)]
-use std::path::Path;
-use std::path::PathBuf;
+use super::Result;
-use talpid_ipc::WsIpcClient;
+use mullvad_ipc_client::DaemonRpcClient;
pub fn call<T, O>(method: &str, args: &T) -> Result<O>
where
- T: serde::Serialize,
- O: for<'de> serde::Deserialize<'de>,
+ T: Serialize,
+ O: for<'de> Deserialize<'de>,
{
- call_internal(method, args).chain_err(|| "Unable to call backend over RPC")
-}
-
-pub fn call_internal<T, O>(method: &str, args: &T) -> Result<O>
-where
- T: serde::Serialize,
- O: for<'de> serde::Deserialize<'de>,
-{
- let (address, _shared_secret) = read_rpc_address().chain_err(|| "Unable to read RPC address")?;
- info!("Using RPC address {}", address);
- let mut rpc_client = WsIpcClient::new(address).chain_err(|| "Unable to create RPC client")?;
- rpc_client
- .call(method, args)
- .chain_err(|| format!("Unable to call RPC method {}", method))
-}
-
-
-#[cfg(unix)]
-lazy_static! {
- /// The path to the file where we read the RPC address
- static ref RPC_ADDRESS_FILE_PATH: PathBuf = Path::new("/tmp").join(".mullvad_rpc_address");
-}
-
-#[cfg(not(unix))]
-lazy_static! {
- /// The path to the file where we read the RPC address
- static ref RPC_ADDRESS_FILE_PATH: PathBuf = {
- let windows_directory = ::std::env::var_os("WINDIR").unwrap();
- PathBuf::from(windows_directory).join("Temp").join(".mullvad_rpc_address")
- };
-}
-
-fn read_rpc_address() -> Result<(String, String)> {
- let file = open_rpc_file()?;
- let mut buf_file = BufReader::new(file);
- let mut address = String::new();
- buf_file.read_line(&mut address)?;
- let mut shared_secret = String::new();
- buf_file.read_line(&mut shared_secret)?;
- Ok((address, shared_secret))
-}
-
-fn open_rpc_file() -> Result<File> {
- debug!(
- "Trying to read RPC address at {}",
- RPC_ADDRESS_FILE_PATH.to_string_lossy()
- );
- let file = File::open(&*RPC_ADDRESS_FILE_PATH)?;
- ensure_written_by_admin(file.metadata()?).chain_err(|| "Refusing to trust RPC file")?;
-
- Ok(file)
-}
-
-#[cfg(unix)]
-fn ensure_written_by_admin(metadata: Metadata) -> Result<()> {
- use std::os::unix::fs::MetadataExt;
-
- let is_owned_by_root = metadata.uid() == 0;
- let is_read_only_by_non_owner = (metadata.mode() & 0o022) == 0;
-
- ensure!(is_owned_by_root, "RPC file is not owned by root");
- ensure!(
- is_read_only_by_non_owner,
- "RPC file is writable by non-root users"
- );
-
- Ok(())
-}
-
-#[cfg(windows)]
-fn ensure_written_by_admin(_metadata: Metadata) -> Result<()> {
- // TODO: Check permissions correctly
- Ok(())
+ let rpc = DaemonRpcClient::new()?;
+ Ok(rpc.call(method, args)?)
}