@@ -300,22 +300,38 @@ where
300
300
///
301
301
/// * `Ok(())` - If message processing succeeds
302
302
/// * `Err(Error)` - If message processing fails
303
- pub fn process_message ( & self , mls_group_id : & GroupId , event : & Event ) -> Result < ( ) , Error > {
303
+ pub fn process_message ( & self , event : & Event ) -> Result < ( ) , Error > {
304
304
if event. kind != Kind :: MlsGroupMessage {
305
305
return Err ( Error :: UnexpectedEvent {
306
306
expected : Kind :: MlsGroupMessage ,
307
307
received : event. kind ,
308
308
} ) ;
309
309
}
310
310
311
- // Load group
312
- let mut mls_group = self
313
- . load_mls_group ( mls_group_id) ?
311
+ let nostr_group_id_tag = event
312
+ . tags
313
+ . iter ( )
314
+ . find ( |tag| tag. kind ( ) == TagKind :: h ( ) )
315
+ . ok_or ( Error :: Message ( "Group ID Tag not found" . to_string ( ) ) ) ?;
316
+
317
+ let nostr_group_id: [ u8 ; 32 ] = hex:: decode (
318
+ nostr_group_id_tag
319
+ . content ( )
320
+ . ok_or ( Error :: Message ( "Group ID Tag content not found" . to_string ( ) ) ) ?,
321
+ )
322
+ . map_err ( |e| Error :: Message ( e. to_string ( ) ) ) ?
323
+ . try_into ( )
324
+ . map_err ( |_e| Error :: Message ( "Failed to convert nostr group id to [u8; 32]" . to_string ( ) ) ) ?;
325
+
326
+ let group = self
327
+ . storage ( )
328
+ . find_group_by_nostr_group_id ( & nostr_group_id)
329
+ . map_err ( |e| Error :: Group ( e. to_string ( ) ) ) ?
314
330
. ok_or ( Error :: GroupNotFound ) ?;
315
331
316
332
// Load group exporter secret
317
333
let secret: group_types:: GroupExporterSecret = self
318
- . exporter_secret ( mls_group_id)
334
+ . exporter_secret ( & group . mls_group_id )
319
335
. map_err ( |e| Error :: Group ( e. to_string ( ) ) ) ?;
320
336
321
337
// Convert that secret to nostr keys
@@ -329,6 +345,11 @@ where
329
345
& event. content ,
330
346
) ?;
331
347
348
+ let mut mls_group = self
349
+ . load_mls_group ( & group. mls_group_id )
350
+ . map_err ( |e| Error :: Group ( e. to_string ( ) ) ) ?
351
+ . ok_or ( Error :: GroupNotFound ) ?;
352
+
332
353
// The resulting serialized message is the MLS encrypted message that Bob sent
333
354
// Now Bob can process the MLS message content and do what's needed with it
334
355
match self . process_message_for_group ( & mut mls_group, & message_bytes) {
@@ -345,7 +366,7 @@ where
345
366
id : rumor. id . unwrap ( ) ,
346
367
pubkey : rumor. pubkey ,
347
368
kind : rumor. kind ,
348
- mls_group_id : mls_group_id. clone ( ) ,
369
+ mls_group_id : group . mls_group_id . clone ( ) ,
349
370
created_at : rumor. created_at ,
350
371
content : rumor. content . clone ( ) ,
351
372
tags : rumor. tags . clone ( ) ,
@@ -355,13 +376,15 @@ where
355
376
} ;
356
377
357
378
self . storage ( )
358
- . save_message ( message)
379
+ . save_message ( message. clone ( ) )
359
380
. map_err ( |e| Error :: Message ( e. to_string ( ) ) ) ?;
360
381
361
382
self . storage ( )
362
- . save_processed_message ( processed_message)
383
+ . save_processed_message ( processed_message. clone ( ) )
363
384
. map_err ( |e| Error :: Message ( e. to_string ( ) ) ) ?;
364
385
386
+ tracing:: debug!( target: "nostr_mls::messages::process_message" , "Processed message: {:?}" , processed_message) ;
387
+ tracing:: debug!( target: "nostr_mls::messages::process_message" , "Message: {:?}" , message) ;
365
388
Ok ( ( ) )
366
389
}
367
390
Ok ( None ) => {
0 commit comments