diff options
| author | Markus Pettersson <markus.pettersson@mullvad.net> | 2023-10-27 15:01:58 +0200 |
|---|---|---|
| committer | Markus Pettersson <markus.pettersson@mullvad.net> | 2023-11-06 09:01:41 +0100 |
| commit | d1ac9a5cb37f59b4cb08999cbe5b75bd9e422cda (patch) | |
| tree | 2ce1839e492a121b63aa812fc1f114b05358c59c /mullvad-management-interface | |
| parent | 7c34fa4e1ac211f04f403b1dd90e8085cb711a52 (diff) | |
| download | mullvadvpn-d1ac9a5cb37f59b4cb08999cbe5b75bd9e422cda.tar.xz mullvadvpn-d1ac9a5cb37f59b4cb08999cbe5b75bd9e422cda.zip | |
Remove `from_args` constructors for `access_methods` datatypes
In particular, `access_methods::Socks5Local`,
`access_methods::Socks5Remote` & `access_methods::Shadowsocks` have got
new constructors which are all infallible.
Diffstat (limited to 'mullvad-management-interface')
| -rw-r--r-- | mullvad-management-interface/src/types/conversions/access_method.rs | 54 |
1 files changed, 31 insertions, 23 deletions
diff --git a/mullvad-management-interface/src/types/conversions/access_method.rs b/mullvad-management-interface/src/types/conversions/access_method.rs index 40a9629070..b4a4547fdf 100644 --- a/mullvad-management-interface/src/types/conversions/access_method.rs +++ b/mullvad-management-interface/src/types/conversions/access_method.rs @@ -42,6 +42,8 @@ mod settings { /// [`crate::types::proto::ApiAccessMethod`] type to the internal /// [`mullvad_types::access_method::AccessMethodSetting`] data type. mod data { + use std::net::Ipv4Addr; + use crate::types::{proto, FromProtobufTypeError}; use mullvad_types::access_method::{ AccessMethod, AccessMethodSetting, BuiltInAccessMethod, CustomAccessMethod, Id, @@ -142,15 +144,15 @@ mod data { type Error = FromProtobufTypeError; fn try_from(value: proto::access_method::Socks5Local) -> Result<Self, Self::Error> { - Socks5Local::from_args( - value.remote_ip, - value.remote_port as u16, + let remote_ip = value.remote_ip.parse::<Ipv4Addr>().map_err(|_| { + FromProtobufTypeError::InvalidArgument( + "Could not parse Socks5 (local) message from protobuf", + ) + })?; + Ok(AccessMethod::from(Socks5Local::new( + (remote_ip, value.remote_port as u16), value.local_port as u16, - ) - .ok_or(FromProtobufTypeError::InvalidArgument( - "Could not parse Socks5 (local) message from protobuf", - )) - .map(AccessMethod::from) + ))) } } @@ -163,19 +165,19 @@ mod data { port, authentication, } = value; - let port = port as u16; - match authentication.map(SocksAuth::from) { - Some(SocksAuth { username, password }) => { - Socks5Remote::from_args_with_password(ip, port, username, password) - } - None => Socks5Remote::from_args(ip, port), - } - .ok_or({ + let ip = ip.parse::<Ipv4Addr>().map_err(|_| { FromProtobufTypeError::InvalidArgument( "Could not parse Socks5 (remote) message from protobuf", ) - }) - .map(AccessMethod::from) + })?; + let port = port as u16; + + Ok(AccessMethod::from( + match authentication.map(SocksAuth::from) { + Some(auth) => Socks5Remote::new_with_authentication((ip, port), auth), + None => Socks5Remote::new((ip, port)), + }, + )) } } @@ -183,11 +185,17 @@ mod data { type Error = FromProtobufTypeError; fn try_from(value: proto::access_method::Shadowsocks) -> Result<Self, Self::Error> { - Shadowsocks::from_args(value.ip, value.port as u16, value.cipher, value.password) - .ok_or(FromProtobufTypeError::InvalidArgument( - "Could not parse Shadowsocks message from protobuf", - )) - .map(AccessMethod::from) + let ip = value.ip.parse::<Ipv4Addr>().map_err(|_| { + FromProtobufTypeError::InvalidArgument( + "Could not parse Socks5 (remote) message from protobuf", + ) + })?; + + Ok(AccessMethod::from(Shadowsocks::new( + (ip, value.port as u16), + value.cipher, + value.password, + ))) } } |
