]> Untitled Git - lemmy.git/blobdiff - crates/apub/src/fetcher/user_or_community.rs
Diesel 2.0.0 upgrade (#2452)
[lemmy.git] / crates / apub / src / fetcher / user_or_community.rs
index 5f7c388ed0c7f768c774619782b0e30549106524..da23ad59a180a85395d27aa9f325e12fa8f4b014 100644 (file)
@@ -2,11 +2,12 @@ use crate::{
   objects::{community::ApubCommunity, person::ApubPerson},
   protocol::objects::{group::Group, person::Person},
 };
-use activitystreams::{chrono::NaiveDateTime, url::Url};
-use lemmy_apub_lib::traits::{ActorType, ApubObject};
-use lemmy_utils::LemmyError;
+use activitypub_federation::traits::{Actor, ApubObject};
+use chrono::NaiveDateTime;
+use lemmy_utils::error::LemmyError;
 use lemmy_websocket::LemmyContext;
-use serde::Deserialize;
+use serde::{Deserialize, Serialize};
+use url::Url;
 
 #[derive(Clone, Debug)]
 pub enum UserOrCommunity {
@@ -14,18 +15,25 @@ pub enum UserOrCommunity {
   Community(ApubCommunity),
 }
 
-#[derive(Deserialize)]
+#[derive(Serialize, Deserialize, Clone, Debug)]
 #[serde(untagged)]
 pub enum PersonOrGroup {
   Person(Person),
   Group(Group),
 }
 
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+pub enum PersonOrGroupType {
+  Person,
+  Group,
+}
+
 #[async_trait::async_trait(?Send)]
 impl ApubObject for UserOrCommunity {
   type DataType = LemmyContext;
   type ApubType = PersonOrGroup;
-  type TombstoneType = ();
+  type DbType = ();
+  type Error = LemmyError;
 
   fn last_refreshed_at(&self) -> Option<NaiveDateTime> {
     Some(match self {
@@ -34,6 +42,7 @@ impl ApubObject for UserOrCommunity {
     })
   }
 
+  #[tracing::instrument(skip_all)]
   async fn read_from_apub_id(
     object_id: Url,
     data: &Self::DataType,
@@ -47,6 +56,7 @@ impl ApubObject for UserOrCommunity {
     })
   }
 
+  #[tracing::instrument(skip_all)]
   async fn delete(self, data: &Self::DataType) -> Result<(), LemmyError> {
     match self {
       UserOrCommunity::User(p) => p.delete(data).await,
@@ -58,48 +68,49 @@ impl ApubObject for UserOrCommunity {
     unimplemented!()
   }
 
-  fn to_tombstone(&self) -> Result<Self::TombstoneType, LemmyError> {
-    unimplemented!()
+  #[tracing::instrument(skip_all)]
+  async fn verify(
+    apub: &Self::ApubType,
+    expected_domain: &Url,
+    data: &Self::DataType,
+    request_counter: &mut i32,
+  ) -> Result<(), LemmyError> {
+    match apub {
+      PersonOrGroup::Person(a) => {
+        ApubPerson::verify(a, expected_domain, data, request_counter).await
+      }
+      PersonOrGroup::Group(a) => {
+        ApubCommunity::verify(a, expected_domain, data, request_counter).await
+      }
+    }
   }
 
+  #[tracing::instrument(skip_all)]
   async fn from_apub(
     apub: Self::ApubType,
     data: &Self::DataType,
-    expected_domain: &Url,
     request_counter: &mut i32,
   ) -> Result<Self, LemmyError> {
     Ok(match apub {
-      PersonOrGroup::Person(p) => UserOrCommunity::User(
-        ApubPerson::from_apub(p, data, expected_domain, request_counter).await?,
-      ),
-      PersonOrGroup::Group(p) => UserOrCommunity::Community(
-        ApubCommunity::from_apub(p, data, expected_domain, request_counter).await?,
-      ),
+      PersonOrGroup::Person(p) => {
+        UserOrCommunity::User(ApubPerson::from_apub(p, data, request_counter).await?)
+      }
+      PersonOrGroup::Group(p) => {
+        UserOrCommunity::Community(ApubCommunity::from_apub(p, data, request_counter).await?)
+      }
     })
   }
 }
 
-impl ActorType for UserOrCommunity {
-  fn actor_id(&self) -> Url {
-    todo!()
-  }
-
-  fn public_key(&self) -> Option<String> {
+impl Actor for UserOrCommunity {
+  fn public_key(&self) -> &str {
     match self {
       UserOrCommunity::User(p) => p.public_key(),
       UserOrCommunity::Community(p) => p.public_key(),
     }
   }
 
-  fn private_key(&self) -> Option<String> {
-    todo!()
-  }
-
-  fn inbox_url(&self) -> Url {
-    todo!()
-  }
-
-  fn shared_inbox_url(&self) -> Option<Url> {
-    todo!()
+  fn inbox(&self) -> Url {
+    unimplemented!()
   }
 }