Merge factors type for authentication
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
use std::ops::Deref;
|
||||
|
||||
use actix_web::{HttpResponse, Responder, web};
|
||||
use actix_web::{web, HttpResponse, Responder};
|
||||
use askama::Template;
|
||||
use qrcode_generator::QrCodeEcc;
|
||||
|
||||
@ -37,27 +37,25 @@ struct AddWebauhtnPage {
|
||||
|
||||
/// Manage two factors authentication methods route
|
||||
pub async fn two_factors_route(user: CurrentUser) -> impl Responder {
|
||||
HttpResponse::Ok()
|
||||
.body(TwoFactorsPage {
|
||||
_p: BaseSettingsPage::get(
|
||||
"Two factor auth",
|
||||
&user,
|
||||
None,
|
||||
None),
|
||||
HttpResponse::Ok().body(
|
||||
TwoFactorsPage {
|
||||
_p: BaseSettingsPage::get("Two factor auth", &user, None, None),
|
||||
user: user.deref(),
|
||||
}.render().unwrap())
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
/// Configure a new TOTP authentication factor
|
||||
pub async fn add_totp_factor_route(user: CurrentUser, app_conf: web::Data<AppConfig>) -> impl Responder {
|
||||
pub async fn add_totp_factor_route(
|
||||
user: CurrentUser,
|
||||
app_conf: web::Data<AppConfig>,
|
||||
) -> impl Responder {
|
||||
let key = TotpKey::new_random();
|
||||
|
||||
let qr_code = qrcode_generator::to_png_to_vec(
|
||||
key.url_for_user(&user, &app_conf),
|
||||
QrCodeEcc::Low,
|
||||
1024,
|
||||
);
|
||||
let qr_code =
|
||||
qrcode_generator::to_png_to_vec(key.url_for_user(&user, &app_conf), QrCodeEcc::Low, 1024);
|
||||
let qr_code = match qr_code {
|
||||
Ok(q) => q,
|
||||
Err(e) => {
|
||||
@ -66,26 +64,29 @@ pub async fn add_totp_factor_route(user: CurrentUser, app_conf: web::Data<AppCon
|
||||
}
|
||||
};
|
||||
|
||||
HttpResponse::Ok()
|
||||
.body(AddTotpPage {
|
||||
_p: BaseSettingsPage::get(
|
||||
"New authenticator app",
|
||||
&user,
|
||||
None,
|
||||
None),
|
||||
HttpResponse::Ok().body(
|
||||
AddTotpPage {
|
||||
_p: BaseSettingsPage::get("New authenticator app", &user, None, None),
|
||||
qr_code: base64::encode(qr_code),
|
||||
account_name: key.account_name(&user, &app_conf),
|
||||
secret_key: key.get_secret(),
|
||||
}.render().unwrap())
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
)
|
||||
}
|
||||
|
||||
/// Configure a new security key factor
|
||||
pub async fn add_webauthn_factor_route(user: CurrentUser, manager: WebAuthManagerReq) -> impl Responder {
|
||||
pub async fn add_webauthn_factor_route(
|
||||
user: CurrentUser,
|
||||
manager: WebAuthManagerReq,
|
||||
) -> impl Responder {
|
||||
let registration_request = match manager.start_register(&user) {
|
||||
Ok(r) => r,
|
||||
Err(e) => {
|
||||
log::error!("Failed to request new key! {:?}", e);
|
||||
return HttpResponse::InternalServerError().body("Failed to generate request for registration!");
|
||||
return HttpResponse::InternalServerError()
|
||||
.body("Failed to generate request for registration!");
|
||||
}
|
||||
};
|
||||
|
||||
@ -97,15 +98,14 @@ pub async fn add_webauthn_factor_route(user: CurrentUser, manager: WebAuthManage
|
||||
}
|
||||
};
|
||||
|
||||
HttpResponse::Ok()
|
||||
.body(AddWebauhtnPage {
|
||||
_p: BaseSettingsPage::get(
|
||||
"New security key",
|
||||
&user,
|
||||
None,
|
||||
None),
|
||||
HttpResponse::Ok().body(
|
||||
AddWebauhtnPage {
|
||||
_p: BaseSettingsPage::get("New security key", &user, None, None),
|
||||
|
||||
opaque_state: registration_request.opaque_state,
|
||||
challenge_json: urlencoding::encode(&challenge_json).to_string(),
|
||||
}.render().unwrap())
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
)
|
||||
}
|
||||
|
Reference in New Issue
Block a user