]> Untitled Git - lemmy.git/commitdiff
Merge pull request #1921 from LemmyNet/fix_login
authorNutomic <me@nutomic.com>
Mon, 22 Nov 2021 13:05:57 +0000 (13:05 +0000)
committerGitHub <noreply@github.com>
Mon, 22 Nov 2021 13:05:57 +0000 (13:05 +0000)
Fix login ilike bug. Fixes #1920

crates/apub/src/activities/community/announce.rs
crates/apub/src/activity_lists.rs
crates/apub/src/protocol/activities/mod.rs
crates/apub/src/protocol/objects/note.rs
crates/routes/src/nodeinfo.rs

index a86317b52067d7f3323cf7680e10230e19a71f64..9d76b5240efd238a04d7accb46ee5ad922e3d0ce 100644 (file)
@@ -4,7 +4,7 @@ use crate::{
   http::{is_activity_already_known, ActivityCommonFields},
   insert_activity,
   objects::community::ApubCommunity,
-  protocol::activities::community::announce::AnnounceActivity,
+  protocol::activities::{community::announce::AnnounceActivity, CreateOrUpdateType},
 };
 use activitystreams::{activity::kind::AnnounceType, public};
 use lemmy_apub_lib::{
@@ -61,13 +61,11 @@ impl AnnounceActivity {
     )
     .await?;
 
-    // Pleroma (and likely Mastodon) can't handle activities like Announce/Create/Page. So for
-    // compatibility to allow them to follow Lemmy communities, we also send Announce/Page and
-    // Announce/Note (for new and updated posts/comments).
+    // Pleroma and Mastodon can't handle activities like Announce/Create/Page. So for
+    // compatibility, we also send Announce/Page so that they can follow Lemmy communities.
     use AnnouncableActivities::*;
     let object = match object {
-      CreateOrUpdatePost(c) => Page(c.object),
-      CreateOrUpdateComment(c) => Note(c.object),
+      CreateOrUpdatePost(c) if c.kind == CreateOrUpdateType::Create => Page(c.object),
       _ => return Ok(()),
     };
     let announce_compat = AnnounceActivity::new(object, community, context)?;
@@ -106,7 +104,7 @@ impl ActivityHandler for AnnounceActivity {
     // TODO: this can probably be implemented in a cleaner way
     match self.object {
       // Dont insert these into activities table, as they are not activities.
-      AnnouncableActivities::Page(_) | AnnouncableActivities::Note(_) => {}
+      AnnouncableActivities::Page(_) => {}
       _ => {
         let object_value = serde_json::to_value(&self.object)?;
         let object_data: ActivityCommonFields = serde_json::from_value(object_value.to_owned())?;
index 00d2d439f4da7a643095beb984e24e8818293a06..d9b9764964b57459ebd59f3f9cb9322c27d22b99 100644 (file)
@@ -26,7 +26,7 @@ use crate::{
       },
       voting::{undo_vote::UndoVote, vote::Vote},
     },
-    objects::{note::Note, page::Page},
+    objects::page::Page,
   },
 };
 use lemmy_apub_lib::traits::ActivityHandler;
@@ -84,8 +84,6 @@ pub enum AnnouncableActivities {
   RemoveMod(RemoveMod),
   // For compatibility with Pleroma/Mastodon (send only)
   Page(Page),
-  // For compatibility with Pleroma/Mastodon (send only)
-  Note(Note),
 }
 
 #[async_trait::async_trait(?Send)]
@@ -109,7 +107,6 @@ impl GetCommunity for AnnouncableActivities {
       AddMod(a) => a.get_community(context, request_counter).await?,
       RemoveMod(a) => a.get_community(context, request_counter).await?,
       Page(_) => unimplemented!(),
-      Note(_) => unimplemented!(),
     };
     Ok(community)
   }
index 23575c2797ab013c6a43fd2a7e826c0330c14bdb..63bd7656bda8b22fbcc55bf2e8a98082bedeac06 100644 (file)
@@ -8,7 +8,7 @@ pub mod following;
 pub mod private_message;
 pub mod voting;
 
-#[derive(Clone, Debug, ToString, Deserialize, Serialize)]
+#[derive(Clone, Debug, ToString, Deserialize, Serialize, PartialEq)]
 pub enum CreateOrUpdateType {
   Create,
   Update,
index fdd6ddd96849e812a567f5b1047ba90c7685cb33..883a1a994fcb5ab9269be498e092c53e9edf4a1e 100644 (file)
@@ -4,15 +4,9 @@ use crate::{
   protocol::Source,
 };
 use activitystreams::{link::Mention, object::kind::NoteType, unparsed::Unparsed};
-use anyhow::anyhow;
 use chrono::{DateTime, FixedOffset};
 use lemmy_api_common::blocking;
-use lemmy_apub_lib::{
-  data::Data,
-  object_id::ObjectId,
-  traits::ActivityHandler,
-  values::MediaTypeHtml,
-};
+use lemmy_apub_lib::{object_id::ObjectId, values::MediaTypeHtml};
 use lemmy_db_schema::{newtypes::CommentId, source::post::Post, traits::Crud};
 use lemmy_utils::LemmyError;
 use lemmy_websocket::LemmyContext;
@@ -89,15 +83,3 @@ impl Note {
     }
   }
 }
-
-// For Pleroma/Mastodon compat. Unimplemented because its only used for sending.
-#[async_trait::async_trait(?Send)]
-impl ActivityHandler for Note {
-  type DataType = LemmyContext;
-  async fn verify(&self, _: &Data<Self::DataType>, _: &mut i32) -> Result<(), LemmyError> {
-    Err(anyhow!("Announce/Page can only be sent, not received").into())
-  }
-  async fn receive(self, _: &Data<Self::DataType>, _: &mut i32) -> Result<(), LemmyError> {
-    unimplemented!()
-  }
-}
index 9e327efaef56536cb0cbb4f185f40e835246dffe..b30b9f977dcb038aa71123dd5ead263e2bb9d35b 100644 (file)
@@ -17,13 +17,13 @@ async fn node_info_well_known(
   context: web::Data<LemmyContext>,
 ) -> Result<HttpResponse<Body>, LemmyError> {
   let node_info = NodeInfoWellKnown {
-    links: NodeInfoWellKnownLinks {
+    links: vec![NodeInfoWellKnownLinks {
       rel: Url::parse("http://nodeinfo.diaspora.software/ns/schema/2.0")?,
       href: Url::parse(&format!(
         "{}/nodeinfo/2.0.json",
         &context.settings().get_protocol_and_hostname(),
       ))?,
-    },
+    }],
   };
   Ok(HttpResponse::Ok().json(node_info))
 }
@@ -63,7 +63,7 @@ async fn node_info(context: web::Data<LemmyContext>) -> Result<HttpResponse, Err
 
 #[derive(Serialize, Deserialize, Debug)]
 struct NodeInfoWellKnown {
-  pub links: NodeInfoWellKnownLinks,
+  pub links: Vec<NodeInfoWellKnownLinks>,
 }
 
 #[derive(Serialize, Deserialize, Debug)]