commit 60e39a9dd167959fdc6e474c4497853462d847f2
parent bc6a53b847a398191f221d8d98829d50b2505e53
Author: vpl <vpl@vpl.me>
Date: Mon, 22 Jul 2019 08:24:19 +0200
Move retrieve/new device from connData to separate function
Diffstat:
2 files changed, 34 insertions(+), 38 deletions(-)
diff --git a/src/api/identity.rs b/src/api/identity.rs
@@ -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 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 mut device = get_device(&data, &conn, &user, &ip)?;
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))
}
+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(
user_uuid: &str,
data: &ConnectData,
diff --git a/src/mail.rs b/src/mail.rs
@@ -137,12 +137,7 @@ pub fn send_invite_confirmed(address: &str, org_name: &str) -> EmptyResult {
send_email(&address, &subject, &body_html, &body_text)
}
-pub fn send_new_device_logged_in(
- address: &str,
- ip: &str,
- dt: &NaiveDateTime,
- device: &str,
-) -> EmptyResult {
+pub fn send_new_device_logged_in(address: &str, ip: &str, dt: &NaiveDateTime, device: &str) -> EmptyResult {
use crate::util::upcase_first;
let device = upcase_first(device);