geforkt von mirrored/vaultwarden
Move retrieve/new device from connData to separate function
Dieser Commit ist enthalten in:
Ursprung
bc6a53b847
Commit
60e39a9dd1
2 geänderte Dateien mit 34 neuen und 38 gelöschten Zeilen
|
@ -101,38 +101,7 @@ fn _password_login(data: ConnectData, conn: DbConn, ip: ClientIp) -> JsonResult
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// On iOS, device_type sends "iOS", on others it sends a number
|
let mut device = get_device(&data, &conn, &user, &ip)?;
|
||||||
let device_type = util::try_parse_string(data.device_type.as_ref()).unwrap_or(0);
|
|
||||||
let device_id = data.device_identifier.clone().expect("No device id provided");
|
|
||||||
let device_name = data.device_name.clone().expect("No device name provided");
|
|
||||||
|
|
||||||
let mut send_email = false;
|
|
||||||
// Find device or create new
|
|
||||||
let mut device = match Device::find_by_uuid(&device_id, &conn) {
|
|
||||||
Some(device) => {
|
|
||||||
// Check if owned device, and recreate if not
|
|
||||||
if device.user_uuid != user.uuid {
|
|
||||||
info!("Device exists but is owned by another user. The old device will be discarded");
|
|
||||||
send_email = true;
|
|
||||||
Device::new(device_id, user.uuid.clone(), device_name, device_type)
|
|
||||||
} else {
|
|
||||||
device
|
|
||||||
}
|
|
||||||
}
|
|
||||||
None => {
|
|
||||||
send_email = true;
|
|
||||||
Device::new(device_id, user.uuid.clone(), device_name, device_type)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if CONFIG.mail_enabled() && send_email {
|
|
||||||
mail::send_new_device_logged_in(
|
|
||||||
&username,
|
|
||||||
&ip.ip.to_string(),
|
|
||||||
&device.updated_at,
|
|
||||||
&device.name,
|
|
||||||
)?;
|
|
||||||
}
|
|
||||||
|
|
||||||
let twofactor_token = twofactor_auth(&user.uuid, &data, &mut device, &conn)?;
|
let twofactor_token = twofactor_auth(&user.uuid, &data, &mut device, &conn)?;
|
||||||
|
|
||||||
|
@ -161,6 +130,38 @@ fn _password_login(data: ConnectData, conn: DbConn, ip: ClientIp) -> JsonResult
|
||||||
Ok(Json(result))
|
Ok(Json(result))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_device(data: &ConnectData, conn: &DbConn, user: &User, ip: &ClientIp) -> Result<Device, crate::error::Error> {
|
||||||
|
// On iOS, device_type sends "iOS", on others it sends a number
|
||||||
|
let device_type = util::try_parse_string(data.device_type.as_ref()).unwrap_or(0);
|
||||||
|
let device_id = data.device_identifier.clone().expect("No device id provided");
|
||||||
|
let device_name = data.device_name.clone().expect("No device name provided");
|
||||||
|
|
||||||
|
let mut new_device = false;
|
||||||
|
// Find device or create new
|
||||||
|
let device = match Device::find_by_uuid(&device_id, &conn) {
|
||||||
|
Some(device) => {
|
||||||
|
// Check if owned device, and recreate if not
|
||||||
|
if device.user_uuid != user.uuid {
|
||||||
|
info!("Device exists but is owned by another user. The old device will be discarded");
|
||||||
|
new_device = true;
|
||||||
|
Device::new(device_id, user.uuid.clone(), device_name, device_type)
|
||||||
|
} else {
|
||||||
|
device
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
new_device = true;
|
||||||
|
Device::new(device_id, user.uuid.clone(), device_name, device_type)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if CONFIG.mail_enabled() && new_device {
|
||||||
|
mail::send_new_device_logged_in(&user.email, &ip.ip.to_string(), &device.updated_at, &device.name)?
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(device)
|
||||||
|
}
|
||||||
|
|
||||||
fn twofactor_auth(
|
fn twofactor_auth(
|
||||||
user_uuid: &str,
|
user_uuid: &str,
|
||||||
data: &ConnectData,
|
data: &ConnectData,
|
||||||
|
|
|
@ -137,12 +137,7 @@ pub fn send_invite_confirmed(address: &str, org_name: &str) -> EmptyResult {
|
||||||
send_email(&address, &subject, &body_html, &body_text)
|
send_email(&address, &subject, &body_html, &body_text)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_new_device_logged_in(
|
pub fn send_new_device_logged_in(address: &str, ip: &str, dt: &NaiveDateTime, device: &str) -> EmptyResult {
|
||||||
address: &str,
|
|
||||||
ip: &str,
|
|
||||||
dt: &NaiveDateTime,
|
|
||||||
device: &str,
|
|
||||||
) -> EmptyResult {
|
|
||||||
use crate::util::upcase_first;
|
use crate::util::upcase_first;
|
||||||
let device = upcase_first(device);
|
let device = upcase_first(device);
|
||||||
|
|
||||||
|
|
Laden …
In neuem Issue referenzieren