]> Untitled Git - lemmy.git/commitdiff
Use activitystreams-ext
authorFelix <me@nutomic.com>
Mon, 18 May 2020 16:15:26 +0000 (18:15 +0200)
committerFelix <me@nutomic.com>
Mon, 18 May 2020 16:15:26 +0000 (18:15 +0200)
server/Cargo.lock
server/Cargo.toml
server/src/apub/community.rs
server/src/apub/fetcher.rs
server/src/apub/mod.rs
server/src/apub/post.rs
server/src/apub/user.rs

index 0a59a6092de32deff7880674a4ae80946dbeab88..a8bddc69882cfb96434ac902c59526a3f1bd4b4d 100644 (file)
@@ -26,10 +26,20 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "activitystreams-ext"
+version = "0.1.0"
+source = "git+https://git.asonix.dog/asonix/activitystreams-ext#862426e504832256a6b26e1ec2198c0bda22139b"
+dependencies = [
+ "activitystreams-new",
+ "serde 1.0.110",
+ "serde_json 1.0.53",
+]
+
 [[package]]
 name = "activitystreams-new"
 version = "0.1.0"
-source = "git+https://git.asonix.dog/asonix/activitystreams-sketch#2fb52d32bbce9716c76e08579cf5c716366945fe"
+source = "git+https://git.asonix.dog/asonix/activitystreams-sketch#2cd88752996d702b355f0cd2c8dc991af00b3cae"
 dependencies = [
  "activitystreams",
  "serde 1.0.110",
@@ -1565,6 +1575,7 @@ name = "lemmy_server"
 version = "0.0.1"
 dependencies = [
  "activitystreams",
+ "activitystreams-ext",
  "activitystreams-new",
  "actix",
  "actix-files",
@@ -2093,18 +2104,18 @@ dependencies = [
 
 [[package]]
 name = "pin-project"
-version = "0.4.16"
+version = "0.4.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81d480cb4e89522ccda96d0eed9af94180b7a5f93fb28f66e1fd7d68431663d1"
+checksum = "edc93aeee735e60ecb40cf740eb319ff23eab1c5748abfdb5c180e4ce49f7791"
 dependencies = [
  "pin-project-internal",
 ]
 
 [[package]]
 name = "pin-project-internal"
-version = "0.4.16"
+version = "0.4.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a82996f11efccb19b685b14b5df818de31c1edcee3daa256ab5775dd98e72feb"
+checksum = "e58db2081ba5b4c93bd6be09c40fd36cb9193a8336c384f3b40012e531aa7e40"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2131,9 +2142,9 @@ checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
 
 [[package]]
 name = "ppv-lite86"
-version = "0.2.7"
+version = "0.2.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1e4df3c96bec4c7ce0e32fe5960c98ffc869443ec9592a0411ca1ee96e5e2f0"
+checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea"
 
 [[package]]
 name = "pq-sys"
@@ -2183,9 +2194,9 @@ dependencies = [
 
 [[package]]
 name = "quote"
-version = "1.0.5"
+version = "1.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42934bc9c8ab0d3b273a16d8551c8f0fcff46be73276ca083ec2414c15c4ba5e"
+checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea"
 dependencies = [
  "proc-macro2",
 ]
@@ -3028,8 +3039,9 @@ checksum = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d"
 
 [[package]]
 name = "typed-builder"
-version = "0.5.1"
-source = "git+https://git.asonix.dog/asonix/typed-builder#3dadcaaa6184ef720093c8f0632a7d423d2537b0"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85fc4459191c621a53ef6c6ca5642e6e0e5ccc61f3e5b8ad6b6ab5317f0200fb"
 dependencies = [
  "proc-macro2",
  "quote",
index a28f98e88a4d5644a9f49b0ed0baf99ba41f605d..ddc6e7666389183e049d310462db18a84f755e12 100644 (file)
@@ -4,15 +4,13 @@ version = "0.0.1"
 authors = ["Dessalines <happydooby@gmail.com>"]
 edition = "2018"
 
-[patch.crates-io]
-typed-builder = { git = "https://git.asonix.dog/asonix/typed-builder" }
-
 [dependencies]
 diesel = { version = "1.4.4", features = ["postgres","chrono","r2d2","64-column-tables","serde_json"] }
 diesel_migrations = "1.4.0"
 dotenv = "0.15.0"
 activitystreams = "0.6.2"
-activitystreams-new = { version = "0.1.0", git = "https://git.asonix.dog/asonix/activitystreams-sketch" }
+activitystreams-new = { git = "https://git.asonix.dog/asonix/activitystreams-sketch" }
+activitystreams-ext = { git = "https://git.asonix.dog/asonix/activitystreams-ext" }
 bcrypt = "0.8.0"
 chrono = { version = "0.4.7", features = ["serde"] }
 failure = "0.1.8"
index d91cb4ba103f5044ae1b9886092047f50c76bc73..bc92449242e9d2f61c2f3bbccb2027a1af41edc1 100644 (file)
@@ -28,10 +28,10 @@ use activitystreams::{
   collection::UnorderedCollection,
   context,
   endpoint::EndpointProperties,
-  ext::Extensible,
   object::{properties::ObjectProperties, Tombstone},
   BaseBox,
 };
+use activitystreams_ext::Ext3;
 use actix_web::{body::Body, web::Path, HttpResponse, Result};
 use diesel::PgConnection;
 use failure::Error;
@@ -91,12 +91,12 @@ impl ToApub for Community {
 
     let group_extension = GroupExtension::new(conn, self.category_id, self.nsfw)?;
 
-    Ok(
-      group
-        .extend(group_extension)
-        .extend(actor_props)
-        .extend(self.get_public_key_ext()),
-    )
+    Ok(Ext3::new(
+      group,
+      group_extension,
+      actor_props,
+      self.get_public_key_ext(),
+    ))
   }
 
   fn to_tombstone(&self) -> Result<Tombstone, Error> {
@@ -161,7 +161,7 @@ impl ActorType for Community {
     delete
       .delete_props
       .set_actor_xsd_any_uri(creator.actor_id.to_owned())?
-      .set_object_base_box(group)?;
+      .set_object_base_box(BaseBox::from_concrete(group)?)?;
 
     insert_activity(&conn, self.creator_id, &delete, true)?;
 
@@ -186,7 +186,7 @@ impl ActorType for Community {
     delete
       .delete_props
       .set_actor_xsd_any_uri(creator.actor_id.to_owned())?
-      .set_object_base_box(group)?;
+      .set_object_base_box(BaseBox::from_concrete(group)?)?;
 
     // TODO
     // Undo that fake activity
@@ -227,7 +227,7 @@ impl ActorType for Community {
     remove
       .remove_props
       .set_actor_xsd_any_uri(mod_.actor_id.to_owned())?
-      .set_object_base_box(group)?;
+      .set_object_base_box(BaseBox::from_concrete(group)?)?;
 
     insert_activity(&conn, mod_.id, &remove, true)?;
 
@@ -252,7 +252,7 @@ impl ActorType for Community {
     remove
       .remove_props
       .set_actor_xsd_any_uri(mod_.actor_id.to_owned())?
-      .set_object_base_box(group)?;
+      .set_object_base_box(BaseBox::from_concrete(group)?)?;
 
     // Undo that fake activity
     let undo_id = format!("{}/undo/remove/{}", self.actor_id, uuid::Uuid::new_v4());
@@ -316,10 +316,10 @@ impl FromApub for CommunityForm {
 
   /// Parse an ActivityPub group received from another instance into a Lemmy community.
   fn from_apub(group: &GroupExt, conn: &PgConnection) -> Result<Self, Error> {
-    let group_extensions: &GroupExtension = &group.base.base.extension;
-    let oprops = &group.base.base.base.object_props;
-    let aprops = &group.base.extension;
-    let public_key: &PublicKey = &group.extension.public_key;
+    let group_extensions: &GroupExtension = &group.ext_one;
+    let oprops = &group.inner.object_props;
+    let aprops = &group.ext_two;
+    let public_key: &PublicKey = &group.ext_three.public_key;
 
     let mut creator_and_moderator_uris = oprops.get_many_attributed_to_xsd_any_uris().unwrap();
     let creator = creator_and_moderator_uris
index 9379dd96b98948f77241e171f6a2ea767ef690ca..4027166428eef07ea22b98dc6dccb973afa5b6f4 100644 (file)
@@ -125,12 +125,12 @@ pub fn search_by_apub_id(query: &str, conn: &PgConnection) -> Result<SearchRespo
   };
   match fetch_remote_object::<SearchAcceptedObjects>(&query_url)? {
     SearchAcceptedObjects::Person(p) => {
-      let user_uri = p.base.base.object_props.get_id().unwrap().to_string();
+      let user_uri = p.inner.object_props.get_id().unwrap().to_string();
       let user = get_or_fetch_and_upsert_remote_user(&user_uri, &conn)?;
       response.users = vec![UserView::read(conn, user.id)?];
     }
     SearchAcceptedObjects::Group(g) => {
-      let community_uri = g.base.base.base.object_props.get_id().unwrap().to_string();
+      let community_uri = g.inner.object_props.get_id().unwrap().to_string();
       let community = get_or_fetch_and_upsert_remote_community(&community_uri, &conn)?;
       // TODO Maybe at some point in the future, fetch all the history of a community
       // fetch_community_outbox(&c, conn)?;
@@ -220,9 +220,7 @@ pub fn get_or_fetch_and_upsert_remote_community(
 
       // Also add the community moderators too
       let creator_and_moderator_uris = group
-        .base
-        .base
-        .base
+        .inner
         .object_props
         .get_many_attributed_to_xsd_any_uris()
         .unwrap();
index 3b0872061dface89b96f348a1afb54d8c08eea5c..805e6a0c3236b7f121aa8241ee50452463566f79 100644 (file)
@@ -25,9 +25,9 @@ use crate::{
 use activitystreams::{
   activity::Follow,
   actor::{properties::ApActorProperties, Group, Person},
-  ext::Ext,
   object::{Page, Tombstone},
 };
+use activitystreams_ext::{Ext1, Ext2, Ext3};
 use actix_web::{body::Body, HttpResponse, Result};
 use chrono::NaiveDateTime;
 use diesel::PgConnection;
@@ -37,9 +37,9 @@ use log::debug;
 use serde::Serialize;
 use url::Url;
 
-type GroupExt = Ext<Ext<Ext<Group, GroupExtension>, ApActorProperties>, PublicKeyExtension>;
-type PersonExt = Ext<Ext<Person, ApActorProperties>, PublicKeyExtension>;
-type PageExt = Ext<Page, PageExtension>;
+type GroupExt = Ext3<Group, GroupExtension, ApActorProperties, PublicKeyExtension>;
+type PersonExt = Ext2<Person, ApActorProperties, PublicKeyExtension>;
+type PageExt = Ext1<Page, PageExtension>;
 
 pub static APUB_JSON_CONTENT_TYPE: &str = "application/activity+json";
 
index b96f79ebf54ac5c456a565aa89b2b1c76eaf6d5e..23f18a5c58118bb53c91ee6f0f75c232a07b3f8b 100644 (file)
@@ -26,9 +26,10 @@ use crate::{
 use activitystreams::{
   activity::{Create, Delete, Dislike, Like, Remove, Undo, Update},
   context,
-  ext::Extensible,
   object::{kind::PageType, properties::ObjectProperties, Page, Tombstone},
+  BaseBox,
 };
+use activitystreams_ext::Ext1;
 use actix_web::{body::Body, web::Path, HttpResponse, Result};
 use diesel::PgConnection;
 use failure::Error;
@@ -95,7 +96,7 @@ impl ToApub for Post {
       comments_enabled: !self.locked,
       sensitive: self.nsfw,
     };
-    Ok(page.extend(ext))
+    Ok(Ext1::new(page, ext))
   }
 
   fn to_tombstone(&self) -> Result<Tombstone, Error> {
@@ -113,9 +114,8 @@ impl FromApub for PostForm {
 
   /// Parse an ActivityPub page received from another instance into a Lemmy post.
   fn from_apub(page: &PageExt, conn: &PgConnection) -> Result<PostForm, Error> {
-    let ext = &page.extension;
-    let page = &page.base;
-    let oprops = &page.object_props;
+    let ext = &page.ext_one;
+    let oprops = &page.inner.object_props;
     let creator_actor_id = &oprops.get_attributed_to_xsd_any_uri().unwrap().to_string();
     let creator = get_or_fetch_and_upsert_remote_user(&creator_actor_id, &conn)?;
     let community_actor_id = &oprops.get_to_xsd_any_uri().unwrap().to_string();
@@ -164,7 +164,7 @@ impl ApubObjectType for Post {
     create
       .create_props
       .set_actor_xsd_any_uri(creator.actor_id.to_owned())?
-      .set_object_base_box(page)?;
+      .set_object_base_box(BaseBox::from_concrete(page)?)?;
 
     insert_activity(&conn, creator.id, &create, true)?;
 
@@ -187,7 +187,7 @@ impl ApubObjectType for Post {
     update
       .update_props
       .set_actor_xsd_any_uri(creator.actor_id.to_owned())?
-      .set_object_base_box(page)?;
+      .set_object_base_box(BaseBox::from_concrete(page)?)?;
 
     insert_activity(&conn, creator.id, &update, true)?;
 
@@ -210,7 +210,7 @@ impl ApubObjectType for Post {
     delete
       .delete_props
       .set_actor_xsd_any_uri(creator.actor_id.to_owned())?
-      .set_object_base_box(page)?;
+      .set_object_base_box(BaseBox::from_concrete(page)?)?;
 
     insert_activity(&conn, self.creator_id, &delete, true)?;
 
@@ -234,7 +234,7 @@ impl ApubObjectType for Post {
     delete
       .delete_props
       .set_actor_xsd_any_uri(creator.actor_id.to_owned())?
-      .set_object_base_box(page)?;
+      .set_object_base_box(BaseBox::from_concrete(page)?)?;
 
     // TODO
     // Undo that fake activity
@@ -274,7 +274,7 @@ impl ApubObjectType for Post {
     remove
       .remove_props
       .set_actor_xsd_any_uri(mod_.actor_id.to_owned())?
-      .set_object_base_box(page)?;
+      .set_object_base_box(BaseBox::from_concrete(page)?)?;
 
     insert_activity(&conn, mod_.id, &remove, true)?;
 
@@ -297,7 +297,7 @@ impl ApubObjectType for Post {
     remove
       .remove_props
       .set_actor_xsd_any_uri(mod_.actor_id.to_owned())?
-      .set_object_base_box(page)?;
+      .set_object_base_box(BaseBox::from_concrete(page)?)?;
 
     // Undo that fake activity
     let undo_id = format!("{}/undo/remove/{}", self.ap_id, uuid::Uuid::new_v4());
@@ -337,7 +337,7 @@ impl ApubLikeableType for Post {
     like
       .like_props
       .set_actor_xsd_any_uri(creator.actor_id.to_owned())?
-      .set_object_base_box(page)?;
+      .set_object_base_box(BaseBox::from_concrete(page)?)?;
 
     insert_activity(&conn, creator.id, &like, true)?;
 
@@ -359,7 +359,7 @@ impl ApubLikeableType for Post {
     dislike
       .dislike_props
       .set_actor_xsd_any_uri(creator.actor_id.to_owned())?
-      .set_object_base_box(page)?;
+      .set_object_base_box(BaseBox::from_concrete(page)?)?;
 
     insert_activity(&conn, creator.id, &dislike, true)?;
 
@@ -381,7 +381,7 @@ impl ApubLikeableType for Post {
     like
       .like_props
       .set_actor_xsd_any_uri(creator.actor_id.to_owned())?
-      .set_object_base_box(page)?;
+      .set_object_base_box(BaseBox::from_concrete(page)?)?;
 
     // TODO
     // Undo that fake activity
index dac6bc313bd0ea25b059bd7c71ae55574d524035..a2958b159dd30bad2acf5a8d0dbc23c599c4b9a7 100644 (file)
@@ -21,9 +21,9 @@ use activitystreams::{
   actor::{properties::ApActorProperties, Person},
   context,
   endpoint::EndpointProperties,
-  ext::Extensible,
   object::{properties::ObjectProperties, Tombstone},
 };
+use activitystreams_ext::Ext2;
 use actix_web::{body::Body, web::Path, HttpResponse, Result};
 use diesel::PgConnection;
 use failure::Error;
@@ -70,7 +70,7 @@ impl ToApub for User_ {
       .set_following(self.get_following_url())?
       .set_liked(self.get_liked_url())?;
 
-    Ok(person.extend(actor_props).extend(self.get_public_key_ext()))
+    Ok(Ext2::new(person, actor_props, self.get_public_key_ext()))
   }
   fn to_tombstone(&self) -> Result<Tombstone, Error> {
     unimplemented!()
@@ -177,9 +177,9 @@ impl FromApub for UserForm {
   type ApubType = PersonExt;
   /// Parse an ActivityPub person received from another instance into a Lemmy user.
   fn from_apub(person: &PersonExt, _conn: &PgConnection) -> Result<Self, Error> {
-    let oprops = &person.base.base.object_props;
-    let aprops = &person.base.extension;
-    let public_key: &PublicKey = &person.extension.public_key;
+    let oprops = &person.inner.object_props;
+    let aprops = &person.ext_one;
+    let public_key: &PublicKey = &person.ext_two.public_key;
 
     Ok(UserForm {
       name: oprops.get_name_xsd_string().unwrap().to_string(),