diff options
| author | Emīls <pinkisemils@mullvad.net> | 2020-02-10 16:06:11 +0000 |
|---|---|---|
| committer | Emīls <pinkisemils@mullvad.net> | 2020-02-11 17:01:04 +0000 |
| commit | e9b6b581b2f085e47ba6ddbd01502f7fd91d8fd7 (patch) | |
| tree | 08a8f1814eb5eb2410e7c31ff59c95d47b4148da | |
| parent | 5c77625d1606312edec12a57a4a1966d33d5ae61 (diff) | |
| download | mullvadvpn-e9b6b581b2f085e47ba6ddbd01502f7fd91d8fd7.tar.xz mullvadvpn-e9b6b581b2f085e47ba6ddbd01502f7fd91d8fd7.zip | |
Fetch account history from daemon
Add JNI functions to call into the daemon to fetch the account history.
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt | 5 | ||||
| -rw-r--r-- | mullvad-jni/src/daemon_interface.rs | 8 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 25 |
3 files changed, 38 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt index e61567a0fe..a0dabf1a53 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt @@ -45,6 +45,10 @@ class MullvadDaemon(val vpnService: MullvadVpnService) { return getAccountData(daemonInterfaceAddress, accountToken) } + fun getAccountHistory(): ArrayList<String> { + return getAccountHistory(daemonInterfaceAddress) + } + fun getWwwAuthToken(): String { return getWwwAuthToken(daemonInterfaceAddress) } @@ -107,6 +111,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) { daemonInterfaceAddress: Long, accountToken: String ): GetAccountDataResult + private external fun getAccountHistory(daemonInterfaceAddress: Long): ArrayList<String> private external fun getWwwAuthToken(daemonInterfaceAddress: Long): String private external fun getCurrentLocation(daemonInterfaceAddress: Long): GeoIpLocation? private external fun getCurrentVersion(daemonInterfaceAddress: Long): String diff --git a/mullvad-jni/src/daemon_interface.rs b/mullvad-jni/src/daemon_interface.rs index 7071dee363..5515668e08 100644 --- a/mullvad-jni/src/daemon_interface.rs +++ b/mullvad-jni/src/daemon_interface.rs @@ -86,6 +86,14 @@ impl DaemonInterface { .map_err(Error::RpcError) } + pub fn get_account_history(&self) -> Result<Vec<String>> { + let (tx, rx) = oneshot::channel(); + + self.send_command(ManagementCommand::GetAccountHistory(tx))?; + + rx.wait().map_err(|_| Error::NoResponse) + } + pub fn get_www_auth_token(&self) -> Result<String> { let (tx, rx) = oneshot::channel(); diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 7e6dd7f99f..d6be15962c 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -408,6 +408,31 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_verifyW #[no_mangle] #[allow(non_snake_case)] +pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_getAccountHistory<'env>( + env: JNIEnv<'env>, + _: JObject<'_>, + daemon_interface_address: jlong, +) -> JObject<'env> { + let env = JnixEnv::from(env); + + match get_daemon_interface(daemon_interface_address) { + Some(daemon_interface) => daemon_interface + .get_account_history() + .map(|history| history.into_java(&env).forget()) + .unwrap_or_else(|err| { + log::error!( + "{}", + err.display_chain_with_msg("Failed to get account history") + ); + JObject::null() + }), + None => JObject::null(), + } +} + + +#[no_mangle] +#[allow(non_snake_case)] pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_getAccountData<'env>( env: JNIEnv<'env>, _: JObject<'_>, |
