diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2019-08-16 20:29:17 +0100 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2019-08-19 16:42:01 +0100 |
| commit | 2d20a6f5b65172bf17f7c122af1beb45d5d31c13 (patch) | |
| tree | fac729e130001ff27917d797c8964b15a1097ec4 | |
| parent | e061817f71f94348d32613b32a28d6b279f06328 (diff) | |
| download | mullvadvpn-2d20a6f5b65172bf17f7c122af1beb45d5d31c13.tar.xz mullvadvpn-2d20a6f5b65172bf17f7c122af1beb45d5d31c13.zip | |
Add method for validating wireguard key
| -rw-r--r-- | mullvad-jni/src/daemon_interface.rs | 7 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 27 |
2 files changed, 33 insertions, 1 deletions
diff --git a/mullvad-jni/src/daemon_interface.rs b/mullvad-jni/src/daemon_interface.rs index 80c3abec26..f80c645bb6 100644 --- a/mullvad-jni/src/daemon_interface.rs +++ b/mullvad-jni/src/daemon_interface.rs @@ -148,6 +148,13 @@ impl DaemonInterface { rx.wait().map_err(|_| Error::NoResponse) } + pub fn verify_wireguard_key(&self) -> Result<bool> { + let (tx, rx) = oneshot::channel(); + + self.send_command(ManagementCommand::VerifyWireguardKey(tx))?; + rx.wait().map_err(|_| Error::NoResponse) + } + pub fn set_account(&self, account_token: Option<String>) -> Result<()> { let (tx, rx) = oneshot::channel(); diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 28c68e422f..c8d267bb8b 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -12,7 +12,7 @@ use crate::{ jni_event_listener::JniEventListener, vpn_service_tun_provider::VpnServiceTunProvider, }; use jni::{ - objects::{GlobalRef, JObject, JString}, + objects::{GlobalRef, JObject, JString, JValue}, sys::{jboolean, JNI_FALSE, JNI_TRUE}, JNIEnv, }; @@ -30,6 +30,7 @@ use talpid_types::ErrorExt; const LOG_FILENAME: &str = "daemon.log"; const CLASSES_TO_LOAD: &[&str] = &[ + "java/lang/Boolean", "java/net/InetAddress", "java/net/InetSocketAddress", "java/util/ArrayList", @@ -275,6 +276,30 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_MullvadDaemon_generateWiregua #[no_mangle] #[allow(non_snake_case)] +pub extern "system" fn Java_net_mullvad_mullvadvpn_MullvadDaemon_verifyWireguardKey<'env, 'this>( + env: JNIEnv<'env>, + _: JObject<'this>, +) -> JObject<'env> { + match DAEMON_INTERFACE.verify_wireguard_key() { + Ok(key_is_valid) => env + .new_object( + &get_class("java/lang/Boolean"), + "(Z)V", + &[JValue::Bool(key_is_valid as jboolean)], + ) + .expect("Failed to create Boolean Java object"), + Err(error) => { + log::error!( + "{}", + error.display_chain_with_msg("Failed to verify wireguard key") + ); + JObject::null() + } + } +} + +#[no_mangle] +#[allow(non_snake_case)] pub extern "system" fn Java_net_mullvad_mullvadvpn_MullvadDaemon_getAccountData<'env, 'this>( env: JNIEnv<'env>, _: JObject<'this>, |
