Page MenuHomePhabricator

D12271.id40835.diff
No OneTemporary

D12271.id40835.diff

diff --git a/services/identity/src/client_service.rs b/services/identity/src/client_service.rs
--- a/services/identity/src/client_service.rs
+++ b/services/identity/src/client_service.rs
@@ -13,10 +13,7 @@
// Workspace crate imports
use crate::config::CONFIG;
-use crate::constants::{
- request_metadata,
- error_types
-};
+use crate::constants::error_types;
use crate::database::{
DBDeviceTypeInt, DatabaseClient, DeviceType, KeyPayload
};
@@ -34,7 +31,7 @@
VerifyUserAccessTokenResponse, WalletAuthRequest, GetFarcasterUsersRequest,
GetFarcasterUsersResponse
};
-use crate::grpc_services::shared::get_value;
+use crate::grpc_services::shared::get_platform_metadata;
use crate::grpc_utils::{
DeviceKeyUploadActions, RegistrationActions, SignedNonce
};
@@ -229,7 +226,7 @@
&self,
request: tonic::Request<RegistrationFinishRequest>,
) -> Result<tonic::Response<AuthResponse>, tonic::Status> {
- let code_version = get_code_version(&request);
+ let platform_metadata = get_platform_metadata(&request)?;
let message = request.into_inner();
if let Some(WorkflowInProgress::Registration(state)) = self
@@ -251,7 +248,7 @@
.add_password_user_to_users_table(
*state,
password_file,
- code_version,
+ platform_metadata,
login_time,
)
.await
@@ -371,7 +368,7 @@
&self,
request: tonic::Request<OpaqueLoginFinishRequest>,
) -> Result<tonic::Response<AuthResponse>, tonic::Status> {
- let code_version = get_code_version(&request);
+ let platform_metadata = get_platform_metadata(&request)?;
let message = request.into_inner();
if let Some(WorkflowInProgress::Login(state)) = self
@@ -399,7 +396,7 @@
.add_user_device(
state.user_id.clone(),
state.flattened_device_key_upload.clone(),
- code_version,
+ platform_metadata,
login_time,
)
.await
@@ -438,7 +435,7 @@
&self,
request: tonic::Request<WalletAuthRequest>,
) -> Result<tonic::Response<AuthResponse>, tonic::Status> {
- let code_version = get_code_version(&request);
+ let platform_metadata = get_platform_metadata(&request)?;
let message = request.into_inner();
// WalletAuthRequest is used for both log_in_wallet_user and register_wallet_user
@@ -492,7 +489,7 @@
.add_user_device(
user_id.clone(),
flattened_device_key_upload.clone(),
- code_version,
+ platform_metadata,
chrono::Utc::now(),
)
.await
@@ -528,7 +525,7 @@
&self,
request: tonic::Request<WalletAuthRequest>,
) -> Result<tonic::Response<AuthResponse>, tonic::Status> {
- let code_version = get_code_version(&request);
+ let platform_metadata = get_platform_metadata(&request)?;
let message = request.into_inner();
let parsed_message = parse_and_verify_siwe_message(
@@ -590,7 +587,7 @@
wallet_address.clone(),
social_proof,
None,
- code_version,
+ platform_metadata,
login_time,
message.farcaster_id,
initial_device_list,
@@ -628,7 +625,7 @@
&self,
request: tonic::Request<ReservedWalletRegistrationRequest>,
) -> Result<tonic::Response<AuthResponse>, tonic::Status> {
- let code_version = get_code_version(&request);
+ let platform_metadata = get_platform_metadata(&request)?;
let message = request.into_inner();
let parsed_message = parse_and_verify_siwe_message(
@@ -674,7 +671,7 @@
wallet_address.clone(),
social_proof,
Some(user_id.clone()),
- code_version,
+ platform_metadata,
login_time,
None,
initial_device_list,
@@ -712,7 +709,7 @@
&self,
request: tonic::Request<SecondaryDeviceKeysUploadRequest>,
) -> Result<tonic::Response<AuthResponse>, tonic::Status> {
- let code_version = get_code_version(&request);
+ let platform_metadata = get_platform_metadata(&request)?;
let message = request.into_inner();
let challenge_response = SignedNonce::try_from(&message)?;
@@ -770,7 +767,7 @@
.put_device_data(
&user_id,
flattened_device_key_upload,
- code_version,
+ platform_metadata,
login_time,
)
.await
@@ -1196,15 +1193,3 @@
Ok(flattened_device_key_upload)
}
-
-fn get_code_version<T: std::fmt::Debug>(req: &tonic::Request<T>) -> u64 {
- get_value(req, request_metadata::CODE_VERSION)
- .and_then(|version| version.parse().ok())
- .unwrap_or_else(|| {
- warn!(
- "Could not retrieve code version from request: {:?}. Defaulting to 0",
- req
- );
- Default::default()
- })
-}
diff --git a/services/identity/src/database.rs b/services/identity/src/database.rs
--- a/services/identity/src/database.rs
+++ b/services/identity/src/database.rs
@@ -21,6 +21,7 @@
constants::{error_types, USERS_TABLE_SOCIAL_PROOF_ATTRIBUTE_NAME},
ddb_utils::EthereumIdentity,
device_list::SignedDeviceList,
+ grpc_services::shared::PlatformMetadata,
reserved_users::UserDetail,
siwe::SocialProof,
};
@@ -158,7 +159,7 @@
&self,
registration_state: UserRegistrationInfo,
password_file: Vec<u8>,
- code_version: u64,
+ platform_details: PlatformMetadata,
access_token_creation_time: DateTime<Utc>,
) -> Result<String, Error> {
let device_key_upload = registration_state.flattened_device_key_upload;
@@ -179,7 +180,7 @@
.register_primary_device(
&user_id,
device_key_upload.clone(),
- code_version,
+ platform_details,
access_token_creation_time,
initial_device_list,
)
@@ -189,7 +190,7 @@
.add_device(
&user_id,
device_key_upload.clone(),
- code_version,
+ platform_details,
access_token_creation_time,
)
.await?;
@@ -214,7 +215,7 @@
wallet_address: String,
social_proof: SocialProof,
user_id: Option<String>,
- code_version: u64,
+ platform_metadata: PlatformMetadata,
access_token_creation_time: DateTime<Utc>,
farcaster_id: Option<String>,
initial_device_list: Option<SignedDeviceList>,
@@ -240,7 +241,7 @@
.register_primary_device(
&user_id,
flattened_device_key_upload.clone(),
- code_version,
+ platform_metadata,
access_token_creation_time,
initial_device_list,
)
@@ -250,7 +251,7 @@
.add_device(
&user_id,
flattened_device_key_upload.clone(),
- code_version,
+ platform_metadata,
access_token_creation_time,
)
.await?;
@@ -329,7 +330,7 @@
&self,
user_id: String,
flattened_device_key_upload: FlattenedDeviceKeyUpload,
- code_version: u64,
+ platform_metadata: PlatformMetadata,
access_token_creation_time: DateTime<Utc>,
) -> Result<(), Error> {
let content_one_time_keys =
@@ -359,7 +360,7 @@
.add_device(
&user_id,
flattened_device_key_upload,
- code_version,
+ platform_metadata,
access_token_creation_time,
)
.await?;
diff --git a/services/identity/src/database/device_list.rs b/services/identity/src/database/device_list.rs
--- a/services/identity/src/database/device_list.rs
+++ b/services/identity/src/database/device_list.rs
@@ -24,7 +24,10 @@
USERS_TABLE_PARTITION_KEY,
},
error::{DeviceListError, Error},
- grpc_services::protos::{self, unauth::DeviceType},
+ grpc_services::{
+ protos::{self, unauth::DeviceType},
+ shared::PlatformMetadata,
+ },
grpc_utils::DeviceKeysInfo,
olm::is_valid_olm_key,
};
@@ -98,7 +101,7 @@
pub fn from_device_key_upload(
user_id: impl Into<String>,
upload: FlattenedDeviceKeyUpload,
- code_version: u64,
+ platform_metadata: PlatformMetadata,
login_time: DateTime<Utc>,
) -> Result<Self, Error> {
if !is_valid_olm_key(&upload.content_prekey)
@@ -110,8 +113,10 @@
);
return Err(Error::InvalidFormat);
}
- let device_type = DeviceType::from_str_name(upload.device_type.as_str_name())
+ let key_upload_device_type = DeviceType::from_str_name(upload.device_type.as_str_name())
.expect("DeviceType conversion failed. Identity client and server protos mismatch");
+ let platform_details =
+ PlatformDetails::new(platform_metadata, Some(key_upload_device_type))?;
let device_row = Self {
user_id: user_id.into(),
@@ -128,12 +133,7 @@
prekey: upload.notif_prekey,
prekey_signature: upload.notif_prekey_signature,
},
- platform_details: PlatformDetails {
- device_type,
- code_version,
- state_version: None,
- major_desktop_version: None,
- },
+ platform_details,
login_time,
};
Ok(device_row)
@@ -178,6 +178,48 @@
}
}
+impl PlatformDetails {
+ pub fn new(
+ metadata: PlatformMetadata,
+ key_upload_device_type: Option<DeviceType>,
+ ) -> Result<Self, Error> {
+ let PlatformMetadata { device_type, .. } = metadata;
+
+ let metadata_device_type =
+ DeviceType::from_str_name(&device_type.to_uppercase());
+
+ let device_type = match (metadata_device_type, key_upload_device_type) {
+ (Some(metadata_value), None) => metadata_value,
+ (Some(metadata_value), Some(key_upload_value)) => {
+ if metadata_value != key_upload_value {
+ warn!(
+ "DeviceKeyUplaod device type ({}) mismatches request metadata platform ({}). {}",
+ "Prefering value from key uplaod.",
+ key_upload_value.as_str_name(),
+ metadata_value.as_str_name()
+ );
+ }
+ key_upload_value
+ }
+ (None, Some(key_upload_value)) => key_upload_value,
+ (None, None) => {
+ warn!(
+ "Received invalid device_type in request metadata: {}",
+ device_type
+ );
+ return Err(Error::InvalidFormat);
+ }
+ };
+
+ Ok(Self {
+ device_type,
+ code_version: metadata.code_version,
+ state_version: metadata.state_version,
+ major_desktop_version: metadata.major_desktop_version,
+ })
+ }
+}
+
// helper structs for converting to/from attribute values for sort key (a.k.a itemID)
pub struct DeviceIDAttribute(pub String);
struct DeviceListKeyAttribute(DateTime<Utc>);
@@ -892,7 +934,7 @@
&self,
user_id: impl Into<String>,
device_key_upload: FlattenedDeviceKeyUpload,
- code_version: u64,
+ platform_metadata: PlatformMetadata,
login_time: DateTime<Utc>,
) -> Result<(), Error> {
let content_one_time_keys = device_key_upload.content_one_time_keys.clone();
@@ -901,7 +943,7 @@
let new_device = DeviceRow::from_device_key_upload(
user_id_string.clone(),
device_key_upload,
- code_version,
+ platform_metadata,
login_time,
)?;
let device_id = new_device.device_id.clone();
@@ -969,7 +1011,7 @@
&self,
user_id: impl Into<String>,
device_key_upload: FlattenedDeviceKeyUpload,
- code_version: u64,
+ platform_metadata: PlatformMetadata,
login_time: DateTime<Utc>,
initial_device_list: DeviceListUpdate,
) -> Result<(), Error> {
@@ -991,7 +1033,7 @@
let primary_device = DeviceRow::from_device_key_upload(
&user_id,
device_key_upload,
- code_version,
+ platform_metadata,
login_time,
)?;
@@ -1024,7 +1066,7 @@
&self,
user_id: impl Into<String>,
device_key_upload: FlattenedDeviceKeyUpload,
- code_version: u64,
+ platform_metadata: PlatformMetadata,
login_time: DateTime<Utc>,
) -> Result<(), Error> {
let user_id: String = user_id.into();
@@ -1033,7 +1075,7 @@
let new_device = DeviceRow::from_device_key_upload(
&user_id,
device_key_upload,
- code_version,
+ platform_metadata,
login_time,
)?;

File Metadata

Mime Type
text/plain
Expires
Sun, Oct 6, 4:28 PM (20 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2250269
Default Alt Text
D12271.id40835.diff (11 KB)

Event Timeline