Can request account creation from web app

This commit is contained in:
2023-06-13 10:06:04 +02:00
parent 37015807bb
commit ae84ae8822
5 changed files with 208 additions and 14 deletions

View File

@ -19,7 +19,6 @@ pub async fn create_account(remote_ip: RemoteIP, req: web::Json<CreateAccountBod
if rate_limiter_service::should_block_action(remote_ip.0, RatedAction::CreateAccount).await? {
return Ok(HttpResponse::TooManyRequests().finish());
}
rate_limiter_service::record_action(remote_ip.0, RatedAction::CreateAccount).await?;
// Check if email is valid
if !mailchecker::is_valid(&req.email) {
@ -33,6 +32,8 @@ pub async fn create_account(remote_ip: RemoteIP, req: web::Json<CreateAccountBod
return Ok(HttpResponse::BadRequest().json("Size constraints were not respected!"));
}
rate_limiter_service::record_action(remote_ip.0, RatedAction::CreateAccount).await?;
// Perform cleanup
users_service::delete_not_validated_accounts().await?;
@ -164,7 +165,7 @@ pub async fn reset_password(remote_ip: RemoteIP, req: web::Json<ResetPasswordBod
.password_len
.validate(&req.password)
{
return Ok(HttpResponse::BadRequest().json("Taille du mot de passe invalide!"));
return Ok(HttpResponse::BadRequest().json("Invalid password len!"));
}
// Validate account, if required
@ -198,14 +199,14 @@ pub async fn password_login(remote_ip: RemoteIP, req: web::Json<PasswordLoginQue
log::error!("Auth failed: could not find account by mail! {}", e);
rate_limiter_service::record_action(remote_ip.0, RatedAction::FailedPasswordLogin)
.await?;
return Ok(HttpResponse::Unauthorized().json("Identifiants incorrects"));
return Ok(HttpResponse::Unauthorized().json("Invalid credentials"));
}
};
if !user.check_password(&req.password) {
log::error!("Auth failed: invalid password for mail {}", user.email);
rate_limiter_service::record_action(remote_ip.0, RatedAction::FailedPasswordLogin).await?;
return Ok(HttpResponse::Unauthorized().json("Identifiants incorrects"));
return Ok(HttpResponse::Unauthorized().json("Invalid credentials"));
}
finish_login(&user).await
@ -220,7 +221,7 @@ struct LoginResponse {
async fn finish_login(user: &User) -> HttpResult {
if !user.active {
log::error!("Auth failed: account for mail {} is disabled!", user.email);
return Ok(HttpResponse::ExpectationFailed().json("Ce compte est désactivé !"));
return Ok(HttpResponse::ExpectationFailed().json("This account is disabled!"));
}
Ok(HttpResponse::Ok().json(LoginResponse {
@ -271,16 +272,13 @@ pub async fn finish_openid_login(
if user_info.email_verified != Some(true) {
log::error!("Email is not verified!");
return Ok(
HttpResponse::Unauthorized().json("Email non vérifié par le fournisseur d'identité !")
);
return Ok(HttpResponse::Unauthorized().json("Email unverified by IDP!"));
}
let mail = match user_info.email {
Some(m) => m,
None => {
return Ok(HttpResponse::Unauthorized()
.json("Email non spécifié par le fournisseur d'identité !"));
return Ok(HttpResponse::Unauthorized().json("Email not provided by the IDP!"));
}
};
@ -290,8 +288,7 @@ pub async fn finish_openid_login(
(Some(name), _, _) => name,
(None, Some(g), Some(f)) => format!("{g} {f}"),
(_, _, _) => {
return Ok(HttpResponse::Unauthorized()
.json("Nom non spécifié par le fournisseur d'identité !"));
return Ok(HttpResponse::Unauthorized().json("Name unspecified by the IDP!"));
}
};