|
|
@ -25,7 +25,7 @@ pub fn routes() -> Vec<Route> { |
|
|
#[serde(rename_all = "camelCase")] |
|
|
#[serde(rename_all = "camelCase")] |
|
|
struct SendEmailLoginData { |
|
|
struct SendEmailLoginData { |
|
|
#[serde(alias = "DeviceIdentifier")] |
|
|
#[serde(alias = "DeviceIdentifier")] |
|
|
device_identifier: DeviceId, |
|
|
device_identifier: Option<DeviceId>, |
|
|
#[serde(alias = "Email")] |
|
|
#[serde(alias = "Email")] |
|
|
email: Option<String>, |
|
|
email: Option<String>, |
|
|
#[serde(alias = "MasterPasswordHash")] |
|
|
#[serde(alias = "MasterPasswordHash")] |
|
|
@ -91,8 +91,11 @@ async fn send_email_login(data: Json<SendEmailLoginData>, client_headers: Client |
|
|
|
|
|
|
|
|
user |
|
|
user |
|
|
} else { |
|
|
} else { |
|
|
|
|
|
let Some(device_identifier) = &data.device_identifier else { |
|
|
|
|
|
err!("No device identifier has been submitted.") |
|
|
|
|
|
}; |
|
|
// SSO login only sends device id, so we get the user by the most recently used device
|
|
|
// SSO login only sends device id, so we get the user by the most recently used device
|
|
|
let Some(user) = User::find_by_device_for_email2fa(&data.device_identifier, &conn).await else { |
|
|
let Some(user) = User::find_by_device_for_email2fa(device_identifier, &conn).await else { |
|
|
err!("Username or password is incorrect. Try again.") |
|
|
err!("Username or password is incorrect. Try again.") |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|