fix(activitypub-base): deterministic announce IDs so Undo(Announce) can reference original activity
This commit is contained in:
@@ -175,8 +175,19 @@ impl ActivityPubService {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// Deterministic ID so Undo(Announce) can reference this same activity.
|
||||
let announce_id = url::Url::parse(&format!(
|
||||
"{}/activities/announce/{}",
|
||||
self.base_url,
|
||||
uuid::Uuid::new_v5(
|
||||
&uuid::Uuid::NAMESPACE_URL,
|
||||
format!("{}/{}", local_user_id, object_ap_id).as_bytes(),
|
||||
)
|
||||
))
|
||||
.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
|
||||
let announce = crate::activities::AnnounceActivity {
|
||||
id: crate::urls::activity_url(&self.base_url).map_err(|e| anyhow::anyhow!("{e}"))?,
|
||||
id: announce_id,
|
||||
kind: Default::default(),
|
||||
actor: activitypub_federation::fetch::object_id::ObjectId::from(local_actor.ap_id.clone()),
|
||||
object: object_ap_id,
|
||||
@@ -235,6 +246,17 @@ impl ActivityPubService {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// Reconstruct the same deterministic announce ID used when the boost was sent.
|
||||
let announce_id = url::Url::parse(&format!(
|
||||
"{}/activities/announce/{}",
|
||||
self.base_url,
|
||||
uuid::Uuid::new_v5(
|
||||
&uuid::Uuid::NAMESPACE_URL,
|
||||
format!("{}/{}", local_user_id, object_ap_id).as_bytes(),
|
||||
)
|
||||
))
|
||||
.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
|
||||
let undo_id = crate::urls::activity_url(&self.base_url).map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let undo = crate::activities::UndoActivity {
|
||||
id: undo_id,
|
||||
@@ -242,6 +264,7 @@ impl ActivityPubService {
|
||||
actor: activitypub_federation::fetch::object_id::ObjectId::from(local_actor.ap_id.clone()),
|
||||
object: serde_json::json!({
|
||||
"type": "Announce",
|
||||
"id": announce_id.to_string(),
|
||||
"actor": local_actor.ap_id.to_string(),
|
||||
"object": object_ap_id.to_string(),
|
||||
}),
|
||||
|
||||
Reference in New Issue
Block a user