diff options
author | alemi <me@alemi.dev> | 2024-03-28 05:24:38 +0100 |
---|---|---|
committer | alemi <me@alemi.dev> | 2024-03-28 05:24:38 +0100 |
commit | b5867b90ac46f7056807f35faf984615a1ac1753 (patch) | |
tree | 3d39bd2097bdddbbceb44215eec5d4ca6ae59786 | |
parent | 0ec839f42f4427d6095d04dc98644c0ae767a12a (diff) |
feat: accept also bare note to publishv0.1.0
-rw-r--r-- | src/activitypub/user/outbox.rs | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/src/activitypub/user/outbox.rs b/src/activitypub/user/outbox.rs index f1dd997..0796718 100644 --- a/src/activitypub/user/outbox.rs +++ b/src/activitypub/user/outbox.rs @@ -78,8 +78,40 @@ pub async fn post( None => Err(StatusCode::BAD_REQUEST.into()), Some(BaseType::Link(_)) => Err(StatusCode::UNPROCESSABLE_ENTITY.into()), - // Some(BaseType::Object(ObjectType::Note)) => { - // }, + Some(BaseType::Object(ObjectType::Note)) => { + let oid = ctx.oid(uuid::Uuid::new_v4().to_string()); + let aid = ctx.aid(uuid::Uuid::new_v4().to_string()); + let activity_targets = activity.addressed(); + let object_model = model::object::Model::new( + &activity + .set_id(Some(&oid)) + .set_attributed_to(Node::link(uid.clone())) + .set_published(Some(chrono::Utc::now())) + )?; + let activity_model = model::activity::Model { + id: aid.clone(), + activity_type: ActivityType::Create, + actor: uid.clone(), + object: Some(oid.clone()), + target: None, + cc: object_model.cc.clone(), + bcc: object_model.bcc.clone(), + to: object_model.to.clone(), + bto: object_model.bto.clone(), + published: object_model.published, + }; + + model::object::Entity::insert(object_model.into_active_model()) + .exec(ctx.db()).await?; + model::activity::Entity::insert(activity_model.into_active_model()) + .exec(ctx.db()).await?; + + let addressed = ctx.expand_addressing(&uid, activity_targets).await?; + ctx.address_to(&aid, Some(&oid), &addressed).await?; + ctx.deliver_to(&aid, &uid, &addressed).await?; + + Ok(CreationResult(aid)) + }, Some(BaseType::Object(ObjectType::Activity(ActivityType::Create))) => { let Some(object) = activity.object().get().map(|x| x.underlying_json_object()) else { |