summaryrefslogtreecommitdiffhomepage
path: root/mullvad-daemon/src/management_interface.rs
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-06-17 16:55:21 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-06-24 14:22:23 +0200
commit14fcbe159ea35ebd4e4d0adebd182e47631335cb (patch)
treeacc327998e3fa82c06c61c064bf0b370b6adc18b /mullvad-daemon/src/management_interface.rs
parent41a021c7d4efdb74b1c71e7567d22ffc930411c4 (diff)
downloadmullvadvpn-14fcbe159ea35ebd4e4d0adebd182e47631335cb.tar.xz
mullvadvpn-14fcbe159ea35ebd4e4d0adebd182e47631335cb.zip
Enable support for creating a custom list with locations
Diffstat (limited to 'mullvad-daemon/src/management_interface.rs')
-rw-r--r--mullvad-daemon/src/management_interface.rs18
1 files changed, 15 insertions, 3 deletions
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs
index 5695683fcf..aef1d17c45 100644
--- a/mullvad-daemon/src/management_interface.rs
+++ b/mullvad-daemon/src/management_interface.rs
@@ -4,10 +4,12 @@ use futures::{
StreamExt,
};
use mullvad_api::{rest::Error as RestError, StatusCode};
+use mullvad_management_interface::types::FromProtobufTypeError;
use mullvad_management_interface::{
types::{self, daemon_event, management_service_server::ManagementService},
Code, Request, Response, ServerJoinHandle, Status,
};
+use mullvad_types::relay_constraints::GeographicLocationConstraint;
use mullvad_types::{
account::AccountNumber,
relay_constraints::{
@@ -20,6 +22,7 @@ use mullvad_types::{
version,
wireguard::{RotationInterval, RotationIntervalError},
};
+use std::collections::BTreeSet;
use std::{
path::Path,
str::FromStr,
@@ -663,13 +666,22 @@ impl ManagementService for ManagementServiceImpl {
// Custom lists
//
- async fn create_custom_list(&self, request: Request<String>) -> ServiceResult<String> {
+ async fn create_custom_list(
+ &self,
+ request: Request<types::NewCustomList>,
+ ) -> ServiceResult<String> {
log::debug!("create_custom_list");
+ let request = request.into_inner();
+ let locations = request
+ .locations
+ .into_iter()
+ .map(GeographicLocationConstraint::try_from)
+ .collect::<Result<BTreeSet<_>, FromProtobufTypeError>>()?;
let (tx, rx) = oneshot::channel();
- self.send_command_to_daemon(DaemonCommand::CreateCustomList(tx, request.into_inner()))?;
+ self.send_command_to_daemon(DaemonCommand::CreateCustomList(tx, request.name, locations))?;
self.wait_for_result(rx)
.await?
- .map(|response| Response::new(response.to_string()))
+ .map(|id| Response::new(id.to_string()))
.map_err(map_daemon_error)
}