mirror of
				https://github.com/dani-garcia/vaultwarden.git
				synced 2025-10-31 02:08:20 +02:00 
			
		
		
		
	Update Rust, Crates and Web-Vault (#5860)
- Updated web-vault to v2025.5.0 - Updated Rust to v1.87.0 - Updated all the crates - Replaced yubico with yubico_ng - Fixed several new (nightly) clippy lints Signed-off-by: BlackDex <black.dex@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							ad8484a2d5
						
					
				
				
					commit
					73f2441d1a
				
			| @@ -102,7 +102,7 @@ const ACTING_ADMIN_USER: &str = "vaultwarden-admin-00000-000000000000"; | ||||
| pub const FAKE_ADMIN_UUID: &str = "00000000-0000-0000-0000-000000000000"; | ||||
|  | ||||
| fn admin_path() -> String { | ||||
|     format!("{}{}", CONFIG.domain_path(), ADMIN_PATH) | ||||
|     format!("{}{ADMIN_PATH}", CONFIG.domain_path()) | ||||
| } | ||||
|  | ||||
| #[derive(Debug)] | ||||
| @@ -206,7 +206,7 @@ fn post_admin_login( | ||||
|  | ||||
|         cookies.add(cookie); | ||||
|         if let Some(redirect) = redirect { | ||||
|             Ok(Redirect::to(format!("{}{}", admin_path(), redirect))) | ||||
|             Ok(Redirect::to(format!("{}{redirect}", admin_path()))) | ||||
|         } else { | ||||
|             Err(AdminResponse::Ok(render_admin_page())) | ||||
|         } | ||||
| @@ -427,7 +427,7 @@ async fn deauth_user(user_id: UserId, _token: AdminToken, mut conn: DbConn, nt: | ||||
|         for device in Device::find_push_devices_by_user(&user.uuid, &mut conn).await { | ||||
|             match unregister_push_device(device.push_uuid).await { | ||||
|                 Ok(r) => r, | ||||
|                 Err(e) => error!("Unable to unregister devices from Bitwarden server: {}", e), | ||||
|                 Err(e) => error!("Unable to unregister devices from Bitwarden server: {e}"), | ||||
|             }; | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -301,11 +301,11 @@ pub async fn _register(data: Json<RegisterData>, email_verification: bool, mut c | ||||
|     if CONFIG.mail_enabled() { | ||||
|         if CONFIG.signups_verify() && !email_verified { | ||||
|             if let Err(e) = mail::send_welcome_must_verify(&user.email, &user.uuid).await { | ||||
|                 error!("Error sending welcome email: {:#?}", e); | ||||
|                 error!("Error sending welcome email: {e:#?}"); | ||||
|             } | ||||
|             user.last_verifying_at = Some(user.created_at); | ||||
|         } else if let Err(e) = mail::send_welcome(&user.email).await { | ||||
|             error!("Error sending welcome email: {:#?}", e); | ||||
|             error!("Error sending welcome email: {e:#?}"); | ||||
|         } | ||||
|  | ||||
|         if email_verified && is_email_2fa_required(data.organization_user_id, &mut conn).await { | ||||
| @@ -788,10 +788,10 @@ async fn post_email_token(data: Json<EmailTokenData>, headers: Headers, mut conn | ||||
|  | ||||
|     if CONFIG.mail_enabled() { | ||||
|         if let Err(e) = mail::send_change_email(&data.new_email, &token).await { | ||||
|             error!("Error sending change-email email: {:#?}", e); | ||||
|             error!("Error sending change-email email: {e:#?}"); | ||||
|         } | ||||
|     } else { | ||||
|         debug!("Email change request for user ({}) to email ({}) with token ({})", user.uuid, data.new_email, token); | ||||
|         debug!("Email change request for user ({}) to email ({}) with token ({token})", user.uuid, data.new_email); | ||||
|     } | ||||
|  | ||||
|     user.email_new = Some(data.new_email); | ||||
| @@ -873,7 +873,7 @@ async fn post_verify_email(headers: Headers) -> EmptyResult { | ||||
|     } | ||||
|  | ||||
|     if let Err(e) = mail::send_verify_email(&user.email, &user.uuid).await { | ||||
|         error!("Error sending verify_email email: {:#?}", e); | ||||
|         error!("Error sending verify_email email: {e:#?}"); | ||||
|     } | ||||
|  | ||||
|     Ok(()) | ||||
| @@ -904,7 +904,7 @@ async fn post_verify_email_token(data: Json<VerifyEmailTokenData>, mut conn: DbC | ||||
|     user.last_verifying_at = None; | ||||
|     user.login_verify_count = 0; | ||||
|     if let Err(e) = user.save(&mut conn).await { | ||||
|         error!("Error saving email verification: {:#?}", e); | ||||
|         error!("Error saving email verification: {e:#?}"); | ||||
|     } | ||||
|  | ||||
|     Ok(()) | ||||
| @@ -923,7 +923,7 @@ async fn post_delete_recover(data: Json<DeleteRecoverData>, mut conn: DbConn) -> | ||||
|     if CONFIG.mail_enabled() { | ||||
|         if let Some(user) = User::find_by_mail(&data.email, &mut conn).await { | ||||
|             if let Err(e) = mail::send_delete_account(&user.email, &user.uuid).await { | ||||
|                 error!("Error sending delete account email: {:#?}", e); | ||||
|                 error!("Error sending delete account email: {e:#?}"); | ||||
|             } | ||||
|         } | ||||
|         Ok(()) | ||||
| @@ -1202,7 +1202,7 @@ async fn put_device_token( | ||||
|     if device.is_registered() { | ||||
|         // check if the new token is the same as the registered token | ||||
|         if device.push_token.is_some() && device.push_token.unwrap() == token.clone() { | ||||
|             debug!("Device {} is already registered and token is the same", device_id); | ||||
|             debug!("Device {device_id} is already registered and token is the same"); | ||||
|             return Ok(()); | ||||
|         } else { | ||||
|             // Try to unregister already registered device | ||||
|   | ||||
| @@ -381,7 +381,7 @@ pub async fn update_cipher_from_data( | ||||
|         if let Some(dt) = data.last_known_revision_date { | ||||
|             match NaiveDateTime::parse_from_str(&dt, "%+") { | ||||
|                 // ISO 8601 format | ||||
|                 Err(err) => warn!("Error parsing LastKnownRevisionDate '{}': {}", dt, err), | ||||
|                 Err(err) => warn!("Error parsing LastKnownRevisionDate '{dt}': {err}"), | ||||
|                 Ok(dt) if cipher.updated_at.signed_duration_since(dt).num_seconds() > 1 => { | ||||
|                     err!("The client copy of this cipher is out of date. Resync the client and try again.") | ||||
|                 } | ||||
| @@ -1105,7 +1105,7 @@ async fn post_attachment_v2( | ||||
|         Attachment::new(attachment_id.clone(), cipher.uuid.clone(), data.file_name, file_size, Some(data.key)); | ||||
|     attachment.save(&mut conn).await.expect("Error saving attachment"); | ||||
|  | ||||
|     let url = format!("/ciphers/{}/attachment/{}", cipher.uuid, attachment_id); | ||||
|     let url = format!("/ciphers/{}/attachment/{attachment_id}", cipher.uuid); | ||||
|     let response_key = match data.admin_request { | ||||
|         Some(b) if b => "cipherMiniResponse", | ||||
|         _ => "cipherResponse", | ||||
|   | ||||
| @@ -227,7 +227,7 @@ async fn send_invite(data: Json<EmergencyAccessInviteData>, headers: Headers, mu | ||||
|     let (grantee_user, new_user) = match User::find_by_mail(&email, &mut conn).await { | ||||
|         None => { | ||||
|             if !CONFIG.invitations_allowed() { | ||||
|                 err!(format!("Grantee user does not exist: {}", &email)) | ||||
|                 err!(format!("Grantee user does not exist: {email}")) | ||||
|             } | ||||
|  | ||||
|             if !CONFIG.is_email_domain_allowed(&email) { | ||||
|   | ||||
| @@ -338,7 +338,7 @@ async fn post_send_file_v2(data: Json<SendData>, headers: Headers, mut conn: DbC | ||||
|     Ok(Json(json!({ | ||||
|         "fileUploadType": 0, // 0 == Direct | 1 == Azure | ||||
|         "object": "send-fileUpload", | ||||
|         "url": format!("/sends/{}/file/{}", send.uuid, file_id), | ||||
|         "url": format!("/sends/{}/file/{file_id}", send.uuid), | ||||
|         "sendResponse": send.to_json() | ||||
|     }))) | ||||
| } | ||||
| @@ -556,7 +556,7 @@ async fn post_access_file( | ||||
|     Ok(Json(json!({ | ||||
|         "object": "send-fileDownload", | ||||
|         "id": file_id, | ||||
|         "url": format!("{}/api/sends/{}/{}?t={}", &host.host, send_id, file_id, token) | ||||
|         "url": format!("{}/api/sends/{send_id}/{file_id}?t={token}", &host.host) | ||||
|     }))) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -148,7 +148,7 @@ pub async fn validate_totp_code( | ||||
|         if generated == totp_code && time_step > twofactor.last_used { | ||||
|             // If the step does not equals 0 the time is drifted either server or client side. | ||||
|             if step != 0 { | ||||
|                 warn!("TOTP Time drift detected. The step offset is {}", step); | ||||
|                 warn!("TOTP Time drift detected. The step offset is {step}"); | ||||
|             } | ||||
|  | ||||
|             // Save the last used time step so only totp time steps higher then this one are allowed. | ||||
| @@ -157,7 +157,7 @@ pub async fn validate_totp_code( | ||||
|             twofactor.save(conn).await?; | ||||
|             return Ok(()); | ||||
|         } else if generated == totp_code && time_step <= twofactor.last_used { | ||||
|             warn!("This TOTP or a TOTP code within {} steps back or forward has already been used!", steps); | ||||
|             warn!("This TOTP or a TOTP code within {steps} steps back or forward has already been used!"); | ||||
|             err!( | ||||
|                 format!("Invalid TOTP code! Server time: {} IP: {}", current_time.format("%F %T UTC"), ip.ip), | ||||
|                 ErrorEvent { | ||||
|   | ||||
| @@ -202,7 +202,7 @@ async fn duo_api_request(method: &str, path: &str, params: &str, data: &DuoData) | ||||
|     use std::str::FromStr; | ||||
|  | ||||
|     // https://duo.com/docs/authapi#api-details | ||||
|     let url = format!("https://{}{}", &data.host, path); | ||||
|     let url = format!("https://{}{path}", &data.host); | ||||
|     let date = Utc::now().to_rfc2822(); | ||||
|     let username = &data.ik; | ||||
|     let fields = [&date, method, &data.host, path, params]; | ||||
| @@ -274,9 +274,9 @@ pub async fn generate_duo_signature(email: &str, conn: &mut DbConn) -> ApiResult | ||||
|  | ||||
| fn sign_duo_values(key: &str, email: &str, ikey: &str, prefix: &str, expire: i64) -> String { | ||||
|     let val = format!("{email}|{ikey}|{expire}"); | ||||
|     let cookie = format!("{}|{}", prefix, BASE64.encode(val.as_bytes())); | ||||
|     let cookie = format!("{prefix}|{}", BASE64.encode(val.as_bytes())); | ||||
|  | ||||
|     format!("{}|{}", cookie, crypto::hmac_sign(key, &cookie)) | ||||
|     format!("{cookie}|{}", crypto::hmac_sign(key, &cookie)) | ||||
| } | ||||
|  | ||||
| pub async fn validate_duo_login(email: &str, response: &str, conn: &mut DbConn) -> EmptyResult { | ||||
|   | ||||
| @@ -182,7 +182,7 @@ impl DuoClient { | ||||
|             HealthCheckResponse::HealthFail { | ||||
|                 message, | ||||
|                 message_detail, | ||||
|             } => err!(format!("Duo health check FAIL response, msg: {}, detail: {}", message, message_detail)), | ||||
|             } => err!(format!("Duo health check FAIL response, msg: {message}, detail: {message_detail}")), | ||||
|         }; | ||||
|  | ||||
|         if health_stat != "OK" { | ||||
| @@ -275,7 +275,7 @@ impl DuoClient { | ||||
|  | ||||
|         let status_code = res.status(); | ||||
|         if status_code != StatusCode::OK { | ||||
|             err!(format!("Failure response from Duo: {}", status_code)) | ||||
|             err!(format!("Failure response from Duo: {status_code}")) | ||||
|         } | ||||
|  | ||||
|         let response: IdTokenResponse = match res.json::<IdTokenResponse>().await { | ||||
| @@ -478,7 +478,7 @@ pub async fn validate_duo_login( | ||||
|         Err(e) => return Err(e), | ||||
|     }; | ||||
|  | ||||
|     let d: Digest = digest(&SHA512_256, format!("{}{}", ctx.nonce, device_identifier).as_bytes()); | ||||
|     let d: Digest = digest(&SHA512_256, format!("{}{device_identifier}", ctx.nonce).as_bytes()); | ||||
|     let hash: String = HEXLOWER.encode(d.as_ref()); | ||||
|  | ||||
|     match client.exchange_authz_code_for_result(code, email, hash.as_str()).await { | ||||
|   | ||||
| @@ -210,7 +210,7 @@ pub async fn validate_email_code_str( | ||||
|         .map_res("Two factor not found")?; | ||||
|     let Some(issued_token) = &email_data.last_token else { | ||||
|         err!( | ||||
|             format!("No token available! IP: {}", ip), | ||||
|             format!("No token available! IP: {ip}"), | ||||
|             ErrorEvent { | ||||
|                 event: EventType::UserFailedLogIn2fa | ||||
|             } | ||||
| @@ -226,7 +226,7 @@ pub async fn validate_email_code_str( | ||||
|         twofactor.save(conn).await?; | ||||
|  | ||||
|         err!( | ||||
|             format!("Token is invalid! IP: {}", ip), | ||||
|             format!("Token is invalid! IP: {ip}"), | ||||
|             ErrorEvent { | ||||
|                 event: EventType::UserFailedLogIn2fa | ||||
|             } | ||||
| @@ -329,7 +329,7 @@ pub fn obscure_email(email: &str) -> String { | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     format!("{}@{}", new_name, &domain) | ||||
|     format!("{new_name}@{domain}") | ||||
| } | ||||
|  | ||||
| pub async fn find_and_activate_email_2fa(user_id: &UserId, conn: &mut DbConn) -> EmptyResult { | ||||
|   | ||||
| @@ -69,12 +69,12 @@ static ICON_SIZE_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r"(?x)(\d+)\D*(\d+ | ||||
| #[get("/<domain>/icon.png")] | ||||
| fn icon_external(domain: &str) -> Option<Redirect> { | ||||
|     if !is_valid_domain(domain) { | ||||
|         warn!("Invalid domain: {}", domain); | ||||
|         warn!("Invalid domain: {domain}"); | ||||
|         return None; | ||||
|     } | ||||
|  | ||||
|     if should_block_address(domain) { | ||||
|         warn!("Blocked address: {}", domain); | ||||
|         warn!("Blocked address: {domain}"); | ||||
|         return None; | ||||
|     } | ||||
|  | ||||
| @@ -96,7 +96,7 @@ async fn icon_internal(domain: &str) -> Cached<(ContentType, Vec<u8>)> { | ||||
|     const FALLBACK_ICON: &[u8] = include_bytes!("../static/images/fallback-icon.png"); | ||||
|  | ||||
|     if !is_valid_domain(domain) { | ||||
|         warn!("Invalid domain: {}", domain); | ||||
|         warn!("Invalid domain: {domain}"); | ||||
|         return Cached::ttl( | ||||
|             (ContentType::new("image", "png"), FALLBACK_ICON.to_vec()), | ||||
|             CONFIG.icon_cache_negttl(), | ||||
| @@ -105,7 +105,7 @@ async fn icon_internal(domain: &str) -> Cached<(ContentType, Vec<u8>)> { | ||||
|     } | ||||
|  | ||||
|     if should_block_address(domain) { | ||||
|         warn!("Blocked address: {}", domain); | ||||
|         warn!("Blocked address: {domain}"); | ||||
|         return Cached::ttl( | ||||
|             (ContentType::new("image", "png"), FALLBACK_ICON.to_vec()), | ||||
|             CONFIG.icon_cache_negttl(), | ||||
| @@ -130,7 +130,7 @@ fn is_valid_domain(domain: &str) -> bool { | ||||
|  | ||||
|     // If parsing the domain fails using Url, it will not work with reqwest. | ||||
|     if let Err(parse_error) = url::Url::parse(format!("https://{domain}").as_str()) { | ||||
|         debug!("Domain parse error: '{}' - {:?}", domain, parse_error); | ||||
|         debug!("Domain parse error: '{domain}' - {parse_error:?}"); | ||||
|         return false; | ||||
|     } else if domain.is_empty() | ||||
|         || domain.contains("..") | ||||
| @@ -139,18 +139,17 @@ fn is_valid_domain(domain: &str) -> bool { | ||||
|         || domain.ends_with('-') | ||||
|     { | ||||
|         debug!( | ||||
|             "Domain validation error: '{}' is either empty, contains '..', starts with an '.', starts or ends with a '-'", | ||||
|             domain | ||||
|             "Domain validation error: '{domain}' is either empty, contains '..', starts with an '.', starts or ends with a '-'" | ||||
|         ); | ||||
|         return false; | ||||
|     } else if domain.len() > 255 { | ||||
|         debug!("Domain validation error: '{}' exceeds 255 characters", domain); | ||||
|         debug!("Domain validation error: '{domain}' exceeds 255 characters"); | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     for c in domain.chars() { | ||||
|         if !c.is_alphanumeric() && !ALLOWED_CHARS.contains(c) { | ||||
|             debug!("Domain validation error: '{}' contains an invalid character '{}'", domain, c); | ||||
|             debug!("Domain validation error: '{domain}' contains an invalid character '{c}'"); | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
| @@ -159,7 +158,7 @@ fn is_valid_domain(domain: &str) -> bool { | ||||
| } | ||||
|  | ||||
| async fn get_icon(domain: &str) -> Option<(Vec<u8>, String)> { | ||||
|     let path = format!("{}/{}.png", CONFIG.icon_cache_folder(), domain); | ||||
|     let path = format!("{}/{domain}.png", CONFIG.icon_cache_folder()); | ||||
|  | ||||
|     // Check for expiration of negatively cached copy | ||||
|     if icon_is_negcached(&path).await { | ||||
| @@ -167,10 +166,7 @@ async fn get_icon(domain: &str) -> Option<(Vec<u8>, String)> { | ||||
|     } | ||||
|  | ||||
|     if let Some(icon) = get_cached_icon(&path).await { | ||||
|         let icon_type = match get_icon_type(&icon) { | ||||
|             Some(x) => x, | ||||
|             _ => "x-icon", | ||||
|         }; | ||||
|         let icon_type = get_icon_type(&icon).unwrap_or("x-icon"); | ||||
|         return Some((icon, icon_type.to_string())); | ||||
|     } | ||||
|  | ||||
| @@ -192,7 +188,7 @@ async fn get_icon(domain: &str) -> Option<(Vec<u8>, String)> { | ||||
|                 return None; | ||||
|             } | ||||
|  | ||||
|             warn!("Unable to download icon: {:?}", e); | ||||
|             warn!("Unable to download icon: {e:?}"); | ||||
|             let miss_indicator = path + ".miss"; | ||||
|             save_icon(&miss_indicator, &[]).await; | ||||
|             None | ||||
| @@ -234,7 +230,7 @@ async fn icon_is_negcached(path: &str) -> bool { | ||||
|         // No longer negatively cached, drop the marker | ||||
|         Ok(true) => { | ||||
|             if let Err(e) = remove_file(&miss_indicator).await { | ||||
|                 error!("Could not remove negative cache indicator for icon {:?}: {:?}", path, e); | ||||
|                 error!("Could not remove negative cache indicator for icon {path:?}: {e:?}"); | ||||
|             } | ||||
|             false | ||||
|         } | ||||
| @@ -534,10 +530,10 @@ async fn download_icon(domain: &str) -> Result<(Bytes, Option<&str>), Error> { | ||||
|                         // Check if the icon type is allowed, else try an icon from the list. | ||||
|                         icon_type = get_icon_type(&body); | ||||
|                         if icon_type.is_none() { | ||||
|                             debug!("Icon from {} data:image uri, is not a valid image type", domain); | ||||
|                             debug!("Icon from {domain} data:image uri, is not a valid image type"); | ||||
|                             continue; | ||||
|                         } | ||||
|                         info!("Extracted icon from data:image uri for {}", domain); | ||||
|                         info!("Extracted icon from data:image uri for {domain}"); | ||||
|                         buffer = body.freeze(); | ||||
|                         break; | ||||
|                     } | ||||
| @@ -577,7 +573,7 @@ async fn save_icon(path: &str, icon: &[u8]) { | ||||
|             create_dir_all(&CONFIG.icon_cache_folder()).await.expect("Error creating icon cache folder"); | ||||
|         } | ||||
|         Err(e) => { | ||||
|             warn!("Unable to save icon: {:?}", e); | ||||
|             warn!("Unable to save icon: {e:?}"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -158,7 +158,7 @@ async fn _password_login( | ||||
|     // Get the user | ||||
|     let username = data.username.as_ref().unwrap().trim(); | ||||
|     let Some(mut user) = User::find_by_mail(username, conn).await else { | ||||
|         err!("Username or password is incorrect. Try again", format!("IP: {}. Username: {}.", ip.ip, username)) | ||||
|         err!("Username or password is incorrect. Try again", format!("IP: {}. Username: {username}.", ip.ip)) | ||||
|     }; | ||||
|  | ||||
|     // Set the user_id here to be passed back used for event logging. | ||||
| @@ -168,7 +168,7 @@ async fn _password_login( | ||||
|     if !user.enabled { | ||||
|         err!( | ||||
|             "This user has been disabled", | ||||
|             format!("IP: {}. Username: {}.", ip.ip, username), | ||||
|             format!("IP: {}. Username: {username}.", ip.ip), | ||||
|             ErrorEvent { | ||||
|                 event: EventType::UserFailedLogIn | ||||
|             } | ||||
| @@ -182,7 +182,7 @@ async fn _password_login( | ||||
|         let Some(auth_request) = AuthRequest::find_by_uuid_and_user(auth_request_id, &user.uuid, conn).await else { | ||||
|             err!( | ||||
|                 "Auth request not found. Try again.", | ||||
|                 format!("IP: {}. Username: {}.", ip.ip, username), | ||||
|                 format!("IP: {}. Username: {username}.", ip.ip), | ||||
|                 ErrorEvent { | ||||
|                     event: EventType::UserFailedLogIn, | ||||
|                 } | ||||
| @@ -200,7 +200,7 @@ async fn _password_login( | ||||
|         { | ||||
|             err!( | ||||
|                 "Username or access code is incorrect. Try again", | ||||
|                 format!("IP: {}. Username: {}.", ip.ip, username), | ||||
|                 format!("IP: {}. Username: {username}.", ip.ip), | ||||
|                 ErrorEvent { | ||||
|                     event: EventType::UserFailedLogIn, | ||||
|                 } | ||||
| @@ -209,7 +209,7 @@ async fn _password_login( | ||||
|     } else if !user.check_valid_password(password) { | ||||
|         err!( | ||||
|             "Username or password is incorrect. Try again", | ||||
|             format!("IP: {}. Username: {}.", ip.ip, username), | ||||
|             format!("IP: {}. Username: {username}.", ip.ip), | ||||
|             ErrorEvent { | ||||
|                 event: EventType::UserFailedLogIn, | ||||
|             } | ||||
| @@ -222,7 +222,7 @@ async fn _password_login( | ||||
|         user.set_password(password, None, false, None); | ||||
|  | ||||
|         if let Err(e) = user.save(conn).await { | ||||
|             error!("Error updating user: {:#?}", e); | ||||
|             error!("Error updating user: {e:#?}"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -241,11 +241,11 @@ async fn _password_login( | ||||
|                 user.login_verify_count += 1; | ||||
|  | ||||
|                 if let Err(e) = user.save(conn).await { | ||||
|                     error!("Error updating user: {:#?}", e); | ||||
|                     error!("Error updating user: {e:#?}"); | ||||
|                 } | ||||
|  | ||||
|                 if let Err(e) = mail::send_verify_email(&user.email, &user.uuid).await { | ||||
|                     error!("Error auto-sending email verification email: {:#?}", e); | ||||
|                     error!("Error auto-sending email verification email: {e:#?}"); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -253,7 +253,7 @@ async fn _password_login( | ||||
|         // We still want the login to fail until they actually verified the email address | ||||
|         err!( | ||||
|             "Please verify your email before trying again.", | ||||
|             format!("IP: {}. Username: {}.", ip.ip, username), | ||||
|             format!("IP: {}. Username: {username}.", ip.ip), | ||||
|             ErrorEvent { | ||||
|                 event: EventType::UserFailedLogIn | ||||
|             } | ||||
| @@ -266,7 +266,7 @@ async fn _password_login( | ||||
|  | ||||
|     if CONFIG.mail_enabled() && new_device { | ||||
|         if let Err(e) = mail::send_new_device_logged_in(&user.email, &ip.ip.to_string(), &now, &device).await { | ||||
|             error!("Error sending new device email: {:#?}", e); | ||||
|             error!("Error sending new device email: {e:#?}"); | ||||
|  | ||||
|             if CONFIG.require_device_email() { | ||||
|                 err!( | ||||
| @@ -352,7 +352,7 @@ async fn _password_login( | ||||
|         result["TwoFactorToken"] = Value::String(token); | ||||
|     } | ||||
|  | ||||
|     info!("User {} logged in successfully. IP: {}", username, ip.ip); | ||||
|     info!("User {username} logged in successfully. IP: {}", ip.ip); | ||||
|     Ok(Json(result)) | ||||
| } | ||||
|  | ||||
| @@ -420,7 +420,7 @@ async fn _user_api_key_login( | ||||
|     if CONFIG.mail_enabled() && new_device { | ||||
|         let now = Utc::now().naive_utc(); | ||||
|         if let Err(e) = mail::send_new_device_logged_in(&user.email, &ip.ip.to_string(), &now, &device).await { | ||||
|             error!("Error sending new device email: {:#?}", e); | ||||
|             error!("Error sending new device email: {e:#?}"); | ||||
|  | ||||
|             if CONFIG.require_device_email() { | ||||
|                 err!( | ||||
|   | ||||
| @@ -257,7 +257,7 @@ async fn send_to_push_relay(notification_data: Value) { | ||||
|     let auth_push_token = match get_auth_push_token().await { | ||||
|         Ok(s) => s, | ||||
|         Err(e) => { | ||||
|             debug!("Could not get the auth push token: {}", e); | ||||
|             debug!("Could not get the auth push token: {e}"); | ||||
|             return; | ||||
|         } | ||||
|     }; | ||||
| @@ -267,7 +267,7 @@ async fn send_to_push_relay(notification_data: Value) { | ||||
|     let req = match make_http_request(Method::POST, &(CONFIG.push_relay_uri() + "/push/send")) { | ||||
|         Ok(r) => r, | ||||
|         Err(e) => { | ||||
|             error!("An error occurred while sending a send update to the push relay: {}", e); | ||||
|             error!("An error occurred while sending a send update to the push relay: {e}"); | ||||
|             return; | ||||
|         } | ||||
|     }; | ||||
| @@ -280,7 +280,7 @@ async fn send_to_push_relay(notification_data: Value) { | ||||
|         .send() | ||||
|         .await | ||||
|     { | ||||
|         error!("An error occurred while sending a send update to the push relay: {}", e); | ||||
|         error!("An error occurred while sending a send update to the push relay: {e}"); | ||||
|     }; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user