diff options
author | rtkay123 <dev@kanjala.com> | 2025-07-17 14:00:40 +0200 |
---|---|---|
committer | rtkay123 <dev@kanjala.com> | 2025-07-17 14:00:40 +0200 |
commit | 69fe55ad54468948c13af520a498ed4aeac194ed (patch) | |
tree | c7db25aa7cf615480e9b386064f232d2bec6ccc3 /src/server/activities/follow.rs | |
parent | 5fdb24b6a2cef7964a049e789ed90f883221d657 (diff) | |
download | sellershut-69fe55ad54468948c13af520a498ed4aeac194ed.tar.bz2 sellershut-69fe55ad54468948c13af520a498ed4aeac194ed.zip |
chore: convert to workspace
Diffstat (limited to 'src/server/activities/follow.rs')
-rw-r--r-- | src/server/activities/follow.rs | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/src/server/activities/follow.rs b/src/server/activities/follow.rs deleted file mode 100644 index 466edb7..0000000 --- a/src/server/activities/follow.rs +++ /dev/null @@ -1,91 +0,0 @@ -use activitypub_federation::{ - config::Data, - fetch::object_id::ObjectId, - kinds::activity::FollowType, - traits::{Activity, Actor}, -}; -use async_trait::async_trait; -use serde::{Deserialize, Serialize}; -use url::Url; -use uuid::Uuid; - -use crate::{ - entity::user::User, - error::AppError, - server::{activities::accept::Accept, generate_object_id}, - state::AppHandle, -}; - -#[derive(Deserialize, Serialize, Clone, Debug)] -#[serde(rename_all = "camelCase")] -pub struct Follow { - pub actor: ObjectId<User>, - pub object: ObjectId<User>, - #[serde(rename = "type")] - kind: FollowType, - id: Url, -} - -impl Follow { - pub fn new(actor: ObjectId<User>, object: ObjectId<User>, id: Url) -> Follow { - Follow { - actor, - object, - kind: Default::default(), - id, - } - } -} - -#[async_trait] -impl Activity for Follow { - #[doc = " App data type passed to handlers. Must be identical to"] - #[doc = " [crate::config::FederationConfigBuilder::app_data] type."] - type DataType = AppHandle; - - #[doc = " Error type returned by handler methods"] - type Error = AppError; - - #[doc = " `id` field of the activity"] - fn id(&self) -> &Url { - &self.id - } - - #[doc = " `actor` field of activity"] - fn actor(&self) -> &Url { - self.actor.inner() - } - - #[doc = " Verifies that the received activity is valid."] - #[doc = ""] - #[doc = " This needs to be a separate method, because it might be used for activities"] - #[doc = " like `Undo/Follow`, which shouldn\'t perform any database write for the inner `Follow`."] - async fn verify(&self, _data: &Data<Self::DataType>) -> Result<(), Self::Error> { - Ok(()) - } - - #[doc = " Called when an activity is received."] - #[doc = ""] - #[doc = " Should perform validation and possibly write action to the database. In case the activity"] - #[doc = " has a nested `object` field, must call `object.from_json` handler."] - async fn receive(self, data: &Data<Self::DataType>) -> Result<(), Self::Error> { - let id = Uuid::now_v7(); - - sqlx::query!("insert into following (id, follower, followee) values ($1, $2, $3) on conflict (follower, followee) do nothing" - ,id, - self.actor.inner().as_str(), - self.object.inner().as_str(), - ).execute(&data.services.postgres).await?; - - let follower = self.actor.dereference(data).await?; - let id = generate_object_id(data.domain(), data.environment)?; - - let local_user = self.object.dereference(data).await?; - let accept = Accept::new(self.object.clone(), self, id.clone()); - - local_user - .send(accept, vec![follower.shared_inbox_or_inbox()], false, data) - .await?; - Ok(()) - } -} |