Refactor users management
All checks were successful
continuous-integration/drone/push Build is passing

* Shard `src/data/user.rs` into two different files
  * One for user data structure (same file)
  * One for user manipulation (new file: `user_file_entity.rs`)
* Isolate password hashing and verification
This commit is contained in:
2022-11-19 17:52:35 +01:00
parent 75d894d648
commit 65d334b947
7 changed files with 145 additions and 113 deletions

View File

@ -26,6 +26,10 @@ pub struct GetUserRequest(pub UserID);
#[derive(Debug)]
pub struct GetUserResult(pub Option<User>);
#[derive(Message)]
#[rtype(result = "bool")]
pub struct VerifyUserPasswordRequest(pub UserID, pub String);
#[derive(Message)]
#[rtype(FindUserByUsernameResult)]
pub struct FindUserByUsername(pub String);
@ -85,7 +89,7 @@ impl Handler<LoginRequest> for UsersActor {
match self.manager.find_by_username_or_email(&msg.login) {
None => MessageResult(LoginResult::AccountNotFound),
Some(user) => {
if !user.verify_password(&msg.password) {
if !self.manager.verify_user_password(&user.uid, &msg.password) {
return MessageResult(LoginResult::InvalidPassword);
}
@ -132,6 +136,14 @@ impl Handler<GetUserRequest> for UsersActor {
}
}
impl Handler<VerifyUserPasswordRequest> for UsersActor {
type Result = <VerifyUserPasswordRequest as actix::Message>::Result;
fn handle(&mut self, msg: VerifyUserPasswordRequest, _ctx: &mut Self::Context) -> Self::Result {
self.manager.verify_user_password(&msg.0, &msg.1)
}
}
impl Handler<FindUserByUsername> for UsersActor {
type Result = MessageResult<FindUserByUsername>;