Compare commits
2 Commits
9a4c725b4e
...
9f5fdd65ab
Author | SHA1 | Date | |
---|---|---|---|
9f5fdd65ab | |||
123dc519af |
@ -7,6 +7,7 @@ use crate::data::user::{User, UserID, verify_password};
|
|||||||
pub enum LoginResult {
|
pub enum LoginResult {
|
||||||
AccountNotFound,
|
AccountNotFound,
|
||||||
InvalidPassword,
|
InvalidPassword,
|
||||||
|
AccountDisabled,
|
||||||
Success(User),
|
Success(User),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,6 +55,10 @@ impl Handler<LoginRequest> for UsersActor {
|
|||||||
return MessageResult(LoginResult::InvalidPassword);
|
return MessageResult(LoginResult::InvalidPassword);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !user.enabled {
|
||||||
|
return MessageResult(LoginResult::AccountDisabled);
|
||||||
|
}
|
||||||
|
|
||||||
MessageResult(LoginResult::Success(user))
|
MessageResult(LoginResult::Success(user))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,6 +114,11 @@ pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LoginResult::AccountDisabled => {
|
||||||
|
log::warn!("Failed login for username {} : account is disabled", login);
|
||||||
|
danger = "Your account is disabled!".to_string();
|
||||||
|
}
|
||||||
|
|
||||||
c => {
|
c => {
|
||||||
// TODO : add bruteforce detection
|
// TODO : add bruteforce detection
|
||||||
log::warn!("Failed login for username {} : {:?}", login, c);
|
log::warn!("Failed login for username {} : {:?}", login, c);
|
||||||
|
@ -11,7 +11,7 @@ use askama::Template;
|
|||||||
|
|
||||||
use crate::constants::{ADMIN_ROUTES, AUTHENTICATED_ROUTES};
|
use crate::constants::{ADMIN_ROUTES, AUTHENTICATED_ROUTES};
|
||||||
use crate::controllers::base_controller::redirect_user_for_login;
|
use crate::controllers::base_controller::redirect_user_for_login;
|
||||||
use crate::data::session_identity::{SessionIdentity, SessionIdentityData};
|
use crate::data::session_identity::{SessionIdentity, SessionIdentityData, SessionStatus};
|
||||||
|
|
||||||
// There are two steps in middleware processing.
|
// There are two steps in middleware processing.
|
||||||
// 1. Middleware initialization, middleware factory gets called with
|
// 1. Middleware initialization, middleware factory gets called with
|
||||||
@ -40,19 +40,19 @@ impl<S, B> Transform<S, ServiceRequest> for AuthMiddleware
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
enum SessionStatus {
|
enum ConnStatus {
|
||||||
SignedOut,
|
SignedOut,
|
||||||
RegularUser,
|
RegularUser,
|
||||||
Admin,
|
Admin,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SessionStatus {
|
impl ConnStatus {
|
||||||
pub fn is_auth(&self) -> bool {
|
pub fn is_auth(&self) -> bool {
|
||||||
!matches!(self, SessionStatus::SignedOut)
|
!matches!(self, ConnStatus::SignedOut)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_admin(&self) -> bool {
|
pub fn is_admin(&self) -> bool {
|
||||||
matches!(self, SessionStatus::Admin)
|
matches!(self, ConnStatus::Admin)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,9 +92,9 @@ impl<S, B> Service<ServiceRequest> for AuthInnerMiddleware<S>
|
|||||||
}
|
}
|
||||||
|
|
||||||
let identity = match SessionIdentity::deserialize_session_data(req.get_identity()) {
|
let identity = match SessionIdentity::deserialize_session_data(req.get_identity()) {
|
||||||
None => SessionStatus::SignedOut,
|
Some(SessionIdentityData { status: SessionStatus::SignedIn, is_admin: true, .. }) => ConnStatus::Admin,
|
||||||
Some(SessionIdentityData { is_admin: true, .. }) => SessionStatus::Admin,
|
Some(SessionIdentityData { status: SessionStatus::SignedIn, .. }) => ConnStatus::RegularUser,
|
||||||
_ => SessionStatus::RegularUser,
|
_ => ConnStatus::SignedOut,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Redirect user to login page
|
// Redirect user to login page
|
||||||
|
Loading…
x
Reference in New Issue
Block a user