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})")) )), } },