|
|
|
@ -11,9 +11,9 @@ use serde_json::Value; |
|
|
|
use crate::{ |
|
|
|
CONFIG, |
|
|
|
api::{ |
|
|
|
AnonymousNotify, ApiResult, EmptyResult, JsonResult, Notify, PasswordOrOtpData, UpdateType, |
|
|
|
AnonymousNotify, EmptyResult, JsonResult, Notify, PasswordOrOtpData, UpdateType, |
|
|
|
core::{accept_org_invite, log_user_event, two_factor::email}, |
|
|
|
master_password_policy, register_push_device, unregister_push_device, |
|
|
|
kdf_upgrade, master_password_policy, register_push_device, unregister_push_device, |
|
|
|
}, |
|
|
|
auth::{ClientHeaders, ClientIp, Headers, decode_delete, decode_invite, decode_verify_email}, |
|
|
|
crypto, |
|
|
|
@ -1049,7 +1049,7 @@ async fn post_sstamp(data: Json<PasswordOrOtpData>, headers: Headers, conn: DbCo |
|
|
|
let data: PasswordOrOtpData = data.into_inner(); |
|
|
|
let mut user = headers.user; |
|
|
|
|
|
|
|
data.validate(&user, true, &conn).await?; |
|
|
|
data.validate(&mut user, true, &conn).await?; |
|
|
|
|
|
|
|
user.reset_security_stamp(&conn).await?; |
|
|
|
let save_result = user.save(&conn).await; |
|
|
|
@ -1289,9 +1289,9 @@ async fn post_delete_account(data: Json<PasswordOrOtpData>, headers: Headers, co |
|
|
|
#[delete("/accounts", data = "<data>")] |
|
|
|
async fn delete_account(data: Json<PasswordOrOtpData>, headers: Headers, conn: DbConn) -> EmptyResult { |
|
|
|
let data: PasswordOrOtpData = data.into_inner(); |
|
|
|
let user = headers.user; |
|
|
|
let mut user = headers.user; |
|
|
|
|
|
|
|
data.validate(&user, true, &conn).await?; |
|
|
|
data.validate(&mut user, true, &conn).await?; |
|
|
|
|
|
|
|
user.delete(&conn).await |
|
|
|
} |
|
|
|
@ -1395,19 +1395,6 @@ struct SecretVerificationRequest { |
|
|
|
master_password_hash: String, |
|
|
|
} |
|
|
|
|
|
|
|
// Change the KDF Iterations if necessary
|
|
|
|
pub async fn kdf_upgrade(user: &mut User, pwd_hash: &str, conn: &DbConn) -> ApiResult<()> { |
|
|
|
if user.password_iterations < CONFIG.password_iterations() { |
|
|
|
user.password_iterations = CONFIG.password_iterations(); |
|
|
|
user.set_password(pwd_hash, None, false, None, conn).await?; |
|
|
|
|
|
|
|
if let Err(e) = user.save(conn).await { |
|
|
|
error!("Error updating user: {e:#?}"); |
|
|
|
} |
|
|
|
} |
|
|
|
Ok(()) |
|
|
|
} |
|
|
|
|
|
|
|
#[post("/accounts/verify-password", data = "<data>")] |
|
|
|
async fn verify_password(data: Json<SecretVerificationRequest>, headers: Headers, conn: DbConn) -> JsonResult { |
|
|
|
let data: SecretVerificationRequest = data.into_inner(); |
|
|
|
@ -1426,7 +1413,7 @@ async fn update_api_key(data: Json<PasswordOrOtpData>, rotate: bool, headers: He |
|
|
|
let data: PasswordOrOtpData = data.into_inner(); |
|
|
|
let mut user = headers.user; |
|
|
|
|
|
|
|
data.validate(&user, true, &conn).await?; |
|
|
|
data.validate(&mut user, true, &conn).await?; |
|
|
|
|
|
|
|
if rotate || user.api_key.is_none() { |
|
|
|
user.api_key = Some(crypto::generate_api_key()); |
|
|
|
|