Skip to content

Commit 1b2c9b8

Browse files
erskingardneryukibtc
authored andcommitted
mls: create group_relays on creation of groups
Fixes a bug where we weren't creating group relays when groups are created (either by creation or by processing of welcome messages). Pull-Request: #854 Signed-off-by: Yuki Kishimoto <[email protected]>
1 parent ceee02c commit 1b2c9b8

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

crates/nostr-mls/src/groups.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,8 @@ where
278278
credential
279279
);
280280

281-
let group_data = NostrGroupDataExtension::new(name, description, admins, group_relays);
281+
let group_data =
282+
NostrGroupDataExtension::new(name, description, admins, group_relays.clone());
282283

283284
tracing::debug!(
284285
target: "nostr_mls::groups::create_mls_group",
@@ -356,6 +357,18 @@ where
356357
|e: nostr_mls_storage::groups::error::GroupError| Error::Group(e.to_string()),
357358
)?;
358359

360+
// Always (re-)save the group relays after saving the group
361+
for relay_url in group_relays.into_iter() {
362+
let group_relay = group_types::GroupRelay {
363+
mls_group_id: group.mls_group_id.clone(),
364+
relay_url,
365+
};
366+
367+
self.storage()
368+
.save_group_relay(group_relay)
369+
.map_err(|e| Error::Group(e.to_string()))?;
370+
}
371+
359372
Ok(CreateGroupResult {
360373
group,
361374
serialized_welcome_message,

crates/nostr-mls/src/welcomes.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,25 @@ where
107107
state: group_types::GroupState::Pending,
108108
};
109109

110+
let mls_group_id: GroupId = group.mls_group_id.clone();
111+
110112
// Save the pending group
111113
self.storage()
112114
.save_group(group)
113115
.map_err(|e| Error::Group(e.to_string()))?;
114116

117+
// Save the group relays
118+
for relay in welcome_preview.nostr_group_data.relays.iter() {
119+
let group_relay = group_types::GroupRelay {
120+
mls_group_id: mls_group_id.clone(),
121+
relay_url: relay.clone(),
122+
};
123+
124+
self.storage()
125+
.save_group_relay(group_relay)
126+
.map_err(|e| Error::Group(e.to_string()))?;
127+
}
128+
115129
let processed_welcome = welcome_types::ProcessedWelcome {
116130
wrapper_event_id: *wrapper_event_id,
117131
welcome_event_id: rumor_event.id,
@@ -164,10 +178,27 @@ where
164178

165179
// Update the group to active
166180
if let Some(mut group) = self.get_group(mls_group.group_id())? {
181+
let mls_group_id: GroupId = group.mls_group_id.clone();
182+
183+
// Update group state
167184
group.state = group_types::GroupState::Active;
185+
186+
// Save group
168187
self.storage().save_group(group).map_err(
169188
|e: nostr_mls_storage::groups::error::GroupError| Error::Group(e.to_string()),
170189
)?;
190+
191+
// Always (re-)save the group relays after saving the group
192+
for relay_url in welcome_preview.nostr_group_data.relays.into_iter() {
193+
let group_relay = group_types::GroupRelay {
194+
mls_group_id: mls_group_id.clone(),
195+
relay_url,
196+
};
197+
198+
self.storage()
199+
.save_group_relay(group_relay)
200+
.map_err(|e| Error::Group(e.to_string()))?;
201+
}
171202
}
172203

173204
Ok(())

0 commit comments

Comments
 (0)