From 09b68d04113faf8d09c347845aa471fdb70f64ba Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Tue, 12 Mar 2024 13:00:03 +0100 Subject: [PATCH] Better activity id generation --- src/backend/federation/activities/accept.rs | 2 +- .../federation/activities/create_article.rs | 2 +- src/backend/federation/activities/follow.rs | 2 +- src/backend/federation/activities/reject.rs | 2 +- .../activities/update_local_article.rs | 2 +- .../activities/update_remote_article.rs | 2 +- src/backend/utils.rs | 17 ++++++----------- 7 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/backend/federation/activities/accept.rs b/src/backend/federation/activities/accept.rs index 3c512b1..12d53a8 100644 --- a/src/backend/federation/activities/accept.rs +++ b/src/backend/federation/activities/accept.rs @@ -32,7 +32,7 @@ impl Accept { object: Follow, data: &Data, ) -> MyResult<()> { - let id = generate_activity_id(&local_instance.ap_id)?; + let id = generate_activity_id(data)?; let follower = object.actor.dereference(data).await?; let accept = Accept { actor: local_instance.ap_id.clone(), diff --git a/src/backend/federation/activities/create_article.rs b/src/backend/federation/activities/create_article.rs index 8b243a3..f3c3327 100644 --- a/src/backend/federation/activities/create_article.rs +++ b/src/backend/federation/activities/create_article.rs @@ -33,7 +33,7 @@ impl CreateArticle { pub async fn send_to_followers(article: DbArticle, data: &Data) -> MyResult<()> { let local_instance = DbInstance::read_local_instance(data)?; let object = article.clone().into_json(data).await?; - let id = generate_activity_id(&local_instance.ap_id)?; + let id = generate_activity_id(data)?; let to = local_instance.follower_ids(data)?; let create = CreateArticle { actor: local_instance.ap_id.clone(), diff --git a/src/backend/federation/activities/follow.rs b/src/backend/federation/activities/follow.rs index a68cb32..d64d909 100644 --- a/src/backend/federation/activities/follow.rs +++ b/src/backend/federation/activities/follow.rs @@ -29,7 +29,7 @@ pub struct Follow { impl Follow { pub async fn send(actor: DbPerson, to: &DbInstance, data: &Data) -> MyResult<()> { - let id = generate_activity_id(&actor.ap_id)?; + let id = generate_activity_id(data)?; let follow = Follow { actor: actor.ap_id.clone(), object: to.ap_id.clone(), diff --git a/src/backend/federation/activities/reject.rs b/src/backend/federation/activities/reject.rs index 4a54ba5..fc46029 100644 --- a/src/backend/federation/activities/reject.rs +++ b/src/backend/federation/activities/reject.rs @@ -39,7 +39,7 @@ impl RejectEdit { data: &Data, ) -> MyResult<()> { let local_instance = DbInstance::read_local_instance(data)?; - let id = generate_activity_id(&local_instance.ap_id)?; + let id = generate_activity_id(data)?; let reject = RejectEdit { actor: local_instance.ap_id.clone(), to: vec![user_instance.ap_id.into_inner()], diff --git a/src/backend/federation/activities/update_local_article.rs b/src/backend/federation/activities/update_local_article.rs index 51bea0f..95b4432 100644 --- a/src/backend/federation/activities/update_local_article.rs +++ b/src/backend/federation/activities/update_local_article.rs @@ -38,7 +38,7 @@ impl UpdateLocalArticle { ) -> MyResult<()> { debug_assert!(article.local); let local_instance = DbInstance::read_local_instance(data)?; - let id = generate_activity_id(&local_instance.ap_id)?; + let id = generate_activity_id(data)?; let mut to = local_instance.follower_ids(data)?; to.extend(extra_recipients.iter().map(|i| i.ap_id.inner().clone())); let update = UpdateLocalArticle { diff --git a/src/backend/federation/activities/update_remote_article.rs b/src/backend/federation/activities/update_remote_article.rs index 64f17d5..a869a64 100644 --- a/src/backend/federation/activities/update_remote_article.rs +++ b/src/backend/federation/activities/update_remote_article.rs @@ -42,7 +42,7 @@ impl UpdateRemoteArticle { data: &Data, ) -> MyResult<()> { let local_instance = DbInstance::read_local_instance(data)?; - let id = generate_activity_id(&local_instance.ap_id)?; + let id = generate_activity_id(data)?; let update = UpdateRemoteArticle { actor: local_instance.ap_id.clone(), to: vec![article_instance.ap_id.into_inner()], diff --git a/src/backend/utils.rs b/src/backend/utils.rs index 18a7a46..542a2a6 100644 --- a/src/backend/utils.rs +++ b/src/backend/utils.rs @@ -1,27 +1,22 @@ use crate::{ - backend::error::MyResult, - common::{utils, utils::extract_domain, EditVersion, EditView}, + backend::{database::IbisData, error::MyResult}, + common::{utils, EditVersion, EditView}, }; -use activitypub_federation::{fetch::object_id::ObjectId, traits::Object}; +use activitypub_federation::config::Data; use anyhow::anyhow; use diffy::{apply, Patch}; use rand::{distributions::Alphanumeric, thread_rng, Rng}; -use serde::Deserialize; use url::{ParseError, Url}; -pub fn generate_activity_id(for_url: &ObjectId) -> Result -where - T: Object + Send + 'static, - for<'de2> ::Kind: Deserialize<'de2>, -{ - let domain = extract_domain(for_url); +pub fn generate_activity_id(data: &Data) -> Result { + let domain = &data.config.federation.domain; let id: String = thread_rng() .sample_iter(&Alphanumeric) .take(7) .map(char::from) .collect(); Url::parse(&format!( - "{}://{}/objects/{}", + "{}://{}/activity/{}", utils::http_protocol_str(), domain, id