|
|
@ -110,8 +110,8 @@ async fn send_email_login(data: Json<SendEmailLoginData>, client_headers: Client |
|
|
|
|
|
|
|
|
/// Generate the token, save the data for later verification and send email to user
|
|
|
/// Generate the token, save the data for later verification and send email to user
|
|
|
pub async fn send_token(user_id: &UserId, conn: &DbConn) -> EmptyResult { |
|
|
pub async fn send_token(user_id: &UserId, conn: &DbConn) -> EmptyResult { |
|
|
let type_ = TwoFactorType::Email as i32; |
|
|
let mut twofactor = |
|
|
let mut twofactor = TwoFactor::find_by_user_and_type(user_id, type_, conn).await.map_res("Two factor not found")?; |
|
|
TwoFactor::find_by_user_and_type(user_id, TwoFactorType::Email, conn).await.map_res("Two factor not found")?; |
|
|
|
|
|
|
|
|
let generated_token = crypto::generate_email_token(CONFIG.email_token_size()); |
|
|
let generated_token = crypto::generate_email_token(CONFIG.email_token_size()); |
|
|
|
|
|
|
|
|
@ -134,7 +134,7 @@ async fn get_email(data: Json<PasswordOrOtpData>, headers: Headers, conn: DbConn |
|
|
data.validate(&user, false, &conn).await?; |
|
|
data.validate(&user, false, &conn).await?; |
|
|
|
|
|
|
|
|
let (enabled, mfa_email) = |
|
|
let (enabled, mfa_email) = |
|
|
if let Some(x) = TwoFactor::find_by_user_and_type(&user.uuid, TwoFactorType::Email as i32, &conn).await { |
|
|
if let Some(x) = TwoFactor::find_by_user_and_type(&user.uuid, TwoFactorType::Email, &conn).await { |
|
|
let twofactor_data = EmailTokenData::from_json(&x.data)?; |
|
|
let twofactor_data = EmailTokenData::from_json(&x.data)?; |
|
|
(true, Some(twofactor_data.email)) |
|
|
(true, Some(twofactor_data.email)) |
|
|
} else { |
|
|
} else { |
|
|
@ -170,9 +170,7 @@ async fn send_email(data: Json<SendEmailData>, headers: Headers, conn: DbConn) - |
|
|
err!("Email 2FA is disabled") |
|
|
err!("Email 2FA is disabled") |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
let type_ = TwoFactorType::Email as i32; |
|
|
if let Some(tf) = TwoFactor::find_by_user_and_type(&user.uuid, TwoFactorType::Email, &conn).await { |
|
|
|
|
|
|
|
|
if let Some(tf) = TwoFactor::find_by_user_and_type(&user.uuid, type_, &conn).await { |
|
|
|
|
|
tf.delete(&conn).await?; |
|
|
tf.delete(&conn).await?; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -205,10 +203,9 @@ async fn email(data: Json<EmailData>, headers: Headers, conn: DbConn) -> JsonRes |
|
|
|
|
|
|
|
|
two_factor::validate_email(&data.user_verification_token, &user.uuid, data.email, false)?; |
|
|
two_factor::validate_email(&data.user_verification_token, &user.uuid, data.email, false)?; |
|
|
|
|
|
|
|
|
let mut twofactor = |
|
|
let mut twofactor = TwoFactor::find_by_user_and_type(&user.uuid, TwoFactorType::EmailVerificationChallenge, &conn) |
|
|
TwoFactor::find_by_user_and_type(&user.uuid, TwoFactorType::EmailVerificationChallenge as i32, &conn) |
|
|
.await |
|
|
.await |
|
|
.map_res("Two factor not found")?; |
|
|
.map_res("Two factor not found")?; |
|
|
|
|
|
|
|
|
|
|
|
let mut email_data = EmailTokenData::from_json(&twofactor.data)?; |
|
|
let mut email_data = EmailTokenData::from_json(&twofactor.data)?; |
|
|
|
|
|
|
|
|
@ -236,7 +233,7 @@ async fn email(data: Json<EmailData>, headers: Headers, conn: DbConn) -> JsonRes |
|
|
async fn disable_email(data: Json<VerificationTokenData>, headers: Headers, conn: DbConn) -> EmptyResult { |
|
|
async fn disable_email(data: Json<VerificationTokenData>, headers: Headers, conn: DbConn) -> EmptyResult { |
|
|
let user = headers.user; |
|
|
let user = headers.user; |
|
|
|
|
|
|
|
|
if let Some(twofactor) = TwoFactor::find_by_user_and_type(&user.uuid, TwoFactorType::Email as i32, &conn).await { |
|
|
if let Some(twofactor) = TwoFactor::find_by_user_and_type(&user.uuid, TwoFactorType::Email, &conn).await { |
|
|
let twofactor_data = EmailTokenData::from_json(&twofactor.data)?; |
|
|
let twofactor_data = EmailTokenData::from_json(&twofactor.data)?; |
|
|
two_factor::validate_email(&data.user_verification_token, &user.uuid, twofactor_data.email, true)?; |
|
|
two_factor::validate_email(&data.user_verification_token, &user.uuid, twofactor_data.email, true)?; |
|
|
|
|
|
|
|
|
@ -261,9 +258,8 @@ pub async fn validate_email_code_str( |
|
|
conn: &DbConn, |
|
|
conn: &DbConn, |
|
|
) -> EmptyResult { |
|
|
) -> EmptyResult { |
|
|
let mut email_data = EmailTokenData::from_json(data)?; |
|
|
let mut email_data = EmailTokenData::from_json(data)?; |
|
|
let mut twofactor = TwoFactor::find_by_user_and_type(user_id, TwoFactorType::Email as i32, conn) |
|
|
let mut twofactor = |
|
|
.await |
|
|
TwoFactor::find_by_user_and_type(user_id, TwoFactorType::Email, conn).await.map_res("Two factor not found")?; |
|
|
.map_res("Two factor not found")?; |
|
|
|
|
|
let Some(issued_token) = &email_data.last_token else { |
|
|
let Some(issued_token) = &email_data.last_token else { |
|
|
err!( |
|
|
err!( |
|
|
format!("No token available! IP: {ip}"), |
|
|
format!("No token available! IP: {ip}"), |
|
|
|