From 20928c31bb94609306ac9628980325d96ec42934 Mon Sep 17 00:00:00 2001 From: SW van Heerden Date: Tue, 4 Jun 2024 19:23:27 +0200 Subject: [PATCH] revert address change --- base_layer/chat_ffi/chat.h | 19 +----- base_layer/chat_ffi/src/callback_handler.rs | 2 +- base_layer/chat_ffi/src/message.rs | 58 +++-------------- base_layer/chat_ffi/src/message_metadata.rs | 3 +- .../up.sql | 9 --- base_layer/contacts/proto/message.proto | 7 +-- .../contacts/src/chat_client/src/client.rs | 14 ++--- .../contacts/src/contacts_service/handle.rs | 5 +- .../contacts/src/contacts_service/service.rs | 6 +- .../storage/types/messages.rs | 62 +++---------------- .../src/contacts_service/types/message.rs | 9 +-- .../contacts_service/types/message_builder.rs | 13 +--- base_layer/contacts/src/schema.rs | 3 +- base_layer/contacts/tests/contacts_service.rs | 6 +- base_layer/wallet_ffi/src/lib.rs | 6 +- integration_tests/src/chat_ffi.rs | 13 +--- 16 files changed, 44 insertions(+), 191 deletions(-) delete mode 100644 base_layer/contacts/migrations/2024-05-27-145200_add_from_to_fields/up.sql diff --git a/base_layer/chat_ffi/chat.h b/base_layer/chat_ffi/chat.h index a98692ed7dc..2cff118243f 100644 --- a/base_layer/chat_ffi/chat.h +++ b/base_layer/chat_ffi/chat.h @@ -490,7 +490,6 @@ void destroy_conversationalists_vector(struct ConversationalistsVector *ptr); * The ```Message``` received should be destroyed after use */ struct Message *create_chat_message(struct TariAddress *receiver, - struct TariAddress *sender, const char *message, int *error_out); @@ -608,23 +607,7 @@ struct ChatByteVector *read_chat_message_body(struct Message *message, int *erro * `message` should be destroyed eventually * the returned `TariAddress` should be destroyed eventually */ -struct TariAddress *read_chat_message_sender_address(struct Message *message, int *error_out); - -/** - * Returns a pointer to a TariAddress - * - * ## Arguments - * `message` - A pointer to a Message - * `error_out` - Pointer to an int which will be modified - * - * ## Returns - * `*mut TariAddress` - A ptr to a TariAddress - * - * ## Safety - * `message` should be destroyed eventually - * the returned `TariAddress` should be destroyed eventually - */ -struct TariAddress *read_chat_message_receiver_address(struct Message *message, int *error_out); +struct TariAddress *read_chat_message_address(struct Message *message, int *error_out); /** * Returns a c_uchar representation of the Direction enum diff --git a/base_layer/chat_ffi/src/callback_handler.rs b/base_layer/chat_ffi/src/callback_handler.rs index 9b36f5bd5a8..1c1e0268dd9 100644 --- a/base_layer/chat_ffi/src/callback_handler.rs +++ b/base_layer/chat_ffi/src/callback_handler.rs @@ -134,7 +134,7 @@ impl CallbackHandler { debug!( target: LOG_TARGET, "Calling MessageReceived callback function for sender {}", - message.sender_address, + message.address, ); unsafe { diff --git a/base_layer/chat_ffi/src/message.rs b/base_layer/chat_ffi/src/message.rs index ed2f9fad8ee..815450331a8 100644 --- a/base_layer/chat_ffi/src/message.rs +++ b/base_layer/chat_ffi/src/message.rs @@ -50,7 +50,6 @@ use crate::{ #[no_mangle] pub unsafe extern "C" fn create_chat_message( receiver: *mut TariAddress, - sender: *mut TariAddress, message: *const c_char, error_out: *mut c_int, ) -> *mut Message { @@ -61,10 +60,6 @@ pub unsafe extern "C" fn create_chat_message( error = LibChatError::from(InterfaceError::NullError("receiver".to_string())).code; ptr::swap(error_out, &mut error as *mut c_int); } - if sender.is_null() { - error = LibChatError::from(InterfaceError::NullError("sender".to_string())).code; - ptr::swap(error_out, &mut error as *mut c_int); - } let message_str = match CStr::from_ptr(message).to_str() { Ok(str) => str.to_string(), @@ -76,8 +71,7 @@ pub unsafe extern "C" fn create_chat_message( }; let message_out = MessageBuilder::new() - .receiver_address((*receiver).clone()) - .sender_address((*sender).clone()) + .address((*receiver).clone()) .message(message_str) .build(); @@ -312,40 +306,7 @@ pub unsafe extern "C" fn read_chat_message_body(message: *mut Message, error_out /// `message` should be destroyed eventually /// the returned `TariAddress` should be destroyed eventually #[no_mangle] -pub unsafe extern "C" fn read_chat_message_sender_address( - message: *mut Message, - error_out: *mut c_int, -) -> *mut TariAddress { - let mut error = 0; - ptr::swap(error_out, &mut error as *mut c_int); - - if message.is_null() { - error = LibChatError::from(InterfaceError::NullError("message".to_string())).code; - ptr::swap(error_out, &mut error as *mut c_int); - return ptr::null_mut(); - } - - let address = (*message).sender_address.clone(); - Box::into_raw(Box::new(address)) -} - -/// Returns a pointer to a TariAddress -/// -/// ## Arguments -/// `message` - A pointer to a Message -/// `error_out` - Pointer to an int which will be modified -/// -/// ## Returns -/// `*mut TariAddress` - A ptr to a TariAddress -/// -/// ## Safety -/// `message` should be destroyed eventually -/// the returned `TariAddress` should be destroyed eventually -#[no_mangle] -pub unsafe extern "C" fn read_chat_message_receiver_address( - message: *mut Message, - error_out: *mut c_int, -) -> *mut TariAddress { +pub unsafe extern "C" fn read_chat_message_address(message: *mut Message, error_out: *mut c_int) -> *mut TariAddress { let mut error = 0; ptr::swap(error_out, &mut error as *mut c_int); @@ -355,7 +316,7 @@ pub unsafe extern "C" fn read_chat_message_receiver_address( return ptr::null_mut(); } - let address = (*message).receiver_address.clone(); + let address = (*message).address.clone(); Box::into_raw(Box::new(address)) } @@ -599,22 +560,17 @@ mod test { #[test] fn test_reading_message_address() { - let receiver_address = + let address = TariAddress::from_hex("0c017c5cd01385f34ac065e3b05948326dc55d2494f120c6f459a07389011b4ec1").unwrap(); - let sender_address = - TariAddress::from_hex("3e596f98f6904f0fc1c8685e2274bd8b2c445d5dac284a9398d09a0e9a760436d0").unwrap(); - let message = MessageBuilder::new() - .receiver_address(receiver_address.clone()) - .sender_address(sender_address.clone()) - .build(); + let message = MessageBuilder::new().address(address.clone()).build(); let message_ptr = Box::into_raw(Box::new(message)); let error_out = Box::into_raw(Box::new(0)); unsafe { - let address_ptr = read_chat_message_sender_address(message_ptr, error_out); + let address_ptr = read_chat_message_address(message_ptr, error_out); - assert_eq!(sender_address.to_bytes(), (*address_ptr).to_bytes()); + assert_eq!(address.to_bytes(), (*address_ptr).to_bytes()); destroy_chat_message(message_ptr); destroy_tari_address(address_ptr); diff --git a/base_layer/chat_ffi/src/message_metadata.rs b/base_layer/chat_ffi/src/message_metadata.rs index 3d4a3c07a5d..b5a7b776117 100644 --- a/base_layer/chat_ffi/src/message_metadata.rs +++ b/base_layer/chat_ffi/src/message_metadata.rs @@ -211,8 +211,7 @@ mod test { let message_ptr = Box::into_raw(Box::new( MessageBuilder::new() .message("hello".to_string()) - .receiver_address(address.clone()) - .sender_address(address) + .address(address) .build(), )); let error_out = Box::into_raw(Box::new(0)); diff --git a/base_layer/contacts/migrations/2024-05-27-145200_add_from_to_fields/up.sql b/base_layer/contacts/migrations/2024-05-27-145200_add_from_to_fields/up.sql deleted file mode 100644 index 435865ecf17..00000000000 --- a/base_layer/contacts/migrations/2024-05-27-145200_add_from_to_fields/up.sql +++ /dev/null @@ -1,9 +0,0 @@ -DROP INDEX idx_messages_address; - -ALTER TABLE messages DROP address; - -ALTER TABLE messages ADD receiver_address BLOB NOT NULL; -ALTER TABLE messages ADD sender_address BLOB NOT NULL; - -CREATE INDEX idx_messages_receiver_address ON messages (receiver_address); -CREATE INDEX idx_messages_sender_address ON messages (sender_address); diff --git a/base_layer/contacts/proto/message.proto b/base_layer/contacts/proto/message.proto index f1ca2553b54..92c3b7d7fcb 100644 --- a/base_layer/contacts/proto/message.proto +++ b/base_layer/contacts/proto/message.proto @@ -7,10 +7,9 @@ package tari.contacts.chat; message Message { bytes body = 1; repeated MessageMetadata metadata = 2; - bytes receiver_address = 3; - bytes sender_address = 4; - DirectionEnum direction = 5; - bytes message_id = 6; + bytes address = 3; + DirectionEnum direction = 4; + bytes message_id = 5; } enum DirectionEnum { diff --git a/base_layer/contacts/src/chat_client/src/client.rs b/base_layer/contacts/src/chat_client/src/client.rs index fe11eac30f2..0c7ae73618a 100644 --- a/base_layer/contacts/src/chat_client/src/client.rs +++ b/base_layer/contacts/src/chat_client/src/client.rs @@ -168,14 +168,6 @@ impl ChatClient for Client { message } - fn create_message(&self, receiver: &TariAddress, message: String) -> Message { - MessageBuilder::new() - .receiver_address(receiver.clone()) - .sender_address(self.address().clone()) - .message(message) - .build() - } - async fn check_online_status(&self, address: &TariAddress) -> Result { if let Some(mut contacts_service) = self.contacts.clone() { let contact = contacts_service.get_contact(address.clone()).await?; @@ -186,6 +178,10 @@ impl ChatClient for Client { Ok(ContactOnlineStatus::Offline) } + fn create_message(&self, receiver: &TariAddress, message: String) -> Message { + MessageBuilder::new().address(receiver.clone()).message(message).build() + } + async fn get_messages(&self, sender: &TariAddress, limit: u64, page: u64) -> Result, Error> { let mut messages = vec![]; if let Some(mut contacts_service) = self.contacts.clone() { @@ -215,7 +211,7 @@ impl ChatClient for Client { async fn send_read_receipt(&self, message: Message) -> Result<(), Error> { if let Some(mut contacts_service) = self.contacts.clone() { contacts_service - .send_read_confirmation(message.sender_address.clone(), message.message_id) + .send_read_confirmation(message.address.clone(), message.message_id) .await?; } diff --git a/base_layer/contacts/src/contacts_service/handle.rs b/base_layer/contacts/src/contacts_service/handle.rs index 8e39fa647fc..14a5fcdc5e6 100644 --- a/base_layer/contacts/src/contacts_service/handle.rs +++ b/base_layer/contacts/src/contacts_service/handle.rs @@ -293,10 +293,7 @@ impl ContactsServiceHandle { pub async fn send_message(&mut self, message: Message) -> Result<(), ContactsServiceError> { match self .request_response_service - .call(ContactsServiceRequest::SendMessage( - message.receiver_address.clone(), - message, - )) + .call(ContactsServiceRequest::SendMessage(message.address.clone(), message)) .await?? { ContactsServiceResponse::MessageSent => Ok(()), diff --git a/base_layer/contacts/src/contacts_service/service.rs b/base_layer/contacts/src/contacts_service/service.rs index 1d294df4a69..e84df4fbefb 100644 --- a/base_layer/contacts/src/contacts_service/service.rs +++ b/base_layer/contacts/src/contacts_service/service.rs @@ -586,10 +586,8 @@ where T: ContactsBackend + 'static message: Message, source_public_key: CommsPublicKey, ) -> Result<(), ContactsServiceError> { - if source_public_key != *message.sender_address.public_key() { - return Err(ContactsServiceError::MessageSourceDoesNotMatchOrigin); - } let our_message = Message { + address: TariAddress::from_public_key(&source_public_key, message.address.network()), stored_at: EpochTime::now().as_u64(), ..message }; @@ -620,7 +618,7 @@ where T: ContactsBackend + 'static &mut self, message: &Message, ) -> Result<(), ContactsServiceError> { - let address = &message.sender_address; + let address = &message.address; let confirmation = MessageDispatch::DeliveryConfirmation(Confirmation { message_id: message.message_id.clone(), timestamp: message.stored_at, diff --git a/base_layer/contacts/src/contacts_service/storage/types/messages.rs b/base_layer/contacts/src/contacts_service/storage/types/messages.rs index 47ad07624db..ffdfd7a0210 100644 --- a/base_layer/contacts/src/contacts_service/storage/types/messages.rs +++ b/base_layer/contacts/src/contacts_service/storage/types/messages.rs @@ -40,8 +40,7 @@ use crate::{ #[diesel(table_name = messages)] #[diesel(primary_key(message_id))] pub struct MessagesSqlInsert { - pub receiver_address: Vec, - pub sender_address: Vec, + pub address: Vec, pub message_id: Vec, pub body: Vec, pub metadata: Vec, @@ -54,8 +53,7 @@ pub struct MessagesSqlInsert { #[diesel(table_name = messages)] #[diesel(primary_key(message_id))] pub struct MessagesSql { - pub receiver_address: Vec, - pub sender_address: Vec, + pub address: Vec, pub message_id: Vec, pub body: Vec, pub metadata: Vec, @@ -85,34 +83,6 @@ impl MessagesSqlInsert { impl MessagesSql { /// Find a particular message by their address, if it exists - pub fn find_by_receiver_address( - address: &[u8], - limit: i64, - page: i64, - conn: &mut SqliteConnection, - ) -> Result, ContactsServiceStorageError> { - Ok(messages::table - .filter(messages::receiver_address.eq(address)) - .order(messages::stored_at.desc()) - .offset(limit * page) - .limit(limit) - .load::(conn)?) - } - - pub fn find_by_sender_address( - address: &[u8], - limit: i64, - page: i64, - conn: &mut SqliteConnection, - ) -> Result, ContactsServiceStorageError> { - Ok(messages::table - .filter(messages::sender_address.eq(address)) - .order(messages::stored_at.desc()) - .offset(limit * page) - .limit(limit) - .load::(conn)?) - } - pub fn find_by_address( address: &[u8], limit: i64, @@ -120,11 +90,7 @@ impl MessagesSql { conn: &mut SqliteConnection, ) -> Result, ContactsServiceStorageError> { Ok(messages::table - .filter( - messages::sender_address - .eq(address) - .or(messages::receiver_address.eq(address)), - ) + .filter(messages::address.eq(address)) .order(messages::stored_at.desc()) .offset(limit * page) .limit(limit) @@ -158,11 +124,7 @@ impl MessagesSql { pub fn find_all_conversationlists( conn: &mut SqliteConnection, ) -> Result>, ContactsServiceStorageError> { - Ok(messages::table - .select(messages::sender_address) - .select(messages::receiver_address) - .distinct() - .load(conn)?) + Ok(messages::table.select(messages::address).distinct().load(conn)?) } } @@ -172,20 +134,14 @@ impl TryFrom for Message { #[allow(clippy::cast_sign_loss)] fn try_from(o: MessagesSql) -> Result { - let receiver_address = - TariAddress::from_bytes(&o.receiver_address).map_err(|_| ContactsServiceStorageError::ConversionError)?; - let sender_address = - TariAddress::from_bytes(&o.sender_address).map_err(|_| ContactsServiceStorageError::ConversionError)?; + let address = TariAddress::from_bytes(&o.address).map_err(|_| ContactsServiceStorageError::ConversionError)?; let metadata: Vec = serde_json::from_str( &String::from_utf8(o.metadata.clone()).map_err(|_| ContactsServiceStorageError::ConversionError)?, ) .map_err(|_| ContactsServiceStorageError::ConversionError)?; Ok(Self { - metadata, - body: o.body, - receiver_address, - sender_address, + address, direction: Direction::from_byte( u8::try_from(o.direction).map_err(|_| ContactsServiceStorageError::ConversionError)?, ) @@ -194,6 +150,8 @@ impl TryFrom for Message { stored_at: o.stored_at.timestamp() as u64, delivery_confirmation_at: Some(o.stored_at.timestamp() as u64), read_confirmation_at: Some(o.stored_at.timestamp() as u64), + body: o.body, + metadata, message_id: o.message_id, }) } @@ -206,9 +164,9 @@ impl TryFrom for MessagesSqlInsert { fn try_from(o: Message) -> Result { let metadata = serde_json::to_string(&o.metadata).map_err(|_| ContactsServiceStorageError::ConversionError)?; + Ok(Self { - receiver_address: o.receiver_address.to_bytes().to_vec(), - sender_address: o.sender_address.to_bytes().to_vec(), + address: o.address.to_bytes().to_vec(), message_id: o.message_id, body: o.body, metadata: metadata.into_bytes().to_vec(), diff --git a/base_layer/contacts/src/contacts_service/types/message.rs b/base_layer/contacts/src/contacts_service/types/message.rs index f130c29dd89..7f26c9aece5 100644 --- a/base_layer/contacts/src/contacts_service/types/message.rs +++ b/base_layer/contacts/src/contacts_service/types/message.rs @@ -36,8 +36,7 @@ use crate::contacts_service::proto; pub struct Message { pub body: Vec, pub metadata: Vec, - pub receiver_address: TariAddress, - pub sender_address: TariAddress, + pub address: TariAddress, pub direction: Direction, pub sent_at: u64, pub stored_at: u64, @@ -88,8 +87,7 @@ impl TryFrom for Message { Ok(Self { body: message.body, metadata, - receiver_address: TariAddress::from_bytes(&message.receiver_address).map_err(|e| e.to_string())?, - sender_address: TariAddress::from_bytes(&message.sender_address).map_err(|e| e.to_string())?, + address: TariAddress::from_bytes(&message.address).map_err(|e| e.to_string())?, // A Message from a proto::Message will always be an inbound message direction: Direction::Inbound, message_id: message.message_id, @@ -107,8 +105,7 @@ impl From for proto::Message { .iter() .map(|m| proto::MessageMetadata::from(m.clone())) .collect(), - receiver_address: message.receiver_address.to_bytes().to_vec(), - sender_address: message.sender_address.to_bytes().to_vec(), + address: message.address.to_bytes().to_vec(), direction: i32::from(message.direction.as_byte()), message_id: message.message_id, } diff --git a/base_layer/contacts/src/contacts_service/types/message_builder.rs b/base_layer/contacts/src/contacts_service/types/message_builder.rs index 68511e34cd6..638c20362af 100644 --- a/base_layer/contacts/src/contacts_service/types/message_builder.rs +++ b/base_layer/contacts/src/contacts_service/types/message_builder.rs @@ -44,19 +44,10 @@ impl MessageBuilder { } } - pub fn receiver_address(&self, receiver_address: TariAddress) -> Self { + pub fn address(&self, address: TariAddress) -> Self { Self { inner: Message { - receiver_address, - ..self.inner.clone() - }, - } - } - - pub fn sender_address(&self, sender_address: TariAddress) -> Self { - Self { - inner: Message { - sender_address, + address, ..self.inner.clone() }, } diff --git a/base_layer/contacts/src/schema.rs b/base_layer/contacts/src/schema.rs index 5e28c72b74a..4e62b4534e8 100644 --- a/base_layer/contacts/src/schema.rs +++ b/base_layer/contacts/src/schema.rs @@ -13,8 +13,7 @@ diesel::table! { diesel::table! { messages (message_id) { - receiver_address -> Binary, - sender_address -> Binary, + address -> Binary, message_id -> Binary, body -> Binary, metadata -> Binary, diff --git a/base_layer/contacts/tests/contacts_service.rs b/base_layer/contacts/tests/contacts_service.rs index a876dd28496..3c762874dff 100644 --- a/base_layer/contacts/tests/contacts_service.rs +++ b/base_layer/contacts/tests/contacts_service.rs @@ -243,8 +243,7 @@ pub fn test_message_pagination() { for num in 0..8 { let message = MessageBuilder::new() .message(format!("Test {:?}", num)) - .receiver_address(address.clone()) - .sender_address(address.clone()) + .address(address.clone()) .build(); contacts_db.save_message(message.clone()).expect("Message to be saved"); @@ -274,8 +273,7 @@ pub fn test_message_pagination() { for num in 0..3000 { let message = MessageBuilder::new() .message(format!("Test {:?}", num)) - .receiver_address(address.clone()) - .sender_address(address.clone()) + .address(address.clone()) .build(); contacts_db.save_message(message.clone()).expect("Message to be saved"); diff --git a/base_layer/wallet_ffi/src/lib.rs b/base_layer/wallet_ffi/src/lib.rs index 5d4251e506d..cdb485f8fb0 100644 --- a/base_layer/wallet_ffi/src/lib.rs +++ b/base_layer/wallet_ffi/src/lib.rs @@ -11616,8 +11616,7 @@ mod test { alice_wallet_runtime.block_on(alice_wallet_contacts_service.send_message(Message { body: vec![i], metadata: vec![MessageMetadata::default()], - receiver_address: alice_wallet_address.clone(), - sender_address: bob_wallet_address.clone(), + address: bob_wallet_address.clone(), direction: Direction::Outbound, stored_at: u64::from(i), sent_at: u64::from(i), @@ -11634,8 +11633,7 @@ mod test { bob_wallet_runtime.block_on(bob_wallet_contacts_service.send_message(Message { body: vec![i], metadata: vec![MessageMetadata::default()], - sender_address: alice_wallet_address.clone(), - receiver_address: bob_wallet_address.clone(), + address: alice_wallet_address.clone(), direction: Direction::Outbound, stored_at: u64::from(i), sent_at: u64::from(i), diff --git a/integration_tests/src/chat_ffi.rs b/integration_tests/src/chat_ffi.rs index 42bcef33fdd..51969eae6e1 100644 --- a/integration_tests/src/chat_ffi.rs +++ b/integration_tests/src/chat_ffi.rs @@ -85,12 +85,7 @@ extern "C" { callback_delivery_confirmation_received: unsafe extern "C" fn(*mut c_void), callback_read_confirmation_received: unsafe extern "C" fn(*mut c_void), ) -> *mut ClientFFI; - pub fn create_chat_message( - receiver: *mut c_void, - sender: *mut c_void, - message: *const c_char, - error_out: *const c_int, - ) -> *mut c_void; + pub fn create_chat_message(receiver: *mut c_void, message: *const c_char, error_out: *const c_int) -> *mut c_void; pub fn send_chat_message(client: *mut ClientFFI, message: *mut c_void, error_out: *const c_int); pub fn add_chat_message_metadata( message: *mut c_void, @@ -182,8 +177,7 @@ impl ChatClient for ChatFFI { } fn create_message(&self, receiver: &TariAddress, message: String) -> Message { - let receiver_address_ptr = Box::into_raw(Box::new(receiver.to_owned())) as *mut c_void; - let sender_address_ptr = Box::into_raw(Box::new(self.address.clone())) as *mut c_void; + let address_ptr = Box::into_raw(Box::new(receiver.to_owned())) as *mut c_void; let message_c_str = CString::new(message).unwrap(); let message_c_char: *const c_char = CString::into_raw(message_c_str) as *const c_char; @@ -191,8 +185,7 @@ impl ChatClient for ChatFFI { let error_out = Box::into_raw(Box::new(0)); unsafe { - let message_ptr = create_chat_message(receiver_address_ptr, sender_address_ptr, message_c_char, error_out) - as *mut Message; + let message_ptr = create_chat_message(address_ptr, message_c_char, error_out) as *mut Message; *Box::from_raw(message_ptr) } }