From dca326626fc29e95d2831f99ba8e51db0957d22c Mon Sep 17 00:00:00 2001
From: alemi <me@alemi.dev>
Date: Wed, 5 Feb 2025 20:29:49 +0100
Subject: [PATCH] fix: internal ids are used for relations

---
 core/src/traits/process.rs |  2 +-
 worker/src/outbound.rs     | 13 ++++++++++---
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/core/src/traits/process.rs b/core/src/traits/process.rs
index 9ee6970..46b14c0 100644
--- a/core/src/traits/process.rs
+++ b/core/src/traits/process.rs
@@ -488,7 +488,7 @@ pub async fn process_undo(ctx: &crate::Context, activity: impl apb::Activity, tx
 					Condition::all()
 						.add(crate::model::announce::Column::Actor.eq(internal_uid))
 						.add(crate::model::announce::Column::Object.eq(internal_oid))
-						.add(crate::model::announce::Column::Activity.eq(&undone_activity_id))
+						.add(crate::model::announce::Column::Activity.eq(undone_activity.internal))
 				)
 				.exec(tx)
 				.await?;
diff --git a/worker/src/outbound.rs b/worker/src/outbound.rs
index 15530e3..a9f2c15 100644
--- a/worker/src/outbound.rs
+++ b/worker/src/outbound.rs
@@ -69,20 +69,27 @@ pub async fn process(ctx: Context, job: &model::job::Model) -> crate::JobResult<
 						let following_internal = upub::model::actor::Entity::ap_to_internal(&following, &tx)
 							.await?
 							.ok_or(sea_orm::DbErr::RecordNotFound(following))?;
-						let activity_id = upub::model::relation::Entity::find()
+						let activity_id_internal = upub::model::relation::Entity::find()
 							.filter(upub::model::relation::Column::Follower.eq(follower_internal))
 							.filter(upub::model::relation::Column::Following.eq(following_internal))
 							.select_only()
 							.select_column(upub::model::relation::Column::Activity)
+							.into_tuple::<i64>()
+							.one(&tx)
+							.await?
+							.ok_or(crate::JobError::ProcessorError(ProcessorError::Incomplete))?;
+						let activity_id = upub::model::activity::Entity::find_by_id(activity_id_internal)
+							.select_only()
+							.select_column(upub::model::activity::Column::Id)
 							.into_tuple::<String>()
 							.one(&tx)
 							.await?
-							.ok_or(crate::JobError::Forbidden)?;
+							.ok_or(crate::JobError::ProcessorError(ProcessorError::Incomplete))?;
 
 						activity = activity.set_object(apb::Node::link(activity_id));
 					},
 					t => return Err(crate::JobError::ProcessorError(
-						upub::traits::process::ProcessorError::Unprocessable(format!("can't normalize Undo({t})"))
+						ProcessorError::Unprocessable(format!("can't normalize Undo({t})"))
 					)),
 				}
 			},