diff options
author | Justin Wernick <justin@worthe-it.co.za> | 2023-05-10 17:55:34 +0200 |
---|---|---|
committer | Justin Wernick <justin@worthe-it.co.za> | 2023-05-10 17:55:34 +0200 |
commit | 08556b95edf02b8fde068d2db215c63446479564 (patch) | |
tree | c6e413e66cd4959ec35b2ecf28b9002bd7cca5d3 /src | |
parent | 447176eb86f88139f9974b789c03444245835874 (diff) |
Simplify project by getting rid of workspacev0.1.0
Diffstat (limited to 'src')
-rw-r--r-- | src/git.rs | 2 | ||||
-rw-r--r-- | src/lib.rs | 3 | ||||
-rw-r--r-- | src/user_info.rs | 37 |
3 files changed, 40 insertions, 2 deletions
@@ -1,5 +1,6 @@ use crate::{ parser::{GitReceivePackArgs, GitUploadPackArgs}, + user_info::{get_user_groups, get_username}, ShackleError, }; use git2::{ErrorCode, Repository, RepositoryInitMode, RepositoryInitOptions}; @@ -8,7 +9,6 @@ use std::{ path::{Path, PathBuf}, process::Command, }; -use user_info::{get_user_groups, get_username}; pub struct GitInitResult { pub path: PathBuf, @@ -1,5 +1,6 @@ pub mod git; -pub mod parser; +mod parser; +pub mod user_info; use comfy_table::Table; use parser::*; 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); + } + } +} |