From c98ec2d55d778e2476a58eb9e99bde27e30b5eb6 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Sun, 28 Jun 2026 11:41:51 +0200 Subject: [PATCH] cargo fmt + clippy --- crates/proton-drive-sdk/src/client.rs | 58 ++++++++++---------- crates/proton-drive-sdk/src/crypto.rs | 4 +- crates/proton-drive-sdk/src/node.rs | 4 +- crates/proton-drive-sdk/tests/live_events.rs | 18 ++++-- crates/proton-sdk/src/crypto.rs | 10 ++-- crates/proton-sdk/src/crypto/content.rs | 6 +- crates/proton-sdk/src/crypto/encrypt.rs | 11 ++-- crates/proton-sdk/src/crypto/keys.rs | 2 +- crates/proton-sdk/src/crypto/srp.rs | 2 +- crates/proton-sdk/src/crypto/verify.rs | 2 +- crates/proton-sdk/src/http.rs | 24 ++++---- crates/proton-sdk/src/session.rs | 2 +- 12 files changed, 76 insertions(+), 67 deletions(-) diff --git a/crates/proton-drive-sdk/src/client.rs b/crates/proton-drive-sdk/src/client.rs index 23b6875..ef64c7e 100644 --- a/crates/proton-drive-sdk/src/client.rs +++ b/crates/proton-drive-sdk/src/client.rs @@ -4,8 +4,8 @@ use std::collections::HashMap; use std::io::{Cursor, Read}; use std::sync::Arc; -use base64::engine::general_purpose::STANDARD as BASE64; use base64::Engine; +use base64::engine::general_purpose::STANDARD as BASE64; use sha2::{Digest, Sha256}; use tokio::sync::Mutex; @@ -13,8 +13,8 @@ use proton_sdk::account::AccountClient; use proton_sdk::cache::{CacheRepository, InMemoryCacheRepository}; use proton_sdk::crypto::PrivateKey; use proton_sdk::crypto::{ - build_volume_creation_material, generate_node_hash_key, generate_node_key, - generate_node_key_aead, verify_detached, ContentKey, VerificationKeyRing, VerificationStatus, + ContentKey, VerificationKeyRing, VerificationStatus, build_volume_creation_material, + generate_node_hash_key, generate_node_key, generate_node_key_aead, verify_detached, }; use proton_sdk::error::{ProtonError, Result}; use proton_sdk::http::ApiHttpClient; @@ -2430,27 +2430,27 @@ impl ProtonDriveClient { // leaves the claimed metadata absent rather than failing the node. let mut claimed_size = None; let mut claimed_modification_time = None; - if let Some(rev) = file.active_revision.as_ref() { - if let Some(xattr) = rev.extended_attributes.as_deref() { - match decrypt_extended_attributes_verified( - &self.account, - &decrypted.node_key, - rev.signature_email.as_deref(), - xattr, - ) - .await - { - Ok((attrs, status)) => { - verification.extended_attributes = Some(status); - if let Some(common) = attrs.common { - claimed_size = common.size; - claimed_modification_time = common.modification_time; - } - } - Err(e) => { - tracing::warn!(link_id = %link.id, error = %e, "failed to decrypt extended attributes"); + if let Some(rev) = file.active_revision.as_ref() + && let Some(xattr) = rev.extended_attributes.as_deref() + { + match decrypt_extended_attributes_verified( + &self.account, + &decrypted.node_key, + rev.signature_email.as_deref(), + xattr, + ) + .await + { + Ok((attrs, status)) => { + verification.extended_attributes = Some(status); + if let Some(common) = attrs.common { + claimed_size = common.size; + claimed_modification_time = common.modification_time; } } + Err(e) => { + tracing::warn!(link_id = %link.id, error = %e, "failed to decrypt extended attributes"); + } } } NodeKind::File { @@ -2520,10 +2520,10 @@ impl ProtonDriveClient { uid: &NodeUid, link: &LinkDto, ) -> Result> { - if let Some(info) = self.entities.try_get_node(uid).await? { - if !info.name_hash_digest.is_empty() { - return Ok(Some(info.name_hash_digest)); - } + if let Some(info) = self.entities.try_get_node(uid).await? + && !info.name_hash_digest.is_empty() + { + return Ok(Some(info.name_hash_digest)); } Ok(link.name_hash.clone()) } @@ -2768,7 +2768,7 @@ fn verification_token(code: &[u8], ciphertext: &[u8]) -> Vec { #[cfg(test)] mod tests { - use super::{alternate_names, epoch_to_iso8601, to_drive_event, DriveEvent}; + use super::{DriveEvent, alternate_names, epoch_to_iso8601, to_drive_event}; use crate::dtos::{VolumeEventDto, VolumeEventLinkDto}; use proton_sdk::ids::{DriveEventId, LinkId, VolumeId}; @@ -2866,7 +2866,7 @@ mod tests { #[test] fn photos_attributes_content_hash_and_tags() { - use super::{build_photos_attributes, hmac_sha256, BlockWriteResult}; + use super::{BlockWriteResult, build_photos_attributes, hmac_sha256}; use crate::photos::{PhotoTag, PhotoUploadMetadata}; use proton_sdk::ids::NodeUid; @@ -2902,7 +2902,7 @@ mod tests { #[test] fn photos_attributes_default_capture_time_and_empty_tags() { - use super::{build_photos_attributes, BlockWriteResult}; + use super::{BlockWriteResult, build_photos_attributes}; use crate::photos::PhotoUploadMetadata; let written = BlockWriteResult { diff --git a/crates/proton-drive-sdk/src/crypto.rs b/crates/proton-drive-sdk/src/crypto.rs index f64d820..826b364 100644 --- a/crates/proton-drive-sdk/src/crypto.rs +++ b/crates/proton-drive-sdk/src/crypto.rs @@ -6,8 +6,8 @@ use proton_sdk::account::AccountClient; use proton_sdk::crypto::{ - decrypt_armored_with_keys, verify_detached, ContentKey, PrivateKey, PublicKey, - VerificationKeyRing, VerificationStatus, + ContentKey, PrivateKey, PublicKey, VerificationKeyRing, VerificationStatus, + decrypt_armored_with_keys, verify_detached, }; use proton_sdk::error::{ProtonError, Result}; diff --git a/crates/proton-drive-sdk/src/node.rs b/crates/proton-drive-sdk/src/node.rs index 06b3ec0..4384ab9 100644 --- a/crates/proton-drive-sdk/src/node.rs +++ b/crates/proton-drive-sdk/src/node.rs @@ -65,8 +65,8 @@ impl NodeVerification { }; ok(self.name) && ok(self.passphrase) - && self.content_key.map_or(true, ok) - && self.extended_attributes.map_or(true, ok) + && self.content_key.is_none_or(ok) + && self.extended_attributes.is_none_or(ok) } } diff --git a/crates/proton-drive-sdk/tests/live_events.rs b/crates/proton-drive-sdk/tests/live_events.rs index 6d1ab45..d4e085b 100644 --- a/crates/proton-drive-sdk/tests/live_events.rs +++ b/crates/proton-drive-sdk/tests/live_events.rs @@ -184,9 +184,12 @@ async fn node_creation_surfaces_node_updated() { .await .expect("create folder"); - let found = poll_for(client, &scope, &cursor, |e| { - matches!(e, DriveEvent::NodeUpdated { node_uid, .. } if *node_uid == folder) - }) + let found = poll_for( + client, + &scope, + &cursor, + |e| matches!(e, DriveEvent::NodeUpdated { node_uid, .. } if *node_uid == folder), + ) .await; match found { @@ -282,9 +285,12 @@ async fn permanent_delete_surfaces_node_deleted() { .await .expect("delete folder"); - let found = poll_for(client, &scope, &cursor, |e| { - matches!(e, DriveEvent::NodeDeleted { node_uid, .. } if *node_uid == folder) - }) + let found = poll_for( + client, + &scope, + &cursor, + |e| matches!(e, DriveEvent::NodeDeleted { node_uid, .. } if *node_uid == folder), + ) .await; assert!( found.is_some(), diff --git a/crates/proton-sdk/src/crypto.rs b/crates/proton-sdk/src/crypto.rs index 2983c79..8c0c2e0 100644 --- a/crates/proton-sdk/src/crypto.rs +++ b/crates/proton-sdk/src/crypto.rs @@ -17,13 +17,13 @@ mod verify; pub use content::ContentKey; pub use derive::derive_key_passphrase; pub use encrypt::{ - build_volume_creation_material, generate_node_hash_key, generate_node_key, - generate_node_key_aead, GeneratedNodeKey, VolumeCreationMaterial, + GeneratedNodeKey, VolumeCreationMaterial, build_volume_creation_material, + generate_node_hash_key, generate_node_key, generate_node_key_aead, }; pub use errors::CryptoError; -pub use keys::{decrypt_armored_with_keys, PrivateKey}; -pub use srp::{generate_proofs, SrpProofs, DEFAULT_BIT_LENGTH}; -pub use verify::{verify_detached, PublicKey, VerificationKeyRing, VerificationStatus}; +pub use keys::{PrivateKey, decrypt_armored_with_keys}; +pub use srp::{DEFAULT_BIT_LENGTH, SrpProofs, generate_proofs}; +pub use verify::{PublicKey, VerificationKeyRing, VerificationStatus, verify_detached}; /// Result alias for crypto operations. pub type CryptoResult = std::result::Result; diff --git a/crates/proton-sdk/src/crypto/content.rs b/crates/proton-sdk/src/crypto/content.rs index fe6efe4..21fc13c 100644 --- a/crates/proton-sdk/src/crypto/content.rs +++ b/crates/proton-sdk/src/crypto/content.rs @@ -19,7 +19,7 @@ use pgp::packet::{ }; use pgp::types::{DecryptionKey, EncryptionKey, EskType, PkeskVersion, Seipdv1ReadMode}; -use super::encrypt::{recipient_encryption_key, RecipientOp}; +use super::encrypt::{RecipientOp, recipient_encryption_key}; use super::errors::CryptoError; use super::keys::PrivateKey; @@ -246,7 +246,7 @@ impl ContentKey { return Err(CryptoError::Parse(format!( "unexpected thumbnail payload packet: {:?}", other.tag() - ))) + ))); } } } @@ -276,7 +276,7 @@ impl ContentKey { return Err(CryptoError::Parse(format!( "unexpected block packet: {:?}", other.tag() - ))) + ))); } } }; diff --git a/crates/proton-sdk/src/crypto/encrypt.rs b/crates/proton-sdk/src/crypto/encrypt.rs index 92a20c2..00209ce 100644 --- a/crates/proton-sdk/src/crypto/encrypt.rs +++ b/crates/proton-sdk/src/crypto/encrypt.rs @@ -6,8 +6,8 @@ //! signing key with a separate encryption subkey, so recipient selection must //! pick the encryption-capable (sub)key. -use base64::engine::general_purpose::STANDARD as BASE64; use base64::Engine; +use base64::engine::general_purpose::STANDARD as BASE64; use bytes::Bytes; use pgp::composed::{ ArmorOptions, DetachedSignature, EncryptionCaps, KeyType, MessageBuilder, @@ -278,11 +278,10 @@ pub(crate) fn sign_detached(signer: &PrivateKey, data: &[u8]) -> Result