diff options
Diffstat (limited to 'user-info/src/lib.rs')
-rw-r--r-- | user-info/src/lib.rs | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/user-info/src/lib.rs b/user-info/src/lib.rs index bd5ff42..7a42db9 100644 --- a/user-info/src/lib.rs +++ b/user-info/src/lib.rs @@ -1,10 +1,18 @@ -use nix::unistd::{getuid, User}; +use nix::unistd::{getgroups, getuid, Group, User}; pub fn get_username() -> Option<String> { let uid = getuid(); User::from_uid(uid).ok().flatten().map(|user| user.name) } +pub fn get_user_groups() -> Vec<String> { + let gids = getgroups().unwrap_or(Vec::default()); + gids.into_iter() + .filter_map(|gid| Group::from_gid(gid).ok().flatten()) + .map(|group| group.name) + .collect() +} + #[cfg(test)] mod test { use super::*; @@ -17,4 +25,13 @@ mod test { let username_len = username.unwrap().trim().len(); assert!(username_len > 0); } + + #[test] + fn it_returns_some_groups() { + let groups = get_user_groups(); + assert!(groups.len() > 0); + for group in groups { + assert!(group.trim().len() > 0); + } + } } |