diff --git a/crates/community/src/discover.rs b/crates/community/src/discover.rs index 2ea0391c..4cb35913 100644 --- a/crates/community/src/discover.rs +++ b/crates/community/src/discover.rs @@ -110,17 +110,7 @@ fn deleted_ids(authors: &BTreeMap, deletes: &[Event]) -> BTr .iter() .filter(|event| event.kind == Kind::EventDeletion) { - for tag in event.tags.iter() { - let fields = tag.as_slice(); - - if fields.len() < 2 || fields[0] != "e" { - continue; - } - - let Ok(id) = EventId::from_hex(&fields[1]) else { - continue; - }; - + for id in event.tags.event_ids() { if authors.get(&id) == Some(&event.pubkey) { deleted.insert(id); } diff --git a/crates/community/src/sync.rs b/crates/community/src/sync.rs index 17e205aa..f2172ae0 100644 --- a/crates/community/src/sync.rs +++ b/crates/community/src/sync.rs @@ -9,10 +9,10 @@ use concord::cord02::{self, ControlFold, ImageRef}; use concord::cord04::AuthorityCitation; use concord::cord04::roles::{Permissions, citation_ok}; use concord::cord05::{ - self, BundleState, ChannelGrant, CommunityInvite, InviteEntry, InviteList, ParsedInviteLink, + self, BundleState, CommunityInvite, InviteEntry, InviteList, ParsedInviteLink, }; use concord::derive::{ - TOKEN_LEN, channel_group_key, control_group_key, control_signer_group_key, guestbook_group_key, + channel_group_key, control_group_key, control_signer_group_key, guestbook_group_key, invite_bundle_key, }; use concord::state::{CommunityState, HeldKey, HeldRoot, list_entry}; @@ -225,25 +225,11 @@ where S: AsyncGetPublicKey + AsyncSignEvent + AsyncNip44 + ?Sized, { let link_signer = Keys::generate(); - - let mut token = [0u8; TOKEN_LEN]; - token.copy_from_slice(&link_signer.secret_key().as_secret_bytes()[..TOKEN_LEN]); + let token = cord05::mint_token()?; let bundle_key = invite_bundle_key(&token); let relays: Vec = state.relays.iter().map(|relay| relay.to_string()).collect(); - let channels = state - .channels - .iter() - .map(|channel| ChannelGrant { - id: channel.id, - key: channel.key.map(|key| HEXLOWER.encode(&key)), - epoch: channel.epoch, - name: channel.name.clone(), - extra: Default::default(), - }) - .collect(); - let invite = CommunityInvite { community_id: state.id, owner: state.owner, @@ -251,7 +237,7 @@ where community_root: HEXLOWER.encode(&state.community_root), root_epoch: state.root_epoch, control_pk: state.control_pks.get(&state.root_epoch.0).copied(), - channels, + channels: Vec::new(), relays: relays.clone(), name: state.name.clone().unwrap_or_default(), icon: None, @@ -273,7 +259,7 @@ where community_id: state.id, url: url.clone(), label: None, - created_at: Timestamp::now().as_secs().saturating_mul(1000), + created_at: Timestamp::now().as_secs(), expires_at: None, extra: Default::default(), }; diff --git a/crates/concord/src/cords/cord05.rs b/crates/concord/src/cords/cord05.rs index ed8791f8..f4cb92d8 100644 --- a/crates/concord/src/cords/cord05.rs +++ b/crates/concord/src/cords/cord05.rs @@ -396,6 +396,12 @@ pub fn bundle_naddr(link_signer: &PublicKey) -> Result { .map_err(|_| InviteError::BadLink("invalid naddr")) } +pub fn mint_token() -> Result<[u8; TOKEN_LEN], InviteError> { + let mut token = [0u8; TOKEN_LEN]; + crate::fill_random(&mut token).map_err(crypto_error)?; + Ok(token) +} + pub fn build_invite_url( base: &str, link_signer: &PublicKey,