From 745cd8ab27480a3cf516a2684db2c4fd7cf2144c Mon Sep 17 00:00:00 2001 From: Justin Wernick Date: Wed, 29 Mar 2023 22:59:57 +0200 Subject: Check user group when creating shared repos --- src/git.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/git.rs') diff --git a/src/git.rs b/src/git.rs index c61bec1..dcdb71b 100644 --- a/src/git.rs +++ b/src/git.rs @@ -7,7 +7,7 @@ use std::{ path::{Path, PathBuf}, process::Command, }; -use user_info::get_username; +use user_info::{get_user_groups, get_username}; pub struct GitInitResult { pub path: PathBuf, @@ -18,8 +18,13 @@ fn personal_git_dir() -> Result { Ok(Path::new("git").join(username)) } -fn group_git_dir(group: &str) -> PathBuf { - Path::new("git").join(group) +fn group_git_dir(group: &str) -> Result { + let groups = get_user_groups(); + if !groups.iter().any(|g| g == group) { + Err(ShackleError::InvalidGroup) + } else { + Ok(Path::new("git").join(group)) + } } fn is_valid_personal_git_repo(path: &PathBuf) -> Result { @@ -42,7 +47,7 @@ fn is_valid_personal_git_repo(path: &PathBuf) -> Result { pub fn init(repo_name: &str, group: &Option) -> Result { fn init_group(repo_name: &str, group: &str) -> Result { - let path = group_git_dir(group).join(repo_name).with_extension("git"); + let path = group_git_dir(group)?.join(repo_name).with_extension("git"); Repository::init_opts( &path, -- cgit v1.2.3