summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2023-09-13 11:01:59 +0200
committerDavid Lönnhager <david.l@mullvad.net>2023-10-09 14:40:04 +0200
commite724505125196584dab6e7f2f2671ce34db9d23a (patch)
treedf9d37776bea241b1751ee49ef850651e5a22f7a
parent2db6e2ecc64c0ddb9dba0b0947a31b0fbefe9f53 (diff)
downloadmullvadvpn-e724505125196584dab6e7f2f2671ce34db9d23a.tar.xz
mullvadvpn-e724505125196584dab6e7f2f2671ce34db9d23a.zip
(De)Serialize uuid for custom API access methods
-rw-r--r--mullvad-management-interface/proto/management_interface.proto21
-rw-r--r--mullvad-management-interface/src/types/conversions/api_access_method.rs3
-rw-r--r--mullvad-types/src/api_access_method.rs16
3 files changed, 25 insertions, 15 deletions
diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto
index 5e1aef6cea..bc56929fc4 100644
--- a/mullvad-management-interface/proto/management_interface.proto
+++ b/mullvad-management-interface/proto/management_interface.proto
@@ -340,13 +340,15 @@ message ApiAccessMethod {
message Direct {}
message Bridges {}
message Socks5Local {
- string ip = 1;
- uint32 port = 2;
- uint32 local_port = 3;
+ string id = 1;
+ string ip = 2;
+ uint32 port = 3;
+ uint32 local_port = 4;
}
message Socks5Remote {
- string ip = 1;
- uint32 port = 2;
+ string id = 1;
+ string ip = 2;
+ uint32 port = 3;
}
message Socks5 {
oneof Socks5type {
@@ -355,10 +357,11 @@ message ApiAccessMethod {
}
}
message Shadowsocks {
- string ip = 1;
- uint32 port = 2;
- string password = 3;
- string cipher = 4;
+ string id = 1;
+ string ip = 2;
+ uint32 port = 3;
+ string password = 4;
+ string cipher = 5;
}
oneof access_method {
Direct direct = 1;
diff --git a/mullvad-management-interface/src/types/conversions/api_access_method.rs b/mullvad-management-interface/src/types/conversions/api_access_method.rs
index d6d71e75a2..5612c18b1d 100644
--- a/mullvad-management-interface/src/types/conversions/api_access_method.rs
+++ b/mullvad-management-interface/src/types/conversions/api_access_method.rs
@@ -140,6 +140,7 @@ mod data {
match value {
AccessMethod::Custom(value) => match value.access_method {
ObfuscationProtocol::Shadowsocks(ss) => proto::api_access_method::Shadowsocks {
+ id: value.id,
ip: ss.peer.ip().to_string(),
port: ss.peer.port() as u32,
password: ss.password,
@@ -149,6 +150,7 @@ mod data {
ObfuscationProtocol::Socks5(Socks5::Local(Socks5Local { peer, port })) => {
proto::api_access_method::Socks5Local {
+ id: value.id,
ip: peer.ip().to_string(),
port: peer.port() as u32,
local_port: port as u32,
@@ -157,6 +159,7 @@ mod data {
}
ObfuscationProtocol::Socks5(Socks5::Remote(Socks5Remote { peer })) => {
proto::api_access_method::Socks5Remote {
+ id: value.id,
ip: peer.ip().to_string(),
port: peer.port() as u32,
}
diff --git a/mullvad-types/src/api_access_method.rs b/mullvad-types/src/api_access_method.rs
index 693d67d7dc..af456f7649 100644
--- a/mullvad-types/src/api_access_method.rs
+++ b/mullvad-types/src/api_access_method.rs
@@ -1,6 +1,8 @@
+use std::collections::hash_map::DefaultHasher;
use std::str::FromStr;
use serde::{Deserialize, Serialize};
+use std::hash::{Hash, Hasher};
use std::net::{IpAddr, Ipv4Addr, SocketAddr, SocketAddrV4};
/// Daemon settings for API access methods.
@@ -41,33 +43,33 @@ pub struct CustomAccessMethod {
pub access_method: ObfuscationProtocol,
}
-#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
+#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum ObfuscationProtocol {
Shadowsocks(Shadowsocks),
Socks5(Socks5),
}
-#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
+#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct Shadowsocks {
pub peer: SocketAddr,
pub password: String, // TODO: Mask the password (using special type)?
pub cipher: String, // Gets validated at a later stage. Is assumed to be valid.
}
-#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
+#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum Socks5 {
Local(Socks5Local),
Remote(Socks5Remote),
}
-#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
+#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct Socks5Local {
pub peer: SocketAddr,
/// Port on localhost where the SOCKS5-proxy listens to.
pub port: u16,
}
-#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
+#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct Socks5Remote {
pub peer: SocketAddr,
}
@@ -155,8 +157,10 @@ impl From<CustomAccessMethod> for AccessMethod {
impl From<ObfuscationProtocol> for AccessMethod {
fn from(value: ObfuscationProtocol) -> Self {
+ let mut hasher = DefaultHasher::new();
+ value.hash(&mut hasher);
CustomAccessMethod {
- id: uuid::Uuid::new_v4().to_string(),
+ id: hasher.finish().to_string(),
access_method: value,
}
.into()