diff --git a/crates/apub/assets/gnusocial/activities/create_note.json b/crates/apub/assets/gnusocial/activities/create_note.json
new file mode 100644
index 000000000..9e4221bb4
--- /dev/null
+++ b/crates/apub/assets/gnusocial/activities/create_note.json
@@ -0,0 +1,53 @@
+{
+ "type": "Create",
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ "https://w3id.org/security/v1",
+ {
+ "gs": "https://www.gnu.org/software/social/ns#"
+ },
+ {
+ "litepub": "http://litepub.social/ns#"
+ },
+ {
+ "chatMessage": "litepub:chatMessage"
+ },
+ {
+ "inConversation": {
+ "@id": "gs:inConversation",
+ "@type": "@id"
+ }
+ }
+ ],
+ "id": "https://instance.gnusocial.test/activity/1339",
+ "published": "2022-03-01T20:58:48+00:00",
+ "actor": "https://instance.gnusocial.test/actor/42",
+ "object": {
+ "type": "Note",
+ "id": "https://instance.gnusocial.test/object/note/1339",
+ "published": "2022-03-01T21:00:16+00:00",
+ "attributedTo": "https://instance.gnusocial.test/actor/42",
+ "content": "
yay ^^
",
+ "mediaType": "text/html",
+ "source": {
+ "content": "yay ^^",
+ "mediaType": "text/plain"
+ },
+ "attachment": [],
+ "tag": [],
+ "inReplyTo": "https://instance.gnusocial.test/object/note/1338",
+ "inConversation": "https://instance.gnusocial.test/conversation/1338",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://instance.gnusocial.test/actor/42/subscribers"
+ ]
+ },
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://instance.gnusocial.test/actor/42/subscribers"
+ ]
+}
diff --git a/crates/apub/assets/gnusocial/activities/create_page.json b/crates/apub/assets/gnusocial/activities/create_page.json
new file mode 100644
index 000000000..2ce600cf7
--- /dev/null
+++ b/crates/apub/assets/gnusocial/activities/create_page.json
@@ -0,0 +1,53 @@
+{
+ "type": "Create",
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ "https://w3id.org/security/v1",
+ {
+ "gs": "https://www.gnu.org/software/social/ns#"
+ },
+ {
+ "litepub": "http://litepub.social/ns#"
+ },
+ {
+ "chatMessage": "litepub:chatMessage"
+ },
+ {
+ "inConversation": {
+ "@id": "gs:inConversation",
+ "@type": "@id"
+ }
+ }
+ ],
+ "id": "https://instance.gnusocial.test/activity/1338",
+ "published": "2022-03-17T23:30:26+00:00",
+ "actor": "https://instance.gnusocial.test/actor/42",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://instance.gnusocial.test/actor/21"
+ ],
+ "object": {
+ "type": "Page",
+ "id": "https://instance.gnusocial.test/object/note/1338",
+ "published": "2022-03-17T23:30:26+00:00",
+ "attributedTo": "https://instance.gnusocial.test/actor/42",
+ "name": "hello, world.",
+ "content": "This is an interesting page.
",
+ "mediaType": "text/html",
+ "source": {
+ "content": "This is an interesting page.",
+ "mediaType": "text/markdown"
+ },
+ "attachment": [],
+ "tag": [],
+ "inConversation": "https://instance.gnusocial.test/conversation/1338",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://instance.gnusocial.test/actor/21"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/crates/apub/assets/gnusocial/activities/like_note.json b/crates/apub/assets/gnusocial/activities/like_note.json
new file mode 100644
index 000000000..09ce40ef5
--- /dev/null
+++ b/crates/apub/assets/gnusocial/activities/like_note.json
@@ -0,0 +1,16 @@
+{
+ "type": "Like",
+ "@context": [
+ "https://www.w3.org/ns/activitystreams"
+ ],
+ "id": "https://another_instance.gnusocial.test/activity/41362",
+ "published": "2022-03-20T17:54:15+00:00",
+ "actor": "https://another_instance.gnusocial.test/actor/43",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://instance.gnusocial.test/actor/42"
+ ],
+ "object": "https://instance.gnusocial.test/object/note/1337"
+}
diff --git a/crates/apub/assets/gnusocial/objects/group.json b/crates/apub/assets/gnusocial/objects/group.json
new file mode 100644
index 000000000..9be83c2de
--- /dev/null
+++ b/crates/apub/assets/gnusocial/objects/group.json
@@ -0,0 +1,42 @@
+{
+ "type": "Group",
+ "streams": [],
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ "https://w3id.org/security/v1",
+ {
+ "gs": "https://www.gnu.org/software/social/ns#"
+ },
+ {
+ "litepub": "http://litepub.social/ns#"
+ },
+ {
+ "chatMessage": "litepub:chatMessage"
+ },
+ {
+ "inConversation": {
+ "@id": "gs:inConversation",
+ "@type": "@id"
+ }
+ }
+ ],
+ "id": "https://instance.gnusocial.test/actor/21",
+ "inbox": "https://instance.gnusocial.test/actor/21/inbox.json",
+ "outbox": "https://instance.gnusocial.test/actor/21/outbox.json",
+ "following": "https://instance.gnusocial.test/actor/21/subscriptions",
+ "followers": "https://instance.gnusocial.test/actor/21/subscribers",
+ "liked": "https://instance.gnusocial.test/actor/21/favourites",
+ "preferredUsername": "hackers",
+ "publicKey": {
+ "id": "https://instance.gnusocial.test/actor/2#public-key",
+ "owner": "https://instance.gnusocial.test/actor/2",
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoZyKL+GyJbTV/ilVBlzz\n8OL/UwNi3KpfV5kQwXU0pPcBbw6y2JOfWnKUT1CfiHG3ntiOFnc+wQfHZk4hRSE8\n9Xe/G5Y215xW+gqx/kjt2GOENqzSzYXdEZ5Qsx6yumZD/yb6VZK9Og0HjX2mpRs9\nbactY76w4BQVntjZ17gSkMhYcyPFZTAIe7QDkeSPk5lkXfTwtaB3YcJSbQ3+s7La\npeEgukQDkrLUIP6cxayKrgUl4fhHdpx1Yk4Bzd/1XkZCjeBca94lP1p2M12amI+Z\nOLSTuLyEiCcku8aN+Ms9plwATmIDaGvKFVk0YVtBHdIJlYXV0yIscab3bqyhsLBK\njwIDAQAB\n-----END PUBLIC KEY-----\n"
+ },
+ "name": "Hackers!",
+ "published": "2022-02-23T21:54:52+00:00",
+ "updated": "2022-02-23T21:55:16+00:00",
+ "url": "https://instance.gnusocial.test/!hackers",
+ "endpoints": {
+ "sharedInbox": "https://instance.gnusocial.test/inbox.json"
+ }
+}
diff --git a/crates/apub/assets/gnusocial/objects/note.json b/crates/apub/assets/gnusocial/objects/note.json
new file mode 100644
index 000000000..08f58a93b
--- /dev/null
+++ b/crates/apub/assets/gnusocial/objects/note.json
@@ -0,0 +1,44 @@
+{
+ "type": "Note",
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ "https://w3id.org/security/v1",
+ {
+ "gs": "https://www.gnu.org/software/social/ns#"
+ },
+ {
+ "litepub": "http://litepub.social/ns#"
+ },
+ {
+ "chatMessage": "litepub:chatMessage"
+ },
+ {
+ "inConversation": {
+ "@id": "gs:inConversation",
+ "@type": "@id"
+ }
+ },
+ {
+ "@language": "en"
+ }
+ ],
+ "id": "https://instance.gnusocial.test/object/note/1339",
+ "published": "2022-03-01T21:00:16+00:00",
+ "attributedTo": "https://instance.gnusocial.test/actor/42",
+ "content": "yay ^^
",
+ "mediaType": "text/html",
+ "source": {
+ "content": "yay ^^",
+ "mediaType": "text/plain"
+ },
+ "attachment": [],
+ "tag": [],
+ "inReplyTo": "https://instance.gnusocial.test/object/note/1338",
+ "inConversation": "https://instance.gnusocial.test/conversation/1338",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://instance.gnusocial.test/actor/42/subscribers"
+ ]
+}
diff --git a/crates/apub/assets/gnusocial/objects/page.json b/crates/apub/assets/gnusocial/objects/page.json
new file mode 100644
index 000000000..f66d28854
--- /dev/null
+++ b/crates/apub/assets/gnusocial/objects/page.json
@@ -0,0 +1,41 @@
+{
+ "type": "Page",
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ "https://w3id.org/security/v1",
+ {
+ "gs": "https://www.gnu.org/software/social/ns#"
+ },
+ {
+ "litepub": "http://litepub.social/ns#"
+ },
+ {
+ "chatMessage": "litepub:chatMessage"
+ },
+ {
+ "inConversation": {
+ "@id": "gs:inConversation",
+ "@type": "@id"
+ }
+ }
+ ],
+ "id": "https://instance.gnusocial.test/object/note/1338",
+ "published": "2022-03-17T23:30:26+00:00",
+ "attributedTo": "https://instance.gnusocial.test/actor/42",
+ "name": "hello, world.",
+ "content": "This is an interesting page.
",
+ "mediaType": "text/html",
+ "source": {
+ "content": "This is an interesting page.",
+ "mediaType": "text/markdown"
+ },
+ "attachment": [],
+ "tag": [],
+ "inConversation": "https://instance.gnusocial.test/conversation/1338",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://instance.gnusocial.test/actor/21"
+ ]
+}
diff --git a/crates/apub/assets/gnusocial/objects/person.json b/crates/apub/assets/gnusocial/objects/person.json
new file mode 100644
index 000000000..c6338437b
--- /dev/null
+++ b/crates/apub/assets/gnusocial/objects/person.json
@@ -0,0 +1,42 @@
+{
+ "type": "Person",
+ "streams": [],
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ "https://w3id.org/security/v1",
+ {
+ "gs": "https://www.gnu.org/software/social/ns#"
+ },
+ {
+ "litepub": "http://litepub.social/ns#"
+ },
+ {
+ "chatMessage": "litepub:chatMessage"
+ },
+ {
+ "inConversation": {
+ "@id": "gs:inConversation",
+ "@type": "@id"
+ }
+ }
+ ],
+ "id": "https://instance.gnusocial.test/actor/42",
+ "inbox": "https://instance.gnusocial.test/actor/42/inbox.json",
+ "outbox": "https://instance.gnusocial.test/actor/42/outbox.json",
+ "following": "https://instance.gnusocial.test/actor/42/subscriptions",
+ "followers": "https://instance.gnusocial.test/actor/42/subscribers",
+ "liked": "https://instance.gnusocial.test/actor/42/favourites",
+ "preferredUsername": "diogo",
+ "publicKey": {
+ "id": "https://instance.gnusocial.test/actor/42#public-key",
+ "owner": "https://instance.gnusocial.test/actor/42",
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArBB+3ldwA2qC1hQTtIho\n9KYhvvMlPdydn8dA6OlyIQ3Jy57ADt2e144jDSY5RQ3esmzWm2QqsI8rAsZsAraO\nl2+855y7Fw35WH4GBc7PJ6MLAEvMk1YWeS/rttXaDzh2i4n/AXkMuxDjS1IBqw2w\nn0qTz2sdGcBJ+mop6AB9Qt2lseBc5IW040jSnfLEDDIaYgoc5m2yRsjGKItOh3BG\njGHDb6JB9FySToSMGIt0/tE5k06wfvAxtkxX5dfGeKtciBpC2MGT169iyMIOM8DN\nFhSl8mowtV1NJQ7nN692USrmNvSJjqe9ugPCDPPvwQ5A6A61Qrgpz5pav/o5Sz69\nzQIDAQAB\n-----END PUBLIC KEY-----\n"
+ },
+ "name": "Diogo Peralta Cordeiro",
+ "published": "2022-02-23T17:20:30+00:00",
+ "updated": "2022-02-25T02:12:48+00:00",
+ "url": "https://instance.gnusocial.test/@diogo",
+ "endpoints": {
+ "sharedInbox": "https://instance.gnusocial.test/inbox.json"
+ }
+}
diff --git a/crates/apub/assets/lemmy/activities/voting/dislike_page.json b/crates/apub/assets/lemmy/activities/voting/dislike_page.json
index 822a9d357..6683a6663 100644
--- a/crates/apub/assets/lemmy/activities/voting/dislike_page.json
+++ b/crates/apub/assets/lemmy/activities/voting/dislike_page.json
@@ -1,11 +1,11 @@
{
"actor": "http://enterprise.lemmy.ml/u/lemmy_beta",
"to": [
- "https://www.w3.org/ns/activitystreams#Public"
+ "http://enterprise.lemmy.ml/c/main"
],
"object": "http://ds9.lemmy.ml/post/1",
"cc": [
- "http://enterprise.lemmy.ml/c/main"
+ "https://www.w3.org/ns/activitystreams#Public"
],
"type": "Dislike",
"id": "http://enterprise.lemmy.ml/activities/dislike/64d40d40-a829-43a5-8247-1fb595b3ca1c"
diff --git a/crates/apub/assets/lemmy/activities/voting/like_note.json b/crates/apub/assets/lemmy/activities/voting/like_note.json
index 35e969060..e9fc366ae 100644
--- a/crates/apub/assets/lemmy/activities/voting/like_note.json
+++ b/crates/apub/assets/lemmy/activities/voting/like_note.json
@@ -1,11 +1,11 @@
{
"actor": "http://ds9.lemmy.ml/u/lemmy_alpha",
"to": [
- "https://www.w3.org/ns/activitystreams#Public"
+ "http://enterprise.lemmy.ml/c/main"
],
"object": "http://ds9.lemmy.ml/comment/1",
"cc": [
- "http://enterprise.lemmy.ml/c/main"
+ "https://www.w3.org/ns/activitystreams#Public"
],
"type": "Like",
"id": "http://ds9.lemmy.ml/activities/like/fd61d070-7382-46a9-b2b7-6bb253732877"
diff --git a/crates/apub/assets/lemmy/activities/voting/undo_dislike_page.json b/crates/apub/assets/lemmy/activities/voting/undo_dislike_page.json
index 4123ebab4..2234e4104 100644
--- a/crates/apub/assets/lemmy/activities/voting/undo_dislike_page.json
+++ b/crates/apub/assets/lemmy/activities/voting/undo_dislike_page.json
@@ -1,22 +1,22 @@
{
"actor": "http://enterprise.lemmy.ml/u/lemmy_beta",
"to": [
- "https://www.w3.org/ns/activitystreams#Public"
+ "http://enterprise.lemmy.ml/c/main"
],
"object": {
"actor": "http://enterprise.lemmy.ml/u/lemmy_beta",
"to": [
- "https://www.w3.org/ns/activitystreams#Public"
+ "http://enterprise.lemmy.ml/c/main"
],
"object": "http://ds9.lemmy.ml/post/1",
"cc": [
- "http://enterprise.lemmy.ml/c/main"
+ "https://www.w3.org/ns/activitystreams#Public"
],
"type": "Like",
"id": "http://enterprise.lemmy.ml/activities/like/2227ab2c-79e2-4fca-a1d2-1d67dacf2457"
},
"cc": [
- "http://enterprise.lemmy.ml/c/main"
+ "https://www.w3.org/ns/activitystreams#Public"
],
"type": "Undo",
"id": "http://enterprise.lemmy.ml/activities/undo/6cc6fb71-39fe-49ea-9506-f0423b101e98"
diff --git a/crates/apub/assets/lemmy/activities/voting/undo_like_note.json b/crates/apub/assets/lemmy/activities/voting/undo_like_note.json
index 84a6efe50..e22c8fd1f 100644
--- a/crates/apub/assets/lemmy/activities/voting/undo_like_note.json
+++ b/crates/apub/assets/lemmy/activities/voting/undo_like_note.json
@@ -1,22 +1,22 @@
{
"actor": "http://ds9.lemmy.ml/u/lemmy_alpha",
"to": [
- "https://www.w3.org/ns/activitystreams#Public"
+ "http://enterprise.lemmy.ml/c/main"
],
"object": {
"actor": "http://ds9.lemmy.ml/u/lemmy_alpha",
"to": [
- "https://www.w3.org/ns/activitystreams#Public"
+ "http://enterprise.lemmy.ml/c/main"
],
"object": "http://ds9.lemmy.ml/comment/1",
"cc": [
- "http://enterprise.lemmy.ml/c/main"
+ "https://www.w3.org/ns/activitystreams#Public"
],
"type": "Like",
"id": "http://ds9.lemmy.ml/activities/like/efcf7ae2-dfcc-4ff4-9ce4-6adf251ff004"
},
"cc": [
- "http://enterprise.lemmy.ml/c/main"
+ "https://www.w3.org/ns/activitystreams#Public"
],
"type": "Undo",
"id": "http://ds9.lemmy.ml/activities/undo/3518565c-24a7-4d9e-8e0a-f7a2f45ac618"
diff --git a/crates/apub/src/activities/voting/undo_vote.rs b/crates/apub/src/activities/voting/undo_vote.rs
index 3606756a3..16ea64e00 100644
--- a/crates/apub/src/activities/voting/undo_vote.rs
+++ b/crates/apub/src/activities/voting/undo_vote.rs
@@ -28,6 +28,9 @@ use lemmy_utils::LemmyError;
use lemmy_websocket::LemmyContext;
impl UndoVote {
+ /// UndoVote has as:Public value in cc field, unlike other activities. This indicates to other
+ /// software (like GNU social, or presumably Mastodon), that the like actor should not be
+ /// disclosed.
#[tracing::instrument(skip_all)]
pub async fn send(
object: &PostOrComment,
@@ -49,9 +52,9 @@ impl UndoVote {
)?;
let undo_vote = UndoVote {
actor: ObjectId::new(actor.actor_id()),
- to: vec![public()],
+ to: vec![community.actor_id()],
object,
- cc: vec![community.actor_id()],
+ cc: vec![public()],
kind: UndoType::Undo,
id: id.clone(),
unparsed: Default::default(),
diff --git a/crates/apub/src/activities/voting/vote.rs b/crates/apub/src/activities/voting/vote.rs
index 11ed9b360..ce6dee28f 100644
--- a/crates/apub/src/activities/voting/vote.rs
+++ b/crates/apub/src/activities/voting/vote.rs
@@ -28,6 +28,8 @@ use lemmy_db_schema::{
use lemmy_utils::LemmyError;
use lemmy_websocket::LemmyContext;
+/// Vote has as:Public value in cc field, unlike other activities. This indicates to other software
+/// (like GNU social, or presumably Mastodon), that the like actor should not be disclosed.
impl Vote {
pub(in crate::activities::voting) fn new(
object: &PostOrComment,
@@ -38,9 +40,9 @@ impl Vote {
) -> Result {
Ok(Vote {
actor: ObjectId::new(actor.actor_id()),
- to: vec![public()],
+ to: vec![community.actor_id()],
object: ObjectId::new(object.ap_id()),
- cc: vec![community.actor_id()],
+ cc: vec![public()],
kind: kind.clone(),
id: generate_activity_id(kind, &context.settings().get_protocol_and_hostname())?,
unparsed: Default::default(),
diff --git a/crates/apub/src/objects/comment.rs b/crates/apub/src/objects/comment.rs
index 2b706aac5..bc8caceaa 100644
--- a/crates/apub/src/objects/comment.rs
+++ b/crates/apub/src/objects/comment.rs
@@ -2,18 +2,15 @@ use crate::{
activities::{verify_is_public, verify_person_in_community},
check_is_apub_id_valid,
mentions::collect_non_local_mentions,
+ objects::read_from_string_or_source,
protocol::{
- objects::{
- note::{Note, SourceCompat},
- tombstone::Tombstone,
- },
- Source,
+ objects::{note::Note, tombstone::Tombstone},
+ SourceCompat,
},
PostOrComment,
};
use activitystreams_kinds::{object::NoteType, public};
use chrono::NaiveDateTime;
-use html2md::parse_html;
use lemmy_api_common::blocking;
use lemmy_apub_lib::{
object_id::ObjectId,
@@ -121,7 +118,7 @@ impl ApubObject for ApubComment {
cc: maa.ccs,
content: markdown_to_html(&self.content),
media_type: Some(MediaTypeHtml::Html),
- source: SourceCompat::Lemmy(Source::new(self.content.clone())),
+ source: Some(SourceCompat::new(self.content.clone())),
in_reply_to,
published: Some(convert_datetime(self.published)),
updated: self.updated.map(convert_datetime),
@@ -180,11 +177,7 @@ impl ApubObject for ApubComment {
.await?;
let (post, parent_comment_id) = note.get_parents(context, request_counter).await?;
- let content = if let SourceCompat::Lemmy(source) = ¬e.source {
- source.content.clone()
- } else {
- parse_html(¬e.content)
- };
+ let content = read_from_string_or_source(¬e.content, ¬e.source);
let content_slurs_removed = remove_slurs(&content, &context.settings().slur_regex());
let form = CommentForm {
@@ -219,6 +212,7 @@ pub(crate) mod tests {
protocol::tests::file_to_json_object,
};
use assert_json_diff::assert_json_include;
+ use html2md::parse_html;
use lemmy_db_schema::source::site::Site;
use serial_test::serial;
diff --git a/crates/apub/src/objects/community.rs b/crates/apub/src/objects/community.rs
index 87646e91f..eb9cb218b 100644
--- a/crates/apub/src/objects/community.rs
+++ b/crates/apub/src/objects/community.rs
@@ -7,7 +7,7 @@ use crate::{
protocol::{
objects::{group::Group, tombstone::Tombstone, Endpoints},
ImageObject,
- Source,
+ SourceCompat,
},
};
use activitystreams_kinds::actor::GroupType;
@@ -85,9 +85,9 @@ impl ApubObject for ApubCommunity {
kind: GroupType::Group,
id: ObjectId::new(self.actor_id()),
preferred_username: self.name.clone(),
- name: self.title.clone(),
+ name: Some(self.title.clone()),
summary: self.description.as_ref().map(|b| markdown_to_html(b)),
- source: self.description.clone().map(Source::new),
+ source: self.description.clone().map(SourceCompat::new),
icon: self.icon.clone().map(ImageObject::new),
image: self.banner.clone().map(ImageObject::new),
sensitive: Some(self.nsfw),
diff --git a/crates/apub/src/objects/instance.rs b/crates/apub/src/objects/instance.rs
index 9b5ef117d..9968b81e1 100644
--- a/crates/apub/src/objects/instance.rs
+++ b/crates/apub/src/objects/instance.rs
@@ -1,7 +1,7 @@
use crate::{
check_is_apub_id_valid,
- objects::{get_summary_from_string_or_source, verify_image_domain_matches},
- protocol::{objects::instance::Instance, ImageObject, Source},
+ objects::{read_from_string_or_source_opt, verify_image_domain_matches},
+ protocol::{objects::instance::Instance, ImageObject, SourceCompat},
};
use activitystreams_kinds::actor::ServiceType;
use chrono::NaiveDateTime;
@@ -77,7 +77,7 @@ impl ApubObject for ApubSite {
id: ObjectId::new(self.actor_id()),
name: self.name.clone(),
content: self.sidebar.as_ref().map(|d| markdown_to_html(d)),
- source: self.sidebar.clone().map(Source::new),
+ source: self.sidebar.clone().map(SourceCompat::new),
summary: self.description.clone(),
media_type: self.sidebar.as_ref().map(|_| MediaTypeHtml::Html),
icon: self.icon.clone().map(ImageObject::new),
@@ -121,10 +121,7 @@ impl ApubObject for ApubSite {
) -> Result {
let site_form = SiteForm {
name: apub.name.clone(),
- sidebar: Some(get_summary_from_string_or_source(
- &apub.content,
- &apub.source,
- )),
+ sidebar: Some(read_from_string_or_source_opt(&apub.content, &apub.source)),
updated: apub.updated.map(|u| u.clone().naive_local()),
icon: Some(apub.icon.clone().map(|i| i.url.into())),
banner: Some(apub.image.clone().map(|i| i.url.into())),
diff --git a/crates/apub/src/objects/mod.rs b/crates/apub/src/objects/mod.rs
index 6acbf9ad4..9f939aaa8 100644
--- a/crates/apub/src/objects/mod.rs
+++ b/crates/apub/src/objects/mod.rs
@@ -1,4 +1,4 @@
-use crate::protocol::{ImageObject, Source};
+use crate::protocol::{ImageObject, SourceCompat};
use html2md::parse_html;
use lemmy_apub_lib::verify::verify_domains_match;
use lemmy_utils::LemmyError;
@@ -11,12 +11,20 @@ pub mod person;
pub mod post;
pub mod private_message;
-pub(crate) fn get_summary_from_string_or_source(
+pub(crate) fn read_from_string_or_source(raw: &str, source: &Option) -> String {
+ if let Some(SourceCompat::Lemmy(s)) = source {
+ s.content.clone()
+ } else {
+ parse_html(raw)
+ }
+}
+
+pub(crate) fn read_from_string_or_source_opt(
raw: &Option,
- source: &Option