Refactor additionalGroups functionality (#2)

This commit is contained in:
2025-03-19 03:24:59 +01:00
parent 582a770e41
commit c1fb7d3fe6
2 changed files with 41 additions and 36 deletions

View File

@@ -218,41 +218,9 @@ impl Reconcile for ServiceUser {
Err(err) => Err(err),
}?;
let groups = lldap_client.get_groups().await?;
// TODO: Error when invalid name
let needed_groups: Vec<_> = self
.spec
.additional_groups
.iter()
.filter_map(|additional_group| {
groups
.iter()
.find(|group| &group.display_name == additional_group)
.map(|group| group.id)
})
.collect();
let current_groups: Vec<_> = user.groups.iter().map(|group| group.id).collect();
let remove = current_groups
.iter()
.filter(|group| !needed_groups.contains(group));
for &group in remove {
trace!(name, username, group, "Removing user from group");
lldap_client
.remove_user_from_group(&username, group)
.await?;
}
let add = needed_groups
.iter()
.filter(|group| !current_groups.contains(group));
for &group in add {
trace!(name, username, group, "Adding user to group");
lldap_client.add_user_to_group(&username, group).await?;
}
trace!(name, "Updating groups");
let groups = self.spec.additional_groups.clone();
lldap_client.update_user_groups(&user, &groups).await?;
trace!(name, "Updating password");
let password = secret.get().data.as_ref().unwrap().get("password").unwrap();