summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin Wernick <justin@worthe-it.co.za>2023-05-10 17:55:34 +0200
committerJustin Wernick <justin@worthe-it.co.za>2023-05-10 17:55:34 +0200
commit08556b95edf02b8fde068d2db215c63446479564 (patch)
treec6e413e66cd4959ec35b2ecf28b9002bd7cca5d3 /src
parent447176eb86f88139f9974b789c03444245835874 (diff)
Simplify project by getting rid of workspacev0.1.0
Diffstat (limited to 'src')
-rw-r--r--src/git.rs2
-rw-r--r--src/lib.rs3
-rw-r--r--src/user_info.rs37
3 files changed, 40 insertions, 2 deletions
diff --git a/src/git.rs b/src/git.rs
index d571386..07ec775 100644
--- a/src/git.rs
+++ b/src/git.rs
@@ -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,
diff --git a/src/lib.rs b/src/lib.rs
index 5fbea79..45a7fd3 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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);
+ }
+ }
+}