From 4ce2dc5858ce7f4b94f13b2afe2833367837e9a3 Mon Sep 17 00:00:00 2001 From: mdecimus Date: Wed, 25 Jun 2025 12:33:10 +0200 Subject: [PATCH] Added locales to principal API --- crates/directory/src/backend/internal/manage.rs | 16 ++++++++++++++++ crates/directory/src/backend/internal/mod.rs | 5 +++++ crates/directory/src/core/principal.rs | 3 ++- crates/http/src/management/principal.rs | 3 ++- crates/trc/src/ipc/metrics.rs | 8 +++++++- 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/crates/directory/src/backend/internal/manage.rs b/crates/directory/src/backend/internal/manage.rs index 47a38ebb..469ed5b8 100644 --- a/crates/directory/src/backend/internal/manage.rs +++ b/crates/directory/src/backend/internal/manage.rs @@ -378,6 +378,9 @@ impl ManageDirectory for Store { if let Some(picture) = principal_set.take_str(PrincipalField::Picture) { principal_create.data.push(PrincipalData::Picture(picture)); } + if let Some(picture) = principal_set.take_str(PrincipalField::Locale) { + principal_create.data.push(PrincipalData::Locale(picture)); + } if let Some(urls) = principal_set.take_str_array(PrincipalField::Urls) { principal_create.data.push(PrincipalData::Urls(urls)); } @@ -1166,6 +1169,14 @@ impl ManageDirectory for Store { principal.data.push(PrincipalData::Picture(value)); } } + (PrincipalAction::Set, PrincipalField::Locale, PrincipalValue::String(value)) => { + principal + .data + .retain(|v| !matches!(v, PrincipalData::Locale(_))); + if !value.is_empty() { + principal.data.push(PrincipalData::Locale(value)); + } + } (PrincipalAction::Set, PrincipalField::Quota, PrincipalValue::Integer(quota)) if matches!( principal_type, @@ -2192,6 +2203,11 @@ impl ManageDirectory for Store { result.set(PrincipalField::Picture, compact_string); } } + PrincipalData::Locale(compact_string) => { + if fields.is_empty() || fields.contains(&PrincipalField::Locale) { + result.set(PrincipalField::Locale, compact_string); + } + } PrincipalData::ExternalMembers(compact_strings) => { if fields.is_empty() || fields.contains(&PrincipalField::ExternalMembers) { result.set(PrincipalField::ExternalMembers, compact_strings); diff --git a/crates/directory/src/backend/internal/mod.rs b/crates/directory/src/backend/internal/mod.rs index c14a2aeb..4de6b193 100644 --- a/crates/directory/src/backend/internal/mod.rs +++ b/crates/directory/src/backend/internal/mod.rs @@ -111,6 +111,7 @@ pub enum PrincipalField { Picture, Urls, ExternalMembers, + Locale, } #[derive(Debug, Default, Clone, PartialEq, Eq)] @@ -198,6 +199,7 @@ impl PrincipalField { PrincipalField::Picture => 14, PrincipalField::Urls => 15, PrincipalField::ExternalMembers => 16, + PrincipalField::Locale => 17, } } @@ -220,6 +222,7 @@ impl PrincipalField { 14 => Some(PrincipalField::Picture), 15 => Some(PrincipalField::Urls), 16 => Some(PrincipalField::ExternalMembers), + 17 => Some(PrincipalField::Locale), _ => None, } } @@ -243,6 +246,7 @@ impl PrincipalField { PrincipalField::Picture => "picture", PrincipalField::Urls => "urls", PrincipalField::ExternalMembers => "externalMembers", + PrincipalField::Locale => "locale", } } @@ -265,6 +269,7 @@ impl PrincipalField { "picture" => Some(PrincipalField::Picture), "urls" => Some(PrincipalField::Urls), "externalMembers" => Some(PrincipalField::ExternalMembers), + "locale" => Some(PrincipalField::Locale), _ => None, } } diff --git a/crates/directory/src/core/principal.rs b/crates/directory/src/core/principal.rs index 556abd09..d1e5ea71 100644 --- a/crates/directory/src/core/principal.rs +++ b/crates/directory/src/core/principal.rs @@ -1095,7 +1095,8 @@ impl<'de> serde::Deserialize<'de> for PrincipalSet { } PrincipalField::Description | PrincipalField::Tenant - | PrincipalField::Picture => { + | PrincipalField::Picture + | PrincipalField::Locale => { if let Some(v) = map.next_value::>()? { if v.len() <= MAX_STRING_LEN { PrincipalValue::String(v) diff --git a/crates/http/src/management/principal.rs b/crates/http/src/management/principal.rs index 6d9f12e8..26e48706 100644 --- a/crates/http/src/management/principal.rs +++ b/crates/http/src/management/principal.rs @@ -588,7 +588,8 @@ impl PrincipalManager for Server { | PrincipalField::Members | PrincipalField::Lists | PrincipalField::Urls - | PrincipalField::ExternalMembers => (), + | PrincipalField::ExternalMembers + | PrincipalField::Locale => (), PrincipalField::Tenant => { // Tenants are not allowed to change their tenantId if access_token.tenant.is_some() { diff --git a/crates/trc/src/ipc/metrics.rs b/crates/trc/src/ipc/metrics.rs index 76a1e109..2458460e 100644 --- a/crates/trc/src/ipc/metrics.rs +++ b/crates/trc/src/ipc/metrics.rs @@ -671,7 +671,13 @@ impl EventType { | TelemetryEvent::PrometheusExporterError | TelemetryEvent::JournalError, ) => true, - EventType::Calendar(CalendarEvent::AlarmSent | CalendarEvent::AlarmFailed) => true, + EventType::Calendar( + CalendarEvent::AlarmSent + | CalendarEvent::AlarmFailed + | CalendarEvent::ItipMessageReceived + | CalendarEvent::ItipMessageSent + | CalendarEvent::ItipMessageError, + ) => true, _ => false, } }