1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
pub mod createuser_args;
pub mod deleteuser_args;

pub use createuser_args::{CreateHome, CreatePrimaryGroup, CreateUserArgs};
pub use deleteuser_args::{DeleteHome, DeletePrimaryGroup, DeleteUserArgs};
pub trait UserDBRead {
    fn get_all_users(&self) -> Vec<&crate::User>;
    fn get_user_by_name(&self, name: &str) -> Option<&crate::User>;
    fn get_user_by_id(&self, uid: u32) -> Option<&crate::User>;
    fn get_all_groups(&self) -> Vec<crate::Group>;
    fn get_group_by_name(&self, name: &str) -> Option<&crate::Group>;
    fn get_group_by_id(&self, name: u32) -> Option<&crate::Group>;
}

pub trait UserDBValidation {
    fn is_uid_valid_and_free(&self, uid: u32) -> bool;
    fn is_username_valid_and_free(&self, name: &str) -> bool;
    fn is_gid_valid_and_free(&self, gid: u32) -> bool;
    fn is_groupname_valid_and_free(&self, name: &str) -> bool;
}

pub trait UserDBWrite {
    fn delete_user(&mut self, params: DeleteUserArgs) -> Result<crate::User, crate::UserLibError>;
    fn new_user(&mut self, params: CreateUserArgs) -> Result<&crate::User, crate::UserLibError>;
    fn delete_group(&mut self, group: &crate::Group) -> Result<(), crate::UserLibError>;
    fn new_group(&mut self) -> Result<&crate::Group, crate::UserLibError>;
}

pub trait UserRead {
    fn get_username(&self) -> Option<&str>;
    fn get_uid(&self) -> u32;
    fn get_gid(&self) -> u32;
    fn get_password(&self) -> Option<&str>;
    fn get_gecos(&self) -> Option<&crate::Gecos>;
    fn get_home_dir(&self) -> Option<&str>;
    fn get_shell_path(&self) -> Option<&str>;
    fn get_full_name(&self) -> Option<&str>;
    fn get_room(&self) -> Option<&str>;
    fn get_phone_work(&self) -> Option<&str>;
    fn get_phone_home(&self) -> Option<&str>;
    fn get_other(&self) -> Option<&Vec<String>>;
}

pub trait UserWrite {
    fn set_username(&self, username: String);
    fn set_uid(&self, uid: u32);
    fn set_gid(&self, gid: u32);
    fn set_password(&self, password: String);
    fn set_gecos(&self, gecos: crate::Gecos);
    fn set_home_dir(&self, home_dir: String);
    fn set_shell_path(&self, shell_path: String);
    fn set_full_name(&self, full_name: String);
    fn set_room(&self, room: String);
    fn set_phone_work(&self, phone_work: String);
    fn set_phone_home(&self, phone_home: String);
    fn set_other(&self, other: Option<Vec<String>>);
}

pub trait GroupRead {
    fn get_groupname(&self) -> Option<&str>;
    fn get_encrypted_password(&self) -> Option<&str>;
    fn get_gid(&self) -> Option<u32>;
    fn get_member_names(&self) -> Option<Vec<&str>>;
}

pub trait GroupWrite<T> {
    fn set_groupname(&self) -> Option<crate::Group>;
    fn set_password(&self) -> Option<crate::Group>;
    fn set_gid(&self) -> Option<crate::Group>;
    fn add_member(user: T) -> Option<crate::Group>;
    fn remove_member(user: T) -> Option<crate::Group>;
}