Compare commits

...

3 Commits

Author SHA1 Message Date
75d894d648 Simplify delete user call syntax
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-19 16:46:40 +01:00
0c35400e64 Simplify user update call syntax 2022-11-19 16:43:28 +01:00
b10c48d080 Simplify password change call syntax 2022-11-19 16:41:39 +01:00
6 changed files with 22 additions and 39 deletions

View File

@@ -41,16 +41,13 @@ pub struct GetAllUsersRequest;
pub struct GetAllUsersResult(pub Vec<User>); pub struct GetAllUsersResult(pub Vec<User>);
#[derive(Message)] #[derive(Message)]
#[rtype(ChangePasswordResult)] #[rtype(result = "bool")]
pub struct ChangePasswordRequest { pub struct ChangePasswordRequest {
pub user_id: UserID, pub user_id: UserID,
pub new_password: String, pub new_password: String,
pub temporary: bool, pub temporary: bool,
} }
#[derive(Debug)]
pub struct ChangePasswordResult(pub bool);
#[derive(Message)] #[derive(Message)]
#[rtype(result = "bool")] #[rtype(result = "bool")]
pub struct AddSuccessful2FALogin(pub UserID, pub IpAddr); pub struct AddSuccessful2FALogin(pub UserID, pub IpAddr);
@@ -59,18 +56,12 @@ pub struct AddSuccessful2FALogin(pub UserID, pub IpAddr);
#[rtype(result = "bool")] #[rtype(result = "bool")]
pub struct Clear2FALoginHistory(pub UserID); pub struct Clear2FALoginHistory(pub UserID);
#[derive(Debug)]
pub struct UpdateUserResult(pub bool);
#[derive(Message)] #[derive(Message)]
#[rtype(UpdateUserResult)] #[rtype(result = "bool")]
pub struct UpdateUserRequest(pub User); pub struct UpdateUserRequest(pub User);
#[derive(Debug)]
pub struct DeleteUserResult(pub bool);
#[derive(Message)] #[derive(Message)]
#[rtype(DeleteUserResult)] #[rtype(result = "bool")]
pub struct DeleteUserRequest(pub UserID); pub struct DeleteUserRequest(pub UserID);
pub struct UsersActor { pub struct UsersActor {
@@ -109,14 +100,11 @@ impl Handler<LoginRequest> for UsersActor {
} }
impl Handler<ChangePasswordRequest> for UsersActor { impl Handler<ChangePasswordRequest> for UsersActor {
type Result = MessageResult<ChangePasswordRequest>; type Result = <ChangePasswordRequest as actix::Message>::Result;
fn handle(&mut self, msg: ChangePasswordRequest, _ctx: &mut Self::Context) -> Self::Result { fn handle(&mut self, msg: ChangePasswordRequest, _ctx: &mut Self::Context) -> Self::Result {
MessageResult(ChangePasswordResult(self.manager.change_user_password( self.manager
&msg.user_id, .change_user_password(&msg.user_id, &msg.new_password, msg.temporary)
&msg.new_password,
msg.temporary,
)))
} }
} }
@@ -163,21 +151,21 @@ impl Handler<GetAllUsersRequest> for UsersActor {
} }
impl Handler<UpdateUserRequest> for UsersActor { impl Handler<UpdateUserRequest> for UsersActor {
type Result = MessageResult<UpdateUserRequest>; type Result = <UpdateUserRequest as actix::Message>::Result;
fn handle(&mut self, msg: UpdateUserRequest, _ctx: &mut Self::Context) -> Self::Result { fn handle(&mut self, msg: UpdateUserRequest, _ctx: &mut Self::Context) -> Self::Result {
MessageResult(UpdateUserResult(match self.manager.update_or_push(msg.0) { match self.manager.update_or_push(msg.0) {
Ok(_) => true, Ok(_) => true,
Err(e) => { Err(e) => {
log::error!("Failed to update user information! {:?}", e); log::error!("Failed to update user information! {:?}", e);
false false
} }
})) }
} }
} }
impl Handler<DeleteUserRequest> for UsersActor { impl Handler<DeleteUserRequest> for UsersActor {
type Result = MessageResult<DeleteUserRequest>; type Result = <DeleteUserRequest as actix::Message>::Result;
fn handle(&mut self, msg: DeleteUserRequest, _ctx: &mut Self::Context) -> Self::Result { fn handle(&mut self, msg: DeleteUserRequest, _ctx: &mut Self::Context) -> Self::Result {
let user = match self.manager.find_by_user_id(&msg.0) { let user = match self.manager.find_by_user_id(&msg.0) {
@@ -186,17 +174,17 @@ impl Handler<DeleteUserRequest> for UsersActor {
"Could not delete account {:?} because it was not found!", "Could not delete account {:?} because it was not found!",
msg.0 msg.0
); );
return MessageResult(DeleteUserResult(false)); return false;
} }
Some(s) => s, Some(s) => s,
}; };
MessageResult(DeleteUserResult(match self.manager.remove(&user) { match self.manager.remove(&user) {
Ok(_) => true, Ok(_) => true,
Err(e) => { Err(e) => {
log::error!("Failed to update delete account! {:?}", e); log::error!("Failed to update delete account! {:?}", e);
false false
} }
})) }
} }
} }

View File

@@ -56,7 +56,7 @@ pub async fn delete_user(
}; };
let res = users.send(DeleteUserRequest(req.0.user_id)).await.unwrap(); let res = users.send(DeleteUserRequest(req.0.user_id)).await.unwrap();
if res.0 { if res {
action_logger.log(Action::AdminDeleteUser(&user)); action_logger.log(Action::AdminDeleteUser(&user));
HttpResponse::Ok().finish() HttpResponse::Ok().finish()
} else { } else {

View File

@@ -132,8 +132,7 @@ pub async fn users_route(
let res = users let res = users
.send(users_actor::UpdateUserRequest(user.clone())) .send(users_actor::UpdateUserRequest(user.clone()))
.await .await
.unwrap() .unwrap();
.0;
if !res { if !res {
danger = Some( danger = Some(

View File

@@ -4,7 +4,7 @@ use actix_web::{web, HttpRequest, HttpResponse, Responder};
use askama::Template; use askama::Template;
use crate::actors::bruteforce_actor::BruteForceActor; use crate::actors::bruteforce_actor::BruteForceActor;
use crate::actors::users_actor::{ChangePasswordResult, LoginResult, UsersActor}; use crate::actors::users_actor::{LoginResult, UsersActor};
use crate::actors::{bruteforce_actor, users_actor}; use crate::actors::{bruteforce_actor, users_actor};
use crate::constants::{APP_NAME, MAX_FAILED_LOGIN_ATTEMPTS, MIN_PASS_LEN}; use crate::constants::{APP_NAME, MAX_FAILED_LOGIN_ATTEMPTS, MIN_PASS_LEN};
use crate::controllers::base_controller::{ use crate::controllers::base_controller::{
@@ -237,7 +237,7 @@ pub async fn reset_password_route(
if req.password.len() < MIN_PASS_LEN { if req.password.len() < MIN_PASS_LEN {
danger = Some("Password is too short!".to_string()); danger = Some("Password is too short!".to_string());
} else { } else {
let res: ChangePasswordResult = users let res: bool = users
.send(users_actor::ChangePasswordRequest { .send(users_actor::ChangePasswordRequest {
user_id: user_id.clone(), user_id: user_id.clone(),
new_password: req.password.clone(), new_password: req.password.clone(),
@@ -246,7 +246,7 @@ pub async fn reset_password_route(
.await .await
.unwrap(); .unwrap();
if !res.0 { if !res {
danger = Some("Failed to change password!".to_string()); danger = Some("Failed to change password!".to_string());
} else { } else {
SessionIdentity(id.as_ref()).set_status(&http_req, SessionStatus::SignedIn); SessionIdentity(id.as_ref()).set_status(&http_req, SessionStatus::SignedIn);

View File

@@ -125,8 +125,7 @@ pub async fn change_password_route(
temporary: false, temporary: false,
}) })
.await .await
.unwrap() .unwrap();
.0;
if !res { if !res {
danger = danger =

View File

@@ -61,8 +61,7 @@ pub async fn save_totp_factor(
let res = users let res = users
.send(users_actor::UpdateUserRequest(user)) .send(users_actor::UpdateUserRequest(user))
.await .await
.unwrap() .unwrap();
.0;
if !res { if !res {
HttpResponse::InternalServerError().body("Failed to update user information!") HttpResponse::InternalServerError().body("Failed to update user information!")
@@ -110,8 +109,7 @@ pub async fn save_webauthn_factor(
let res = users let res = users
.send(users_actor::UpdateUserRequest(user)) .send(users_actor::UpdateUserRequest(user))
.await .await
.unwrap() .unwrap();
.0;
if !res { if !res {
HttpResponse::InternalServerError().body("Failed to update user information!") HttpResponse::InternalServerError().body("Failed to update user information!")
@@ -137,8 +135,7 @@ pub async fn delete_factor(
let res = users let res = users
.send(users_actor::UpdateUserRequest(user)) .send(users_actor::UpdateUserRequest(user))
.await .await
.unwrap() .unwrap();
.0;
if !res { if !res {
HttpResponse::InternalServerError().body("Failed to update user information!") HttpResponse::InternalServerError().body("Failed to update user information!")