Changeset View
Changeset View
Standalone View
Standalone View
services/identity/src/client_service.rs
Show First 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
#[derive(Clone)] | #[derive(Clone)] | ||||
pub struct FlattenedDeviceKeyUpload { | pub struct FlattenedDeviceKeyUpload { | ||||
pub device_id_key: String, | pub device_id_key: String, | ||||
pub key_payload: String, | pub key_payload: String, | ||||
pub key_payload_signature: String, | pub key_payload_signature: String, | ||||
pub content_prekey: String, | pub content_prekey: String, | ||||
pub content_prekey_signature: String, | pub content_prekey_signature: String, | ||||
pub content_onetime_keys: Vec<String>, | pub content_one_time_keys: Vec<String>, | ||||
pub notif_prekey: String, | pub notif_prekey: String, | ||||
pub notif_prekey_signature: String, | pub notif_prekey_signature: String, | ||||
pub notif_onetime_keys: Vec<String>, | pub notif_one_time_keys: Vec<String>, | ||||
pub device_type: database::Device, | pub device_type: database::Device, | ||||
} | } | ||||
#[derive(derive_more::Constructor)] | #[derive(derive_more::Constructor)] | ||||
pub struct ClientService { | pub struct ClientService { | ||||
client: DatabaseClient, | client: DatabaseClient, | ||||
cache: Cache<String, WorkflowInProgress>, | cache: Cache<String, WorkflowInProgress>, | ||||
} | } | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | if let client_proto::RegistrationStartRequest { | ||||
pre_key: content_prekey, | pre_key: content_prekey, | ||||
pre_key_signature: content_prekey_signature, | pre_key_signature: content_prekey_signature, | ||||
}), | }), | ||||
notif_upload: | notif_upload: | ||||
Some(client_proto::PreKey { | Some(client_proto::PreKey { | ||||
pre_key: notif_prekey, | pre_key: notif_prekey, | ||||
pre_key_signature: notif_prekey_signature, | pre_key_signature: notif_prekey_signature, | ||||
}), | }), | ||||
onetime_content_prekeys, | one_time_content_prekeys, | ||||
onetime_notif_prekeys, | one_time_notif_prekeys, | ||||
device_type, | device_type, | ||||
}), | }), | ||||
} = message | } = message | ||||
{ | { | ||||
let server_registration = comm_opaque2::server::Registration::new(); | let server_registration = comm_opaque2::server::Registration::new(); | ||||
let server_message = server_registration | let server_message = server_registration | ||||
.start(&CONFIG.server_setup, ®ister_message, username.as_bytes()) | .start(&CONFIG.server_setup, ®ister_message, username.as_bytes()) | ||||
.map_err(protocol_error_to_grpc_status)?; | .map_err(protocol_error_to_grpc_status)?; | ||||
let key_info = KeyPayload::from_str(&payload) | let key_info = KeyPayload::from_str(&payload) | ||||
.map_err(|_| tonic::Status::invalid_argument("malformed payload"))?; | .map_err(|_| tonic::Status::invalid_argument("malformed payload"))?; | ||||
let registration_state = UserRegistrationInfo { | let registration_state = UserRegistrationInfo { | ||||
username, | username, | ||||
flattened_device_key_upload: FlattenedDeviceKeyUpload { | flattened_device_key_upload: FlattenedDeviceKeyUpload { | ||||
device_id_key: key_info.primary_identity_public_keys.ed25519, | device_id_key: key_info.primary_identity_public_keys.ed25519, | ||||
key_payload: payload, | key_payload: payload, | ||||
key_payload_signature: payload_signature, | key_payload_signature: payload_signature, | ||||
content_prekey, | content_prekey, | ||||
content_prekey_signature, | content_prekey_signature, | ||||
content_onetime_keys: onetime_content_prekeys, | content_one_time_keys: one_time_content_prekeys, | ||||
notif_prekey, | notif_prekey, | ||||
notif_prekey_signature, | notif_prekey_signature, | ||||
notif_onetime_keys: onetime_notif_prekeys, | notif_one_time_keys: one_time_notif_prekeys, | ||||
device_type: Device::try_from(device_type) | device_type: Device::try_from(device_type) | ||||
.map_err(handle_db_error)?, | .map_err(handle_db_error)?, | ||||
}, | }, | ||||
}; | }; | ||||
let session_id = generate_uuid(); | let session_id = generate_uuid(); | ||||
self | self | ||||
.cache | .cache | ||||
.insert( | .insert( | ||||
▲ Show 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | if let client_proto::ReservedRegistrationStartRequest { | ||||
pre_key: content_prekey, | pre_key: content_prekey, | ||||
pre_key_signature: content_prekey_signature, | pre_key_signature: content_prekey_signature, | ||||
}), | }), | ||||
notif_upload: | notif_upload: | ||||
Some(client_proto::PreKey { | Some(client_proto::PreKey { | ||||
pre_key: notif_prekey, | pre_key: notif_prekey, | ||||
pre_key_signature: notif_prekey_signature, | pre_key_signature: notif_prekey_signature, | ||||
}), | }), | ||||
onetime_content_prekeys, | one_time_content_prekeys, | ||||
onetime_notif_prekeys, | one_time_notif_prekeys, | ||||
device_type, | device_type, | ||||
}), | }), | ||||
.. | .. | ||||
} = message | } = message | ||||
{ | { | ||||
let server_registration = comm_opaque2::server::Registration::new(); | let server_registration = comm_opaque2::server::Registration::new(); | ||||
let server_message = server_registration | let server_message = server_registration | ||||
.start(&CONFIG.server_setup, ®ister_message, username.as_bytes()) | .start(&CONFIG.server_setup, ®ister_message, username.as_bytes()) | ||||
.map_err(protocol_error_to_grpc_status)?; | .map_err(protocol_error_to_grpc_status)?; | ||||
let key_info = KeyPayload::from_str(&payload) | let key_info = KeyPayload::from_str(&payload) | ||||
.map_err(|_| tonic::Status::invalid_argument("malformed payload"))?; | .map_err(|_| tonic::Status::invalid_argument("malformed payload"))?; | ||||
let registration_state = UserRegistrationInfo { | let registration_state = UserRegistrationInfo { | ||||
username, | username, | ||||
flattened_device_key_upload: FlattenedDeviceKeyUpload { | flattened_device_key_upload: FlattenedDeviceKeyUpload { | ||||
device_id_key: key_info.primary_identity_public_keys.ed25519, | device_id_key: key_info.primary_identity_public_keys.ed25519, | ||||
key_payload: payload, | key_payload: payload, | ||||
key_payload_signature: payload_signature, | key_payload_signature: payload_signature, | ||||
content_prekey, | content_prekey, | ||||
content_prekey_signature, | content_prekey_signature, | ||||
content_onetime_keys: onetime_content_prekeys, | content_one_time_keys: one_time_content_prekeys, | ||||
notif_prekey, | notif_prekey, | ||||
notif_prekey_signature, | notif_prekey_signature, | ||||
notif_onetime_keys: onetime_notif_prekeys, | notif_one_time_keys: one_time_notif_prekeys, | ||||
device_type: Device::try_from(device_type) | device_type: Device::try_from(device_type) | ||||
.map_err(handle_db_error)?, | .map_err(handle_db_error)?, | ||||
}, | }, | ||||
}; | }; | ||||
let session_id = generate_uuid(); | let session_id = generate_uuid(); | ||||
self | self | ||||
.cache | .cache | ||||
▲ Show 20 Lines • Show All 190 Lines • ▼ Show 20 Lines | if let client_proto::OpaqueLoginStartRequest { | ||||
pre_key: content_prekey, | pre_key: content_prekey, | ||||
pre_key_signature: content_prekey_signature, | pre_key_signature: content_prekey_signature, | ||||
}), | }), | ||||
notif_upload: | notif_upload: | ||||
Some(client_proto::PreKey { | Some(client_proto::PreKey { | ||||
pre_key: notif_prekey, | pre_key: notif_prekey, | ||||
pre_key_signature: notif_prekey_signature, | pre_key_signature: notif_prekey_signature, | ||||
}), | }), | ||||
onetime_content_prekeys, | one_time_content_prekeys, | ||||
onetime_notif_prekeys, | one_time_notif_prekeys, | ||||
device_type, | device_type, | ||||
}), | }), | ||||
} = message | } = message | ||||
{ | { | ||||
let mut server_login = comm_opaque2::server::Login::new(); | let mut server_login = comm_opaque2::server::Login::new(); | ||||
let server_response = server_login | let server_response = server_login | ||||
.start( | .start( | ||||
&CONFIG.server_setup, | &CONFIG.server_setup, | ||||
Show All 9 Lines | if let client_proto::OpaqueLoginStartRequest { | ||||
user_id, | user_id, | ||||
opaque_server_login: server_login, | opaque_server_login: server_login, | ||||
flattened_device_key_upload: FlattenedDeviceKeyUpload { | flattened_device_key_upload: FlattenedDeviceKeyUpload { | ||||
device_id_key: key_info.primary_identity_public_keys.ed25519, | device_id_key: key_info.primary_identity_public_keys.ed25519, | ||||
key_payload: payload, | key_payload: payload, | ||||
key_payload_signature: payload_signature, | key_payload_signature: payload_signature, | ||||
content_prekey, | content_prekey, | ||||
content_prekey_signature, | content_prekey_signature, | ||||
content_onetime_keys: onetime_content_prekeys, | content_one_time_keys: one_time_content_prekeys, | ||||
notif_prekey, | notif_prekey, | ||||
notif_prekey_signature, | notif_prekey_signature, | ||||
notif_onetime_keys: onetime_notif_prekeys, | notif_one_time_keys: one_time_notif_prekeys, | ||||
device_type: Device::try_from(device_type) | device_type: Device::try_from(device_type) | ||||
.map_err(handle_db_error)?, | .map_err(handle_db_error)?, | ||||
}, | }, | ||||
}; | }; | ||||
let session_id = generate_uuid(); | let session_id = generate_uuid(); | ||||
self | self | ||||
.cache | .cache | ||||
.insert( | .insert( | ||||
▲ Show 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | let (flattened_device_key_upload, social_proof) = | ||||
pre_key: content_prekey, | pre_key: content_prekey, | ||||
pre_key_signature: content_prekey_signature, | pre_key_signature: content_prekey_signature, | ||||
}), | }), | ||||
notif_upload: | notif_upload: | ||||
Some(client_proto::PreKey { | Some(client_proto::PreKey { | ||||
pre_key: notif_prekey, | pre_key: notif_prekey, | ||||
pre_key_signature: notif_prekey_signature, | pre_key_signature: notif_prekey_signature, | ||||
}), | }), | ||||
onetime_content_prekeys, | one_time_content_prekeys, | ||||
onetime_notif_prekeys, | one_time_notif_prekeys, | ||||
device_type, | device_type, | ||||
}), | }), | ||||
} = message | } = message | ||||
{ | { | ||||
let key_info = KeyPayload::from_str(&payload) | let key_info = KeyPayload::from_str(&payload) | ||||
.map_err(|_| tonic::Status::invalid_argument("malformed payload"))?; | .map_err(|_| tonic::Status::invalid_argument("malformed payload"))?; | ||||
( | ( | ||||
FlattenedDeviceKeyUpload { | FlattenedDeviceKeyUpload { | ||||
device_id_key: key_info.primary_identity_public_keys.ed25519, | device_id_key: key_info.primary_identity_public_keys.ed25519, | ||||
key_payload: payload, | key_payload: payload, | ||||
key_payload_signature: payload_signature, | key_payload_signature: payload_signature, | ||||
content_prekey, | content_prekey, | ||||
content_prekey_signature, | content_prekey_signature, | ||||
content_onetime_keys: onetime_content_prekeys, | content_one_time_keys: one_time_content_prekeys, | ||||
notif_prekey, | notif_prekey, | ||||
notif_prekey_signature, | notif_prekey_signature, | ||||
notif_onetime_keys: onetime_notif_prekeys, | notif_one_time_keys: one_time_notif_prekeys, | ||||
device_type: Device::try_from(device_type) | device_type: Device::try_from(device_type) | ||||
.map_err(handle_db_error)?, | .map_err(handle_db_error)?, | ||||
}, | }, | ||||
social_proof, | social_proof, | ||||
) | ) | ||||
} else { | } else { | ||||
return Err(tonic::Status::invalid_argument("unexpected message data")); | return Err(tonic::Status::invalid_argument("unexpected message data")); | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 287 Lines • Show Last 20 Lines |