feat: Basic domain creation API
This commit is contained in:
parent
bd12632a7e
commit
f1a2721cbe
6 changed files with 176 additions and 44 deletions
35
src/db/domain.rs
Normal file
35
src/db/domain.rs
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
use crate::db::error::UserCreationError;
|
||||
use crate::db::{Group, User, UserRef};
|
||||
|
||||
#[derive(Clone, Debug, Default)]
|
||||
pub struct Domain {
|
||||
pub name: String,
|
||||
pub users: Vec<User>,
|
||||
#[expect(unused)]
|
||||
pub groups: Vec<Group>,
|
||||
}
|
||||
|
||||
impl Domain {
|
||||
pub fn get_user(&self, req_user: &UserRef) -> Option<User> {
|
||||
assert!(
|
||||
req_user.domain.as_deref().unwrap_or("") == self.name,
|
||||
"Should only call Domain::get_user on the matching domain. Asked for {:?} on domain {}",
|
||||
req_user,
|
||||
self.name
|
||||
);
|
||||
|
||||
self.users
|
||||
.iter()
|
||||
.find(|u| u.username == req_user.username)
|
||||
.cloned()
|
||||
}
|
||||
|
||||
pub fn create_user(&mut self, user: User, user_ref: UserRef) -> Result<(), UserCreationError> {
|
||||
if self.get_user(&user_ref).is_some() {
|
||||
return Err(UserCreationError::UserAlreadyExists(user_ref));
|
||||
}
|
||||
|
||||
self.users.push(user);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue