1
0
Fork 0
mirror of https://github.com/Nutomic/ibis.git synced 2024-12-23 20:31:23 +00:00

Better activity id generation

This commit is contained in:
Felix Ableitner 2024-03-12 13:00:03 +01:00
parent e56e8adbdf
commit 09b68d0411
7 changed files with 12 additions and 17 deletions

View file

@ -32,7 +32,7 @@ impl Accept {
object: Follow,
data: &Data<IbisData>,
) -> 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(),

View file

@ -33,7 +33,7 @@ impl CreateArticle {
pub async fn send_to_followers(article: DbArticle, data: &Data<IbisData>) -> 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(),

View file

@ -29,7 +29,7 @@ pub struct Follow {
impl Follow {
pub async fn send(actor: DbPerson, to: &DbInstance, data: &Data<IbisData>) -> 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(),

View file

@ -39,7 +39,7 @@ impl RejectEdit {
data: &Data<IbisData>,
) -> 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()],

View file

@ -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 {

View file

@ -42,7 +42,7 @@ impl UpdateRemoteArticle {
data: &Data<IbisData>,
) -> 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()],

View file

@ -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<T>(for_url: &ObjectId<T>) -> Result<Url, ParseError>
where
T: Object + Send + 'static,
for<'de2> <T as Object>::Kind: Deserialize<'de2>,
{
let domain = extract_domain(for_url);
pub fn generate_activity_id(data: &Data<IbisData>) -> Result<Url, ParseError> {
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