diff options
| author | Markus Pettersson <markus.pettersson@mullvad.net> | 2023-09-29 15:02:31 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-10-09 14:40:16 +0200 |
| commit | fbefa3f172cf324de8790a383ceb3f5329e94c7c (patch) | |
| tree | 22620c408bd2e0e01c96329c4b4b7838b4939628 | |
| parent | 432a35281a836741918990bb8aeb7af3925adb27 (diff) | |
| download | mullvadvpn-fbefa3f172cf324de8790a383ceb3f5329e94c7c.tar.xz mullvadvpn-fbefa3f172cf324de8790a383ceb3f5329e94c7c.zip | |
Add `GetApiAddresses` now returns a list of API addresses
4 files changed, 35 insertions, 6 deletions
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index f92b895ba8..993f0f9ece 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -700,13 +700,13 @@ impl ManagementService for ManagementServiceImpl { .map_err(map_daemon_error) } - async fn get_api_addresses(&self, _: Request<()>) -> ServiceResult<()> { + async fn get_api_addresses(&self, _: Request<()>) -> ServiceResult<types::ApiAddresses> { log::debug!("get_api_addresses"); let (tx, rx) = oneshot::channel(); self.send_command_to_daemon(DaemonCommand::GetApiAddresses(tx))?; self.wait_for_result(rx) .await? - .map(drop) + .map(types::ApiAddresses::from) .map(Response::new) .map_err(map_daemon_error) } diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto index 1bbb7f5012..24bfe2284b 100644 --- a/mullvad-management-interface/proto/management_interface.proto +++ b/mullvad-management-interface/proto/management_interface.proto @@ -22,7 +22,7 @@ service ManagementService { rpc GetCurrentVersion(google.protobuf.Empty) returns (google.protobuf.StringValue) {} rpc GetVersionInfo(google.protobuf.Empty) returns (AppVersionInfo) {} - rpc GetApiAddresses(google.protobuf.Empty) returns (google.protobuf.Empty) {} + rpc GetApiAddresses(google.protobuf.Empty) returns (ApiAddresses) {} rpc IsPerformingPostUpgrade(google.protobuf.Empty) returns (google.protobuf.BoolValue) {} @@ -112,6 +112,8 @@ message AccountData { google.protobuf.Timestamp expiry = 1; } message AccountHistory { google.protobuf.StringValue token = 1; } +message ApiAddresses { repeated google.protobuf.StringValue api_addresses = 1; } + message VoucherSubmission { uint64 seconds_added = 1; google.protobuf.Timestamp new_expiry = 2; diff --git a/mullvad-management-interface/src/client.rs b/mullvad-management-interface/src/client.rs index a4d56dd445..417083e161 100644 --- a/mullvad-management-interface/src/client.rs +++ b/mullvad-management-interface/src/client.rs @@ -202,9 +202,15 @@ impl MullvadProxyClient { }) } - pub async fn get_api_addresses(&mut self) -> Result<()> { - self.0.get_api_addresses(()).await.map_err(Error::Rpc)?; - Ok(()) + pub async fn get_api_addresses(&mut self) -> Result<Vec<std::net::SocketAddr>> { + self.0 + .get_api_addresses(()) + .await + .map_err(Error::Rpc) + .map(tonic::Response::into_inner) + .and_then(|api_addresses| { + Vec::<std::net::SocketAddr>::try_from(api_addresses).map_err(Error::InvalidResponse) + }) } pub async fn update_relay_locations(&mut self) -> Result<()> { diff --git a/mullvad-management-interface/src/types/conversions/net.rs b/mullvad-management-interface/src/types/conversions/net.rs index d0dcc975d0..ea5dcf99a5 100644 --- a/mullvad-management-interface/src/types/conversions/net.rs +++ b/mullvad-management-interface/src/types/conversions/net.rs @@ -174,6 +174,27 @@ impl From<proto::IpVersion> for proto::IpVersionConstraint { } } +impl TryFrom<proto::ApiAddresses> for Vec<SocketAddr> { + type Error = FromProtobufTypeError; + + fn try_from(value: proto::ApiAddresses) -> Result<Self, Self::Error> { + value + .api_addresses + .iter() + .map(|api_address| api_address.parse::<SocketAddr>()) + .collect::<Result<_, _>>() + .map_err(|_| FromProtobufTypeError::InvalidArgument("Invalid socket address")) + } +} + +impl From<Vec<SocketAddr>> for proto::ApiAddresses { + fn from(value: Vec<SocketAddr>) -> Self { + Self { + api_addresses: value.iter().map(SocketAddr::to_string).collect(), + } + } +} + pub fn try_tunnel_type_from_i32( tunnel_type: i32, ) -> Result<talpid_types::net::TunnelType, FromProtobufTypeError> { |
