style: clippy fixes and linter formatting
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
use activitypub_federation::{fetch::object_id::ObjectId, protocol::context::WithContext, traits::Object};
|
||||
use activitypub_federation::{
|
||||
fetch::object_id::ObjectId, protocol::context::WithContext, traits::Object,
|
||||
};
|
||||
use url::Url;
|
||||
|
||||
use crate::{
|
||||
activities::{
|
||||
AddActivity, AnnounceActivity, CreateActivity, DeleteActivity,
|
||||
MoveActivity, UndoActivity, UpdateActivity,
|
||||
AddActivity, AnnounceActivity, CreateActivity, DeleteActivity, MoveActivity, UndoActivity,
|
||||
UpdateActivity,
|
||||
},
|
||||
actors::get_local_actor,
|
||||
urls::activity_url,
|
||||
@@ -22,10 +24,18 @@ impl ActivityPubService {
|
||||
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}"))?;
|
||||
uuid::Uuid::new_v5(
|
||||
&uuid::Uuid::NAMESPACE_URL,
|
||||
format!("{}/{}", local_user_id, object_ap_id).as_bytes()
|
||||
),
|
||||
))
|
||||
.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let data = self.federation_config.to_request_data();
|
||||
let Some((local_actor, inboxes)) = self.accepted_follower_inboxes(&data, local_user_id).await? else { return Ok(()); };
|
||||
let Some((local_actor, inboxes)) =
|
||||
self.accepted_follower_inboxes(&data, local_user_id).await?
|
||||
else {
|
||||
return Ok(());
|
||||
};
|
||||
let announce = AnnounceActivity {
|
||||
id: announce_id,
|
||||
kind: Default::default(),
|
||||
@@ -35,8 +45,11 @@ impl ActivityPubService {
|
||||
to: vec![crate::urls::AS_PUBLIC.to_string()],
|
||||
cc: vec![local_actor.followers_url.to_string()],
|
||||
};
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, inboxes, announce).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, inboxes, announce)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn broadcast_undo_announce_to_followers(
|
||||
@@ -47,19 +60,30 @@ impl ActivityPubService {
|
||||
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}"))?;
|
||||
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 = activity_url(&self.base_url).map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let data = self.federation_config.to_request_data();
|
||||
let Some((local_actor, inboxes)) = self.accepted_follower_inboxes(&data, local_user_id).await? else { return Ok(()); };
|
||||
let Some((local_actor, inboxes)) =
|
||||
self.accepted_follower_inboxes(&data, local_user_id).await?
|
||||
else {
|
||||
return Ok(());
|
||||
};
|
||||
let undo = UndoActivity {
|
||||
id: undo_id,
|
||||
kind: Default::default(),
|
||||
actor: 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()}),
|
||||
};
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, inboxes, undo).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, inboxes, undo)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn broadcast_like_to_inbox(
|
||||
@@ -69,11 +93,16 @@ impl ActivityPubService {
|
||||
author_inbox_url: url::Url,
|
||||
) -> anyhow::Result<()> {
|
||||
let data = self.federation_config.to_request_data();
|
||||
let local_actor = get_local_actor(liker_user_id, &data).await.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let local_actor = get_local_actor(liker_user_id, &data)
|
||||
.await
|
||||
.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let like_id = url::Url::parse(&format!(
|
||||
"{}/activities/like/{}",
|
||||
self.base_url,
|
||||
uuid::Uuid::new_v5(&uuid::Uuid::NAMESPACE_URL, format!("{}/{}", liker_user_id, object_ap_id).as_bytes()),
|
||||
uuid::Uuid::new_v5(
|
||||
&uuid::Uuid::NAMESPACE_URL,
|
||||
format!("{}/{}", liker_user_id, object_ap_id).as_bytes()
|
||||
),
|
||||
))?;
|
||||
let like = crate::activities::LikeActivity {
|
||||
id: like_id,
|
||||
@@ -81,8 +110,11 @@ impl ActivityPubService {
|
||||
actor: ObjectId::from(local_actor.ap_id.clone()),
|
||||
object: object_ap_id,
|
||||
};
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, vec![author_inbox_url], like).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, vec![author_inbox_url], like)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn broadcast_undo_like_to_inbox(
|
||||
@@ -92,11 +124,16 @@ impl ActivityPubService {
|
||||
author_inbox_url: url::Url,
|
||||
) -> anyhow::Result<()> {
|
||||
let data = self.federation_config.to_request_data();
|
||||
let local_actor = get_local_actor(liker_user_id, &data).await.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let local_actor = get_local_actor(liker_user_id, &data)
|
||||
.await
|
||||
.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let like_id = url::Url::parse(&format!(
|
||||
"{}/activities/like/{}",
|
||||
self.base_url,
|
||||
uuid::Uuid::new_v5(&uuid::Uuid::NAMESPACE_URL, format!("{}/{}", liker_user_id, object_ap_id).as_bytes()),
|
||||
uuid::Uuid::new_v5(
|
||||
&uuid::Uuid::NAMESPACE_URL,
|
||||
format!("{}/{}", liker_user_id, object_ap_id).as_bytes()
|
||||
),
|
||||
))?;
|
||||
let undo_id = activity_url(&self.base_url).map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let undo = UndoActivity {
|
||||
@@ -105,8 +142,11 @@ impl ActivityPubService {
|
||||
actor: ObjectId::from(local_actor.ap_id.clone()),
|
||||
object: serde_json::json!({"type":"Like","id":like_id.to_string(),"actor":local_actor.ap_id.to_string(),"object":object_ap_id.to_string()}),
|
||||
};
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, vec![author_inbox_url], undo).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, vec![author_inbox_url], undo)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn broadcast_delete_to_followers(
|
||||
@@ -115,7 +155,11 @@ impl ActivityPubService {
|
||||
ap_id: Url,
|
||||
) -> anyhow::Result<()> {
|
||||
let data = self.federation_config.to_request_data();
|
||||
let Some((local_actor, inboxes)) = self.accepted_follower_inboxes(&data, local_user_id).await? else { return Ok(()); };
|
||||
let Some((local_actor, inboxes)) =
|
||||
self.accepted_follower_inboxes(&data, local_user_id).await?
|
||||
else {
|
||||
return Ok(());
|
||||
};
|
||||
let delete = DeleteActivity {
|
||||
id: activity_url(&self.base_url).map_err(|e| anyhow::anyhow!("{e}"))?,
|
||||
kind: Default::default(),
|
||||
@@ -124,8 +168,11 @@ impl ActivityPubService {
|
||||
to: vec![crate::urls::AS_PUBLIC.to_string()],
|
||||
cc: vec![local_actor.followers_url.to_string()],
|
||||
};
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, inboxes, delete).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, inboxes, delete)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn broadcast_add_to_followers(
|
||||
@@ -135,7 +182,11 @@ impl ActivityPubService {
|
||||
object: serde_json::Value,
|
||||
) -> anyhow::Result<()> {
|
||||
let data = self.federation_config.to_request_data();
|
||||
let Some((local_actor, inboxes)) = self.accepted_follower_inboxes(&data, local_user_id).await? else { return Ok(()); };
|
||||
let Some((local_actor, inboxes)) =
|
||||
self.accepted_follower_inboxes(&data, local_user_id).await?
|
||||
else {
|
||||
return Ok(());
|
||||
};
|
||||
let add = AddActivity {
|
||||
id: ap_id,
|
||||
kind: Default::default(),
|
||||
@@ -144,8 +195,11 @@ impl ActivityPubService {
|
||||
to: vec![crate::urls::AS_PUBLIC.to_string()],
|
||||
cc: vec![local_actor.followers_url.to_string()],
|
||||
};
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, inboxes, add).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, inboxes, add)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn broadcast_undo_add_to_followers(
|
||||
@@ -154,15 +208,22 @@ impl ActivityPubService {
|
||||
watchlist_entry_ap_id: Url,
|
||||
) -> anyhow::Result<()> {
|
||||
let data = self.federation_config.to_request_data();
|
||||
let Some((local_actor, inboxes)) = self.accepted_follower_inboxes(&data, local_user_id).await? else { return Ok(()); };
|
||||
let Some((local_actor, inboxes)) =
|
||||
self.accepted_follower_inboxes(&data, local_user_id).await?
|
||||
else {
|
||||
return Ok(());
|
||||
};
|
||||
let undo = UndoActivity {
|
||||
id: activity_url(&self.base_url).map_err(|e| anyhow::anyhow!("{e}"))?,
|
||||
kind: Default::default(),
|
||||
actor: ObjectId::from(local_actor.ap_id.clone()),
|
||||
object: serde_json::json!({"type":"Add","id":watchlist_entry_ap_id.as_str(),"object":{"id":watchlist_entry_ap_id.as_str()}}),
|
||||
};
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, inboxes, undo).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, inboxes, undo)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn broadcast_create_note(
|
||||
@@ -175,13 +236,18 @@ impl ActivityPubService {
|
||||
return Ok(());
|
||||
}
|
||||
let data = self.federation_config.to_request_data();
|
||||
let Some((local_actor, inboxes)) = self.accepted_follower_inboxes(&data, local_user_id).await? else { return Ok(()); };
|
||||
let Some((local_actor, inboxes)) =
|
||||
self.accepted_follower_inboxes(&data, local_user_id).await?
|
||||
else {
|
||||
return Ok(());
|
||||
};
|
||||
let note_id_str = note["id"].as_str().unwrap_or("");
|
||||
let create_id = Url::parse(&format!(
|
||||
"{}/activities/create/{}",
|
||||
self.base_url,
|
||||
uuid::Uuid::new_v5(&uuid::Uuid::NAMESPACE_URL, note_id_str.as_bytes())
|
||||
)).map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
))
|
||||
.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let (to, cc) = visibility_addressing(visibility, &local_actor.followers_url);
|
||||
let create = CreateActivity {
|
||||
id: create_id,
|
||||
@@ -193,8 +259,11 @@ impl ActivityPubService {
|
||||
bto: vec![],
|
||||
bcc: vec![],
|
||||
};
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, inboxes, create).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, inboxes, create)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn broadcast_update_note(
|
||||
@@ -207,7 +276,11 @@ impl ActivityPubService {
|
||||
return Ok(());
|
||||
}
|
||||
let data = self.federation_config.to_request_data();
|
||||
let Some((local_actor, inboxes)) = self.accepted_follower_inboxes(&data, local_user_id).await? else { return Ok(()); };
|
||||
let Some((local_actor, inboxes)) =
|
||||
self.accepted_follower_inboxes(&data, local_user_id).await?
|
||||
else {
|
||||
return Ok(());
|
||||
};
|
||||
let (to, cc) = visibility_addressing(visibility, &local_actor.followers_url);
|
||||
let update = crate::activities::UpdateActivity {
|
||||
id: activity_url(&self.base_url).map_err(|e| anyhow::anyhow!("{e}"))?,
|
||||
@@ -217,16 +290,30 @@ impl ActivityPubService {
|
||||
to,
|
||||
cc,
|
||||
};
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, inboxes, update).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, inboxes, update)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn broadcast_actor_update(&self, user_id: uuid::Uuid) -> anyhow::Result<()> {
|
||||
let data = self.federation_config.to_request_data();
|
||||
let local_actor = get_local_actor(user_id, &data).await.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let person = local_actor.clone().into_json(&data).await.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let person_json = serde_json::to_value(WithContext::new(person, crate::urls::actor_ap_context()))?;
|
||||
let update_id = Url::parse(&format!("{}/activities/update/{}", self.base_url, uuid::Uuid::new_v4()))?;
|
||||
let local_actor = get_local_actor(user_id, &data)
|
||||
.await
|
||||
.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let person = local_actor
|
||||
.clone()
|
||||
.into_json(&data)
|
||||
.await
|
||||
.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let person_json =
|
||||
serde_json::to_value(WithContext::new(person, crate::urls::actor_ap_context()))?;
|
||||
let update_id = Url::parse(&format!(
|
||||
"{}/activities/update/{}",
|
||||
self.base_url,
|
||||
uuid::Uuid::new_v4()
|
||||
))?;
|
||||
let update = UpdateActivity {
|
||||
id: update_id,
|
||||
kind: Default::default(),
|
||||
@@ -240,8 +327,11 @@ impl ActivityPubService {
|
||||
return Ok(());
|
||||
};
|
||||
tracing::info!(%user_id, inbox_count = inboxes.len(), "broadcasting actor update");
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, inboxes, update).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, inboxes, update)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn broadcast_move(
|
||||
@@ -250,7 +340,9 @@ impl ActivityPubService {
|
||||
new_actor_url: url::Url,
|
||||
) -> anyhow::Result<()> {
|
||||
let data = self.federation_config.to_request_data();
|
||||
let local_actor = get_local_actor(user_id, &data).await.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let local_actor = get_local_actor(user_id, &data)
|
||||
.await
|
||||
.map_err(|e| anyhow::anyhow!("{e}"))?;
|
||||
let Some((_, inboxes)) = self.accepted_follower_inboxes(&data, user_id).await? else {
|
||||
tracing::info!(%user_id, "broadcast_move: no accepted followers");
|
||||
return Ok(());
|
||||
@@ -262,8 +354,11 @@ impl ActivityPubService {
|
||||
object: local_actor.ap_id.clone(),
|
||||
target: new_actor_url.clone(),
|
||||
};
|
||||
let (json, sends, inboxes) = self.prepare_broadcast(&data, &local_actor, inboxes, move_activity).await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json).await?;
|
||||
let (json, sends, inboxes) = self
|
||||
.prepare_broadcast(&data, &local_actor, inboxes, move_activity)
|
||||
.await?;
|
||||
self.dispatch_deliveries(&data, &local_actor, inboxes, sends, json)
|
||||
.await?;
|
||||
tracing::info!(%user_id, target = %new_actor_url, "broadcast_move: dispatched");
|
||||
Ok(())
|
||||
}
|
||||
@@ -280,10 +375,7 @@ pub(super) fn visibility_addressing(
|
||||
vec![crate::urls::AS_PUBLIC.to_string()],
|
||||
vec![followers_url.to_string()],
|
||||
),
|
||||
ApVisibility::FollowersOnly => (
|
||||
vec![followers_url.to_string()],
|
||||
vec![],
|
||||
),
|
||||
ApVisibility::FollowersOnly => (vec![followers_url.to_string()], vec![]),
|
||||
ApVisibility::Private => (vec![], vec![]),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user