Can register Authenticator app

This commit is contained in:
2022-04-19 11:01:31 +02:00
parent 18353f0639
commit 65b5c812b1
6 changed files with 186 additions and 19 deletions

@ -5,4 +5,5 @@ pub mod settings_controller;
pub mod admin_controller;
pub mod admin_api;
pub mod openid_controller;
pub mod two_factors_controller;
pub mod two_factors_controller;
pub mod two_factors_api;

@ -0,0 +1,41 @@
use actix::Addr;
use actix_web::{HttpResponse, Responder, web};
use crate::actors::users_actor;
use crate::actors::users_actor::UsersActor;
use crate::data::current_user::CurrentUser;
use crate::data::totp_key::TotpKey;
use crate::data::user::{SecondFactor, User};
#[derive(serde::Deserialize)]
pub struct Request {
factor_name: String,
secret: String,
first_code: String,
}
pub async fn save_totp_key(user: CurrentUser, form: web::Json<Request>,
users: web::Data<Addr<UsersActor>>) -> impl Responder {
let key = TotpKey::from_encoded_secret(&form.secret);
if !key.check_code(&form.first_code).unwrap_or(false) {
return HttpResponse::BadRequest()
.body(format!("Given code is invalid (expected {} or {})!",
key.current_code().unwrap_or_default(),
key.previous_code().unwrap_or_default()));
}
if form.factor_name.is_empty() {
return HttpResponse::BadRequest().body("Please give a name to the factor!");
}
let mut user = User::from(user);
user.add_factor(SecondFactor::TOTP(key));
let res = users.send(users_actor::UpdateUserRequest(user)).await.unwrap().0;
if !res {
HttpResponse::InternalServerError().body("Failed to update user information!")
} else {
HttpResponse::Ok().body("Added new factor!")
}
}