fix: persist inbound Block to blocklist, clear on Undo(Block)

Closes #1
This commit is contained in:
2026-05-30 02:39:14 +02:00
parent ca949691e4
commit 9f9c4e769b
2 changed files with 18 additions and 6 deletions

View File

@@ -46,17 +46,22 @@ impl Activity for BlockActivity {
if check_guards(&self.id, self.actor.inner(), data).await? { if check_guards(&self.id, self.actor.inner(), data).await? {
return Ok(()); return Ok(());
} }
let actor_url = self.actor.inner().as_str();
if let Some(local_user_id) = crate::urls::extract_user_id_from_url(&self.object) { if let Some(local_user_id) = crate::urls::extract_user_id_from_url(&self.object) {
let _ = data let _ = data
.follow_repo .follow_repo
.remove_following(local_user_id, self.actor.inner().as_str()) .remove_following(local_user_id, actor_url)
.await; .await;
let _ = data let _ = data
.follow_repo .follow_repo
.remove_follower(local_user_id, self.actor.inner().as_str()) .remove_follower(local_user_id, actor_url)
.await;
let _ = data
.blocklist_repo
.add_blocked_actor(local_user_id, actor_url)
.await; .await;
} }
tracing::info!(actor = %self.actor.inner(), "received block — removed following and follower"); tracing::info!(actor = %actor_url, "received block — removed relationships, recorded in blocklist");
Ok(()) Ok(())
} }
} }

View File

@@ -128,11 +128,18 @@ impl Activity for UndoActivity {
tracing::info!(actor = %self.actor.inner(), "received Undo(Announce)"); tracing::info!(actor = %self.actor.inner(), "received Undo(Announce)");
} }
"Block" => { "Block" => {
// Remote actor unblocked a local user. No automatic relationship if let Some(obj_url) = self.object.get("object").and_then(|o| o.as_str())
// restoration — the blocked user would need to re-follow manually. && let Ok(url) = Url::parse(obj_url)
&& let Some(user_id) = crate::urls::extract_user_id_from_url(&url)
{
let _ = data
.blocklist_repo
.remove_blocked_actor(user_id, self.actor.inner().as_str())
.await;
}
tracing::info!( tracing::info!(
actor = %self.actor.inner(), actor = %self.actor.inner(),
"received Undo(Block) — no automatic action taken" "received Undo(Block) — removed from blocklist"
); );
} }
other => { other => {