Skip to content

Commit 57a582d

Browse files
erskingardneryukibtc
authored andcommitted
mls: remove group_id arg from NostrMls::process_message
1 parent c27dbec commit 57a582d

File tree

3 files changed

+69
-19
lines changed

3 files changed

+69
-19
lines changed

crates/nostr-mls/examples/mls_memory.rs

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,35 @@ async fn main() -> Result<()> {
121121

122122
tracing::info!("Bob joined group");
123123

124+
assert_eq!(
125+
bob_nostr_mls
126+
.get_groups()
127+
.unwrap()
128+
.first()
129+
.unwrap()
130+
.nostr_group_id,
131+
alice_group.nostr_group_id,
132+
"Bob's group should have the same Nostr group ID as Alice's group"
133+
);
134+
135+
assert_eq!(
136+
hex::encode(
137+
bob_nostr_mls
138+
.get_groups()
139+
.unwrap()
140+
.first()
141+
.unwrap()
142+
.nostr_group_id
143+
),
144+
message_event
145+
.tags
146+
.iter()
147+
.find(|tag| tag.kind() == TagKind::h())
148+
.unwrap()
149+
.content()
150+
.unwrap(),
151+
"Bob's group should have the same Nostr group ID as Alice's message wrapper event"
152+
);
124153
// Bob and Alice now have synced state for the group.
125154
assert_eq!(
126155
bob_nostr_mls.get_members(&bob_mls_group_id).unwrap().len(),
@@ -139,9 +168,13 @@ async fn main() -> Result<()> {
139168

140169
// The resulting serialized message is the MLS encrypted message that Bob sent
141170
// Now Bob can process the MLS message content and do what's needed with it
142-
bob_nostr_mls.process_message(&bob_mls_group_id, &message_event)?;
171+
bob_nostr_mls.process_message(&message_event)?;
143172

144-
let messages = bob_nostr_mls.get_messages(&bob_mls_group_id).unwrap();
173+
tracing::info!("Bob processed message");
174+
let messages = bob_nostr_mls
175+
.get_messages(&bob_mls_group_id)
176+
.map_err(|e| crate::error::Error::Message(e.to_string()))?;
177+
tracing::info!("Bob got messages: {:?}", messages);
145178
let message = messages.first().unwrap();
146179
tracing::info!("Bob processed message: {:?}", message);
147180

@@ -188,10 +221,7 @@ async fn main() -> Result<()> {
188221
);
189222

190223
tracing::info!("Alice about to process message");
191-
alice_nostr_mls.process_message(
192-
&GroupId::from_slice(alice_group.mls_group_id.as_slice()),
193-
&message_event,
194-
)?;
224+
alice_nostr_mls.process_message(&message_event)?;
195225

196226
let messages = alice_nostr_mls
197227
.get_messages(&GroupId::from_slice(alice_group.mls_group_id.as_slice()))

crates/nostr-mls/examples/mls_sqlite.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ async fn main() -> Result<()> {
145145

146146
// The resulting serialized message is the MLS encrypted message that Bob sent
147147
// Now Bob can process the MLS message content and do what's needed with it
148-
bob_nostr_mls.process_message(&bob_mls_group_id, &message_event)?;
148+
bob_nostr_mls.process_message(&message_event)?;
149149

150150
let messages = bob_nostr_mls.get_messages(&bob_mls_group_id).unwrap();
151151
let message = messages.first().unwrap();
@@ -197,10 +197,7 @@ async fn main() -> Result<()> {
197197
);
198198

199199
tracing::info!("Alice about to process message");
200-
alice_nostr_mls.process_message(
201-
&GroupId::from_slice(alice_group.mls_group_id.as_slice()),
202-
&message_event,
203-
)?;
200+
alice_nostr_mls.process_message(&message_event)?;
204201

205202
let messages = alice_nostr_mls
206203
.get_messages(&GroupId::from_slice(alice_group.mls_group_id.as_slice()))

crates/nostr-mls/src/messages.rs

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -300,22 +300,38 @@ where
300300
///
301301
/// * `Ok(())` - If message processing succeeds
302302
/// * `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> {
304304
if event.kind != Kind::MlsGroupMessage {
305305
return Err(Error::UnexpectedEvent {
306306
expected: Kind::MlsGroupMessage,
307307
received: event.kind,
308308
});
309309
}
310310

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()))?
314330
.ok_or(Error::GroupNotFound)?;
315331

316332
// Load group exporter secret
317333
let secret: group_types::GroupExporterSecret = self
318-
.exporter_secret(mls_group_id)
334+
.exporter_secret(&group.mls_group_id)
319335
.map_err(|e| Error::Group(e.to_string()))?;
320336

321337
// Convert that secret to nostr keys
@@ -329,6 +345,11 @@ where
329345
&event.content,
330346
)?;
331347

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+
332353
// The resulting serialized message is the MLS encrypted message that Bob sent
333354
// Now Bob can process the MLS message content and do what's needed with it
334355
match self.process_message_for_group(&mut mls_group, &message_bytes) {
@@ -345,7 +366,7 @@ where
345366
id: rumor.id.unwrap(),
346367
pubkey: rumor.pubkey,
347368
kind: rumor.kind,
348-
mls_group_id: mls_group_id.clone(),
369+
mls_group_id: group.mls_group_id.clone(),
349370
created_at: rumor.created_at,
350371
content: rumor.content.clone(),
351372
tags: rumor.tags.clone(),
@@ -355,13 +376,15 @@ where
355376
};
356377

357378
self.storage()
358-
.save_message(message)
379+
.save_message(message.clone())
359380
.map_err(|e| Error::Message(e.to_string()))?;
360381

361382
self.storage()
362-
.save_processed_message(processed_message)
383+
.save_processed_message(processed_message.clone())
363384
.map_err(|e| Error::Message(e.to_string()))?;
364385

386+
tracing::debug!(target: "nostr_mls::messages::process_message", "Processed message: {:?}", processed_message);
387+
tracing::debug!(target: "nostr_mls::messages::process_message", "Message: {:?}", message);
365388
Ok(())
366389
}
367390
Ok(None) => {

0 commit comments

Comments
 (0)