Add communication with user actor

This commit is contained in:
2022-03-30 12:41:22 +02:00
parent bfe4674f88
commit 6fdac7fbb1
6 changed files with 94 additions and 10 deletions

View File

@ -1,7 +1,21 @@
use actix::{Actor, Context};
use actix::{Actor, Context, Handler, Message, MessageResult};
use crate::data::entity_manager::EntityManager;
use crate::data::user::User;
use crate::data::user::{User, verify_password};
#[derive(Debug)]
pub enum LoginResult {
AccountNotFound,
InvalidPassword,
Success(User),
}
#[derive(Message)]
#[rtype(LoginResult)]
pub struct LoginRequest {
pub login: String,
pub password: String,
}
pub struct UsersActor {
manager: EntityManager<User>,
@ -15,4 +29,21 @@ impl UsersActor {
impl Actor for UsersActor {
type Context = Context<Self>;
}
impl Handler<LoginRequest> for UsersActor {
type Result = MessageResult<LoginRequest>;
fn handle(&mut self, msg: LoginRequest, _ctx: &mut Self::Context) -> Self::Result {
match self.manager.find_by_username_or_email(&msg.login) {
None => MessageResult(LoginResult::AccountNotFound),
Some(user) => {
if !verify_password(msg.password, &user.password) {
return MessageResult(LoginResult::InvalidPassword);
}
MessageResult(LoginResult::Success(user))
}
}
}
}