Format code
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
use std::path::Path;
|
||||
|
||||
use actix_web::{HttpResponse, web};
|
||||
use include_dir::{Dir, include_dir};
|
||||
use actix_web::{web, HttpResponse};
|
||||
use include_dir::{include_dir, Dir};
|
||||
|
||||
/// Assets directory
|
||||
static ASSETS_DIR: Dir = include_dir!("$CARGO_MANIFEST_DIR/assets");
|
||||
@ -17,4 +17,4 @@ pub async fn assets_route(path: web::Path<String>) -> HttpResponse {
|
||||
.body(file.contents())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,11 @@ pub fn redirect_user_for_login<P: Display>(redirect_uri: P) -> HttpResponse {
|
||||
HttpResponse::Found()
|
||||
.append_header((
|
||||
"Location",
|
||||
format!("{}?redirect={}", LOGIN_ROUTE, urlencoding::encode(&redirect_uri.to_string()))
|
||||
format!(
|
||||
"{}?redirect={}",
|
||||
LOGIN_ROUTE,
|
||||
urlencoding::encode(&redirect_uri.to_string())
|
||||
),
|
||||
))
|
||||
.finish()
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
use actix::Addr;
|
||||
use actix_identity::Identity;
|
||||
use actix_web::{HttpResponse, Responder, web};
|
||||
use actix_web::{web, HttpResponse, Responder};
|
||||
use askama::Template;
|
||||
|
||||
use crate::actors::users_actor::{ChangePasswordResult, LoginResult, UsersActor};
|
||||
use crate::actors::users_actor;
|
||||
use crate::actors::users_actor::{ChangePasswordResult, LoginResult, UsersActor};
|
||||
use crate::constants::{APP_NAME, MIN_PASS_LEN};
|
||||
use crate::controllers::base_controller::redirect_user;
|
||||
use crate::data::session_identity::{SessionIdentity, SessionStatus};
|
||||
@ -46,10 +46,12 @@ pub struct LoginRequestQuery {
|
||||
}
|
||||
|
||||
/// Authenticate user
|
||||
pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
||||
query: web::Query<LoginRequestQuery>,
|
||||
req: Option<web::Form<LoginRequestBody>>,
|
||||
id: Identity) -> impl Responder {
|
||||
pub async fn login_route(
|
||||
users: web::Data<Addr<UsersActor>>,
|
||||
query: web::Query<LoginRequestQuery>,
|
||||
req: Option<web::Form<LoginRequestBody>>,
|
||||
id: Identity,
|
||||
) -> impl Responder {
|
||||
let mut danger = String::new();
|
||||
let mut success = String::new();
|
||||
let mut login = String::new();
|
||||
@ -59,7 +61,7 @@ pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
||||
Some(s) => match s.starts_with('/') && !s.starts_with("//") {
|
||||
true => s,
|
||||
false => "/",
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// Check if user session must be closed
|
||||
@ -78,11 +80,14 @@ pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
||||
if req.password.len() < MIN_PASS_LEN {
|
||||
danger = "Password is too short!".to_string();
|
||||
} else {
|
||||
let res: ChangePasswordResult = users.send(users_actor::ChangePasswordRequest {
|
||||
user_id: SessionIdentity(&id).user_id(),
|
||||
new_password: req.password.clone(),
|
||||
temporary: false,
|
||||
}).await.unwrap();
|
||||
let res: ChangePasswordResult = users
|
||||
.send(users_actor::ChangePasswordRequest {
|
||||
user_id: SessionIdentity(&id).user_id(),
|
||||
new_password: req.password.clone(),
|
||||
temporary: false,
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
if !res.0 {
|
||||
danger = "Failed to change password!".to_string();
|
||||
@ -92,16 +97,16 @@ pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Try to authenticate user
|
||||
else if let Some(req) = &req {
|
||||
// TODO : check request origin (check for valid Referer)
|
||||
|
||||
login = req.login.clone();
|
||||
let response: LoginResult = users.send(users_actor::LoginRequest {
|
||||
login: login.clone(),
|
||||
password: req.password.clone(),
|
||||
}).await.unwrap();
|
||||
let response: LoginResult = users
|
||||
.send(users_actor::LoginRequest {
|
||||
login: login.clone(),
|
||||
password: req.password.clone(),
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
match response {
|
||||
LoginResult::Success(user) => {
|
||||
@ -120,7 +125,6 @@ pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
||||
}
|
||||
|
||||
c => {
|
||||
// TODO : add bruteforce detection
|
||||
log::warn!("Failed login for username {} : {:?}", login, c);
|
||||
danger = "Login failed.".to_string();
|
||||
}
|
||||
@ -129,9 +133,8 @@ pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
||||
|
||||
// Display password reset form if it is appropriate
|
||||
if SessionIdentity(&id).need_new_password() {
|
||||
return HttpResponse::Ok()
|
||||
.content_type("text/html")
|
||||
.body(PasswordResetTemplate {
|
||||
return HttpResponse::Ok().content_type("text/html").body(
|
||||
PasswordResetTemplate {
|
||||
_parent: BaseLoginPage {
|
||||
page_title: "Password reset",
|
||||
danger,
|
||||
@ -140,13 +143,14 @@ pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
||||
redirect_uri: urlencoding::encode(redirect_uri).to_string(),
|
||||
},
|
||||
min_pass_len: MIN_PASS_LEN,
|
||||
}.render().unwrap());
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
HttpResponse::Ok()
|
||||
.content_type("text/html")
|
||||
.body(LoginTemplate {
|
||||
HttpResponse::Ok().content_type("text/html").body(
|
||||
LoginTemplate {
|
||||
_parent: BaseLoginPage {
|
||||
page_title: "Login",
|
||||
danger,
|
||||
@ -155,10 +159,13 @@ pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
||||
redirect_uri: urlencoding::encode(redirect_uri).to_string(),
|
||||
},
|
||||
login,
|
||||
}.render().unwrap())
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
)
|
||||
}
|
||||
|
||||
/// Sign out user
|
||||
pub async fn logout_route() -> impl Responder {
|
||||
redirect_user("/login?logout=true")
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
pub mod assets_controller;
|
||||
pub mod base_controller;
|
||||
pub mod login_controller;
|
||||
pub mod base_controller;
|
Reference in New Issue
Block a user