diff options
| author | Markus Pettersson <markus.pettersson@mullvad.net> | 2023-09-13 11:01:59 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-10-09 14:40:04 +0200 |
| commit | e724505125196584dab6e7f2f2671ce34db9d23a (patch) | |
| tree | df9d37776bea241b1751ee49ef850651e5a22f7a | |
| parent | 2db6e2ecc64c0ddb9dba0b0947a31b0fbefe9f53 (diff) | |
| download | mullvadvpn-e724505125196584dab6e7f2f2671ce34db9d23a.tar.xz mullvadvpn-e724505125196584dab6e7f2f2671ce34db9d23a.zip | |
(De)Serialize uuid for custom API access methods
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() |
