fix(admin): require paired voice server coordinates (#2544)

This commit is contained in:
Hampus authored and GitHub committed 2026-09-06 18:40:50 +02:00
1 parent f8947adf62
commit 43e420b0ab
1 file changed
+13
+13
View File
@@ -102,6 +102,7 @@ impl AdminApiClient {
params: &serde_json::Value, params: &serde_json::Value,
) -> ApiResult<CreateVoiceServerResponse> { ) -> ApiResult<CreateVoiceServerResponse> {
let region_id = required_field(params, "region_id")?; let region_id = required_field(params, "region_id")?;
paired_coordinates(params)?;
let body = let body =
serde_json::from_value::<generated_types::CreateVoiceServerRequest>(params.clone()) serde_json::from_value::<generated_types::CreateVoiceServerRequest>(params.clone())
.map_err(|e| ApiError::Parse(e.to_string()))?; .map_err(|e| ApiError::Parse(e.to_string()))?;
@@ -119,6 +120,7 @@ impl AdminApiClient {
) -> ApiResult<UpdateVoiceServerResponse> { ) -> ApiResult<UpdateVoiceServerResponse> {
let region_id = required_field(params, "region_id")?; let region_id = required_field(params, "region_id")?;
let server_id = required_field(params, "server_id")?; let server_id = required_field(params, "server_id")?;
paired_coordinates(params)?;
let body = let body =
serde_json::from_value::<generated_types::UpdateVoiceServerRequest>(params.clone()) serde_json::from_value::<generated_types::UpdateVoiceServerRequest>(params.clone())
.map_err(|e| ApiError::Parse(e.to_string()))?; .map_err(|e| ApiError::Parse(e.to_string()))?;
@@ -148,6 +150,17 @@ fn bool_param(value: bool) -> &'static str {
if value { "true" } else { "false" } if value { "true" } else { "false" }
} }
fn paired_coordinates(params: &serde_json::Value) -> ApiResult<()> {
let has_coordinate = |field: &str| params.get(field).is_some_and(|value| !value.is_null());
if has_coordinate("latitude") == has_coordinate("longitude") {
Ok(())
} else {
Err(ApiError::Parse(
"latitude and longitude must both be set or both be left empty".to_owned(),
))
}
}
fn required_field(params: &serde_json::Value, field: &str) -> ApiResult<String> { fn required_field(params: &serde_json::Value, field: &str) -> ApiResult<String> {
params params
.get(field) .get(field)