summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEmīls Piņķis <emils@mullvad.net>2019-10-02 11:56:58 +0100
committerEmīls Piņķis <emils@mullvad.net>2019-10-02 12:50:03 +0100
commit5b3c2718f16ac24cee546ffdf9baf41a8cf390b3 (patch)
tree5863022b4dd669b92a5a265d91379b98d0d7872d
parentefa73ba7f0f803ca9bcac8c13ee8487447b547c1 (diff)
downloadmullvadvpn-5b3c2718f16ac24cee546ffdf9baf41a8cf390b3.tar.xz
mullvadvpn-5b3c2718f16ac24cee546ffdf9baf41a8cf390b3.zip
Add get_www_auth_token RPC in daemon
-rw-r--r--mullvad-daemon/src/lib.rs12
-rw-r--r--mullvad-daemon/src/management_interface.rs23
-rw-r--r--mullvad-rpc/src/lib.rs1
3 files changed, 36 insertions, 0 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs
index 55b1970def..7508bd9216 100644
--- a/mullvad-daemon/src/lib.rs
+++ b/mullvad-daemon/src/lib.rs
@@ -742,6 +742,7 @@ where
GetState(tx) => self.on_get_state(tx),
GetCurrentLocation(tx) => self.on_get_current_location(tx),
GetAccountData(tx, account_token) => self.on_get_account_data(tx, account_token),
+ GetWwwAuthToken(tx) => self.on_get_www_auth_token(tx),
GetRelayLocations(tx) => self.on_get_relay_locations(tx),
UpdateRelayLocations => self.on_update_relay_locations(),
SetAccount(tx, account_token) => self.on_set_account(tx, account_token),
@@ -927,6 +928,17 @@ where
Self::oneshot_send(tx, Box::new(rpc_call), "account data")
}
+ fn on_get_www_auth_token(
+ &mut self,
+ tx: oneshot::Sender<BoxFuture<String, mullvad_rpc::Error>>,
+ ) {
+ if let Some(account_token) = self.settings.get_account_token() {
+ let rpc_call = self.accounts_proxy.get_www_auth_token(account_token);
+ Self::oneshot_send(tx, Box::new(rpc_call), "get_www_auth_token response")
+ }
+ }
+
+
fn on_get_relay_locations(&mut self, tx: oneshot::Sender<RelayList>) {
Self::oneshot_send(tx, self.relay_selector.get_locations(), "relay locations");
}
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs
index e1b74f6185..61a95fc3c5 100644
--- a/mullvad-daemon/src/management_interface.rs
+++ b/mullvad-daemon/src/management_interface.rs
@@ -45,6 +45,9 @@ build_rpc_trait! {
#[rpc(meta, name = "get_account_data")]
fn get_account_data(&self, Self::Metadata, AccountToken) -> BoxFuture<AccountData, Error>;
+ #[rpc(meta, name = "get_www_auth_token")]
+ fn get_www_auth_token(&self, Self::Metadata) -> BoxFuture<String, Error>;
+
/// Returns available countries.
#[rpc(meta, name = "get_relay_locations")]
fn get_relay_locations(&self, Self::Metadata) -> BoxFuture<RelayList, Error>;
@@ -185,6 +188,8 @@ pub enum ManagementCommand {
OneshotSender<BoxFuture<AccountData, mullvad_rpc::Error>>,
AccountToken,
),
+ /// Request www auth token for an account
+ GetWwwAuthToken(OneshotSender<BoxFuture<String, mullvad_rpc::Error>>),
/// Request account history
GetAccountHistory(OneshotSender<Vec<AccountToken>>),
/// Request account history
@@ -395,6 +400,24 @@ impl<T: From<ManagementCommand> + 'static + Send> ManagementInterfaceApi
Box::new(future)
}
+ fn get_www_auth_token(&self, _: Self::Metadata) -> BoxFuture<String, Error> {
+ log::debug!("get_account_data");
+ let (tx, rx) = sync::oneshot::channel();
+ let future = self
+ .send_command_to_daemon(ManagementCommand::GetWwwAuthToken(tx))
+ .and_then(|_| rx.map_err(|_| Error::internal_error()))
+ .and_then(|rpc_future| {
+ rpc_future.map_err(|error: mullvad_rpc::Error| {
+ log::error!(
+ "Unable to get account data from API: {}",
+ error.display_chain()
+ );
+ Self::map_rpc_error(&error)
+ })
+ });
+ Box::new(future)
+ }
+
fn get_relay_locations(&self, _: Self::Metadata) -> BoxFuture<RelayList, Error> {
log::debug!("get_relay_locations");
let (tx, rx) = sync::oneshot::channel();
diff --git a/mullvad-rpc/src/lib.rs b/mullvad-rpc/src/lib.rs
index 1d2fdcf758..b1554c1a5d 100644
--- a/mullvad-rpc/src/lib.rs
+++ b/mullvad-rpc/src/lib.rs
@@ -105,6 +105,7 @@ impl MullvadRpcFactory {
jsonrpc_client!(pub struct AccountsProxy {
pub fn get_expiry(&mut self, account_token: AccountToken) -> RpcRequest<DateTime<Utc>>;
+ pub fn get_www_auth_token(&mut self, account_token: AccountToken) -> RpcRequest<String>;
});
jsonrpc_client!(pub struct ProblemReportProxy {