]> Untitled Git - lemmy.git/commitdiff
In activity table, remove `user_id` and add `sensitive` (#127)
authornutomic <nutomic@noreply.yerbamate.ml>
Fri, 6 Nov 2020 13:06:47 +0000 (13:06 +0000)
committerdessalines <dessalines@noreply.yerbamate.ml>
Fri, 6 Nov 2020 13:06:47 +0000 (13:06 +0000)
Forgot to add migrations

Add `sensitive` column to activities table, so PMs arent served over HTTP

Remove user_id column from actvity table

Co-authored-by: Felix Ableitner <me@nutomic.com>
Reviewed-on: https://yerbamate.ml/LemmyNet/lemmy/pulls/127

12 files changed:
lemmy_apub/src/activities/send/community.rs
lemmy_apub/src/activities/send/user.rs
lemmy_apub/src/activity_queue.rs
lemmy_apub/src/http/mod.rs
lemmy_apub/src/inbox/community_inbox.rs
lemmy_apub/src/inbox/shared_inbox.rs
lemmy_apub/src/inbox/user_inbox.rs
lemmy_apub/src/lib.rs
lemmy_db/src/activity.rs
lemmy_db/src/schema.rs
migrations/2020-11-05-152724_activity_remove_user_id/down.sql [new file with mode: 0644]
migrations/2020-11-05-152724_activity_remove_user_id/up.sql [new file with mode: 0644]

index cdcc967079c1a85cb35e2a419b21d9353da5e668..2373596f3c9ec3de87239bcb1fc5c1fac51f71a9 100644 (file)
@@ -41,10 +41,6 @@ impl ActorType for Community {
     self.private_key.to_owned()
   }
 
-  fn user_id(&self) -> i32 {
-    self.creator_id
-  }
-
   async fn send_follow(
     &self,
     _follow_actor_id: &Url,
index bd791e5e3b876965bf2ffb63b28c4e81cca41bce..39b10ef5fa042e3594d8c42ddb38471794f4f9eb 100644 (file)
@@ -32,10 +32,6 @@ impl ActorType for User_ {
     self.private_key.to_owned()
   }
 
-  fn user_id(&self) -> i32 {
-    self.id
-  }
-
   /// As a given local user, send out a follow request to a remote community.
   async fn send_follow(
     &self,
index c8c8af37e7cdf9bcdd2804795f547f7c29964792..5e4f113b5dc0fd9c5c98386c8b9676bb2a2af095 100644 (file)
@@ -57,6 +57,7 @@ where
       vec![inbox],
       context.pool(),
       true,
+      true,
     )
     .await?;
   }
@@ -102,6 +103,7 @@ where
     follower_inboxes,
     context.pool(),
     true,
+    false,
   )
   .await?;
 
@@ -145,6 +147,7 @@ where
       vec![inbox],
       context.pool(),
       true,
+      false,
     )
     .await?;
   }
@@ -185,6 +188,7 @@ where
     mentions,
     context.pool(),
     false, // Don't create a new DB row
+    false,
   )
   .await?;
   Ok(())
@@ -202,6 +206,7 @@ async fn send_activity_internal<T, Kind>(
   inboxes: Vec<Url>,
   pool: &DbPool,
   insert_into_db: bool,
+  sensitive: bool,
 ) -> Result<(), LemmyError>
 where
   T: AsObject<Kind> + Extends<Kind> + Debug,
@@ -219,7 +224,7 @@ where
   // might send the same ap_id
   if insert_into_db {
     let id = activity.id().context(location_info!())?;
-    insert_activity(id, actor.user_id(), activity.clone(), true, pool).await?;
+    insert_activity(id, activity.clone(), true, sensitive, pool).await?;
   }
 
   for i in inboxes {
index 9f6c766c266f15e6188c466852c9639bc7d57595..91af36b2dd315a4d9028371d3f37ea75f734fe81 100644 (file)
@@ -54,5 +54,9 @@ pub async fn get_activity(
   })
   .await??;
 
-  Ok(create_apub_response(&activity.data))
+  if !activity.local || activity.sensitive {
+    Ok(HttpResponse::NotFound().finish())
+  } else {
+    Ok(create_apub_response(&activity.data))
+  }
 }
index ffc5f6d71a767598b45a236b933226a6fce0d469..b80d739a7fbf386749623402c97b5fcd634641dc 100644 (file)
@@ -88,20 +88,12 @@ pub async fn community_inbox(
 
   let any_base = activity.clone().into_any_base()?;
   let kind = activity.kind().context(location_info!())?;
-  let user_id = user.id;
   let res = match kind {
     ValidTypes::Follow => handle_follow(any_base, user, community, &context).await,
     ValidTypes::Undo => handle_undo_follow(any_base, user, community, &context).await,
   };
 
-  insert_activity(
-    &activity_id,
-    user_id,
-    activity.clone(),
-    false,
-    context.pool(),
-  )
-  .await?;
+  insert_activity(&activity_id, activity.clone(), false, true, context.pool()).await?;
   res
 }
 
index 4457a1a6df12ff546b25cf3837e712f5cb7467a1..3b07400d6119f6e276150318c5c29e2663db4ebd 100644 (file)
@@ -125,14 +125,7 @@ pub async fn shared_inbox(
     ValidTypes::Undo => receive_undo(&context, any_base, actor_id, request_counter).await,
   };
 
-  insert_activity(
-    &activity_id,
-    actor.user_id(),
-    activity.clone(),
-    false,
-    context.pool(),
-  )
-  .await?;
+  insert_activity(&activity_id, activity.clone(), false, true, context.pool()).await?;
   res
 }
 
index 653a447c5489dec347f57524ecd8489a18ed1b29..45fa5ee7338eb0ddc854e4aae8a5ac14177475ec 100644 (file)
@@ -107,14 +107,7 @@ pub async fn user_inbox(
     }
   };
 
-  insert_activity(
-    &activity_id,
-    actor.user_id(),
-    activity.clone(),
-    false,
-    context.pool(),
-  )
-  .await?;
+  insert_activity(&activity_id, activity.clone(), false, true, context.pool()).await?;
   res
 }
 
index e7410ee253aa628a72c411923378c335cacda864..4894b036f6df5ea6a380fc3c409ec3483c63f1eb 100644 (file)
@@ -169,9 +169,6 @@ pub trait ActorType {
   fn public_key(&self) -> Option<String>;
   fn private_key(&self) -> Option<String>;
 
-  /// numeric id in the database, used for insert_activity
-  fn user_id(&self) -> i32;
-
   async fn send_follow(
     &self,
     follow_actor_id: &Url,
@@ -252,9 +249,9 @@ pub trait ActorType {
 /// persistent.
 pub async fn insert_activity<T>(
   ap_id: &Url,
-  user_id: i32,
   activity: T,
   local: bool,
+  sensitive: bool,
   pool: &DbPool,
 ) -> Result<(), LemmyError>
 where
@@ -262,7 +259,7 @@ where
 {
   let ap_id = ap_id.to_string();
   blocking(pool, move |conn| {
-    Activity::insert(conn, ap_id, user_id, &activity, local)
+    Activity::insert(conn, ap_id, &activity, local, sensitive)
   })
   .await??;
   Ok(())
index 539820fc2e0c2f975d0e2d1ba43e8a816ff6f15b..b0ec1df69a22af2b30e0450ebd67aa27bfc9ebe4 100644 (file)
@@ -13,9 +13,9 @@ use std::{
 pub struct Activity {
   pub id: i32,
   pub ap_id: String,
-  pub user_id: i32,
   pub data: Value,
   pub local: bool,
+  pub sensitive: bool,
   pub published: chrono::NaiveDateTime,
   pub updated: Option<chrono::NaiveDateTime>,
 }
@@ -24,9 +24,9 @@ pub struct Activity {
 #[table_name = "activity"]
 pub struct ActivityForm {
   pub ap_id: String,
-  pub user_id: i32,
   pub data: Value,
   pub local: bool,
+  pub sensitive: bool,
   pub updated: Option<chrono::NaiveDateTime>,
 }
 
@@ -59,20 +59,19 @@ impl Activity {
   pub fn insert<T>(
     conn: &PgConnection,
     ap_id: String,
-    user_id: i32,
     data: &T,
     local: bool,
+    sensitive: bool,
   ) -> Result<Self, IoError>
   where
     T: Serialize + Debug,
   {
-    debug!("inserting activity for user {}: ", user_id);
     debug!("{}", serde_json::to_string_pretty(&data)?);
     let activity_form = ActivityForm {
       ap_id,
-      user_id,
       data: serde_json::to_value(&data)?,
       local,
+      sensitive,
       updated: None,
     };
     let result = Activity::create(&conn, &activity_form);
@@ -154,9 +153,9 @@ mod tests {
     .unwrap();
     let activity_form = ActivityForm {
       ap_id: ap_id.to_string(),
-      user_id: inserted_creator.id,
       data: test_json.to_owned(),
       local: true,
+      sensitive: false,
       updated: None,
     };
 
@@ -165,9 +164,9 @@ mod tests {
     let expected_activity = Activity {
       ap_id: ap_id.to_string(),
       id: inserted_activity.id,
-      user_id: inserted_creator.id,
       data: test_json,
       local: true,
+      sensitive: false,
       published: inserted_activity.published,
       updated: None,
     };
index c755009b10e69b6f169f1908439fdbd807c69607..ec1e259958efe7d16bb00c34309bcadea29b3805 100644 (file)
@@ -2,9 +2,9 @@ table! {
     activity (id) {
         id -> Int4,
         ap_id -> Text,
-        user_id -> Int4,
         data -> Jsonb,
         local -> Bool,
+        sensitive -> Bool,
         published -> Timestamp,
         updated -> Nullable<Timestamp>,
     }
@@ -481,7 +481,6 @@ table! {
     }
 }
 
-joinable!(activity -> user_ (user_id));
 joinable!(comment -> post (post_id));
 joinable!(comment -> user_ (creator_id));
 joinable!(comment_like -> comment (comment_id));
diff --git a/migrations/2020-11-05-152724_activity_remove_user_id/down.sql b/migrations/2020-11-05-152724_activity_remove_user_id/down.sql
new file mode 100644 (file)
index 0000000..bb093f1
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE activity ADD COLUMN user_id INTEGER;
+ALTER TABLE activity DROP COLUMN sensitive;
\ No newline at end of file
diff --git a/migrations/2020-11-05-152724_activity_remove_user_id/up.sql b/migrations/2020-11-05-152724_activity_remove_user_id/up.sql
new file mode 100644 (file)
index 0000000..22a1a2f
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE activity DROP COLUMN user_id;
+ALTER TABLE activity ADD COLUMN sensitive BOOLEAN DEFAULT TRUE;
\ No newline at end of file