Compare commits
3 Commits
d06c0352fc
...
75d894d648
Author | SHA1 | Date | |
---|---|---|---|
75d894d648 | |||
0c35400e64 | |||
b10c48d080 |
@@ -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
|
||||||
}
|
}
|
||||||
}))
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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(
|
||||||
|
@@ -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);
|
||||||
|
@@ -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 =
|
||||||
|
@@ -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!")
|
||||||
|
Reference in New Issue
Block a user