diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2019-10-02 11:56:58 +0100 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2019-10-02 12:50:03 +0100 |
| commit | 5b3c2718f16ac24cee546ffdf9baf41a8cf390b3 (patch) | |
| tree | 5863022b4dd669b92a5a265d91379b98d0d7872d | |
| parent | efa73ba7f0f803ca9bcac8c13ee8487447b547c1 (diff) | |
| download | mullvadvpn-5b3c2718f16ac24cee546ffdf9baf41a8cf390b3.tar.xz mullvadvpn-5b3c2718f16ac24cee546ffdf9baf41a8cf390b3.zip | |
Add get_www_auth_token RPC in daemon
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 12 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 23 | ||||
| -rw-r--r-- | mullvad-rpc/src/lib.rs | 1 |
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 { |
