summaryrefslogtreecommitdiff
path: root/src/user_info.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/user_info.rs')
-rw-r--r--src/user_info.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/user_info.rs b/src/user_info.rs
new file mode 100644
index 0000000..7a42db9
--- /dev/null
+++ b/src/user_info.rs
@@ -0,0 +1,37 @@
+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::*;
+
+ #[test]
+ fn it_returns_a_username() {
+ // We can't get too specific here because this is your actual username,
+ // but we at lease expect it to be some string, not None.
+ let username = get_username();
+ 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);
+ }
+ }
+}