server: Add support for querying GroupId with LDAP filters

This commit is contained in:
Simon Broeng Jensen
2025-01-20 17:07:53 +01:00
committed by GitHub
parent fb43af1299
commit 33fb59f2f7
3 changed files with 46 additions and 1 deletions
+11 -1
View File
@@ -17,7 +17,7 @@ use crate::domain::{
},
},
schema::{PublicSchema, SchemaGroupAttributeExtractor},
types::{AttributeName, AttributeType, Group, LdapObjectClass, UserId, Uuid},
types::{AttributeName, AttributeType, Group, GroupId, LdapObjectClass, UserId, Uuid},
};
pub fn get_group_attribute(
@@ -45,6 +45,9 @@ pub fn get_group_attribute(
GroupFieldType::EntryDn => {
vec![format!("uid={},ou=groups,{}", group.display_name, base_dn_str).into_bytes()]
}
GroupFieldType::GroupId => {
vec![group.id.0.to_string().into_bytes()]
}
GroupFieldType::DisplayName => vec![group.display_name.to_string().into_bytes()],
GroupFieldType::CreationDate => vec![chrono::Utc
.from_utc_datetime(&group.creation_date)
@@ -170,6 +173,13 @@ fn convert_group_filter(
let field = AttributeName::from(field.as_str());
let value = value.to_ascii_lowercase();
match map_group_field(&field, schema) {
GroupFieldType::GroupId => Ok(value
.parse::<i32>()
.map(|id| GroupRequestFilter::GroupId(GroupId(id)))
.unwrap_or_else(|_| {
warn!("Given group id is not a valid integer: {}", value);
GroupRequestFilter::from(false)
})),
GroupFieldType::DisplayName => Ok(GroupRequestFilter::DisplayName(value.into())),
GroupFieldType::Uuid => Uuid::try_from(value.as_str())
.map(GroupRequestFilter::Uuid)
+2
View File
@@ -245,6 +245,7 @@ pub fn map_user_field(field: &AttributeName, schema: &PublicSchema) -> UserField
pub enum GroupFieldType {
NoMatch,
GroupId,
DisplayName,
CreationDate,
ObjectClass,
@@ -267,6 +268,7 @@ pub fn map_group_field(field: &AttributeName, schema: &PublicSchema) -> GroupFie
}
"member" | "uniquemember" => GroupFieldType::Member,
"entryuuid" | "uuid" => GroupFieldType::Uuid,
"group_id" | "groupid" => GroupFieldType::GroupId,
_ => schema
.get_schema()
.group_attributes