summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-daemon/src/settings.rs7
-rw-r--r--mullvad-types/src/settings/mod.rs16
-rw-r--r--mullvad-types/src/wireguard.rs4
3 files changed, 24 insertions, 3 deletions
diff --git a/mullvad-daemon/src/settings.rs b/mullvad-daemon/src/settings.rs
index 7862e21cd6..d8e2e9a465 100644
--- a/mullvad-daemon/src/settings.rs
+++ b/mullvad-daemon/src/settings.rs
@@ -4,7 +4,7 @@ use log::{debug, error, info};
use mullvad_types::{
relay_constraints::{BridgeSettings, BridgeState, RelaySettingsUpdate},
settings::{DnsOptions, Settings},
- wireguard::RotationInterval,
+ wireguard::{RotationInterval, WireguardData},
};
use std::{
ops::Deref,
@@ -176,6 +176,11 @@ impl SettingsPersister {
self.update(should_save).await
}
+ pub async fn set_wireguard(&mut self, wireguard: Option<WireguardData>) -> Result<bool, Error> {
+ let should_save = self.settings.set_wireguard(wireguard);
+ self.update(should_save).await
+ }
+
pub async fn update_relay_settings(
&mut self,
update: RelaySettingsUpdate,
diff --git a/mullvad-types/src/settings/mod.rs b/mullvad-types/src/settings/mod.rs
index 0430f530ea..faddb9ad0c 100644
--- a/mullvad-types/src/settings/mod.rs
+++ b/mullvad-types/src/settings/mod.rs
@@ -38,6 +38,8 @@ pub enum Error {
#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))]
pub struct Settings {
account_token: Option<String>,
+ #[cfg_attr(target_os = "android", jnix(skip))]
+ wireguard: Option<wireguard::WireguardData>,
relay_settings: RelaySettings,
#[cfg_attr(target_os = "android", jnix(skip))]
pub bridge_settings: BridgeSettings,
@@ -65,6 +67,7 @@ impl Default for Settings {
fn default() -> Self {
Settings {
account_token: None,
+ wireguard: None,
relay_settings: RelaySettings::Normal(RelayConstraints {
location: Constraint::Only(LocationConstraint::Country("se".to_owned())),
..Default::default()
@@ -120,6 +123,19 @@ impl Settings {
}
}
+ pub fn get_wireguard(&self) -> Option<wireguard::WireguardData> {
+ self.wireguard.clone()
+ }
+
+ pub fn set_wireguard(&mut self, wireguard: Option<wireguard::WireguardData>) -> bool {
+ if wireguard != self.wireguard {
+ self.wireguard = wireguard;
+ true
+ } else {
+ false
+ }
+ }
+
pub fn get_relay_settings(&self) -> RelaySettings {
self.relay_settings.clone()
}
diff --git a/mullvad-types/src/wireguard.rs b/mullvad-types/src/wireguard.rs
index cbe05363ec..2991eb1a1d 100644
--- a/mullvad-types/src/wireguard.rs
+++ b/mullvad-types/src/wireguard.rs
@@ -14,7 +14,7 @@ pub const DEFAULT_ROTATION_INTERVAL: Duration = if cfg!(target_os = "android") {
};
/// Contains account specific wireguard data
-#[derive(Serialize, Deserialize, Clone, Debug)]
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct WireguardData {
pub private_key: wireguard::PrivateKey,
pub addresses: AssociatedAddresses,
@@ -140,7 +140,7 @@ pub struct PublicKey {
/// Contains a pair of local link addresses that are paired with a specific wireguard
/// public/private keypair.
-#[derive(Clone, Debug, Deserialize, Serialize)]
+#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
pub struct AssociatedAddresses {
pub ipv4_address: ipnetwork::Ipv4Network,
pub ipv6_address: ipnetwork::Ipv6Network,