diff options
author | Justin Wernick <justin@worthe-it.co.za> | 2023-03-29 22:59:57 +0200 |
---|---|---|
committer | Justin Wernick <justin@worthe-it.co.za> | 2023-03-29 23:01:47 +0200 |
commit | 745cd8ab27480a3cf516a2684db2c4fd7cf2144c (patch) | |
tree | feb950d52c3289b5112b81e3d3d6a79f0c94cb49 /src | |
parent | 87da80d972c00358b46172ec9661e6a3a307a0a5 (diff) |
Check user group when creating shared repos
Diffstat (limited to 'src')
-rw-r--r-- | src/git.rs | 13 | ||||
-rw-r--r-- | src/lib.rs | 4 | ||||
-rw-r--r-- | src/main.rs | 4 |
3 files changed, 13 insertions, 8 deletions
@@ -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<PathBuf, ShackleError> { 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<PathBuf, ShackleError> { + 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<bool, ShackleError> { @@ -42,7 +47,7 @@ fn is_valid_personal_git_repo(path: &PathBuf) -> Result<bool, ShackleError> { pub fn init(repo_name: &str, group: &Option<String>) -> Result<GitInitResult, ShackleError> { fn init_group(repo_name: &str, group: &str) -> Result<GitInitResult, ShackleError> { - 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, @@ -41,6 +41,6 @@ pub enum ShackleError { UserReadError, #[error("Path is not accessible")] InvalidDirectory, - #[error("`{0}`")] - CustomError(String), + #[error("Unknown group")] + InvalidGroup, } diff --git a/src/main.rs b/src/main.rs index d7a633f..acb6df2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -46,7 +46,7 @@ fn run_interactive_loop() -> Result<(), ShackleError> { } } Err(e) => { - println!("{:?}", e); + println!("{}", e); } } } @@ -58,7 +58,7 @@ fn run_interactive_loop() -> Result<(), ShackleError> { break; } Err(err) => { - println!("Error: {:?}", err); + println!("Error: {}", err); break; } } |