Merge branch 'mfm' into develop
authorFloatingGhost <hannah@coffee-and-dreams.uk>
Tue, 14 Jun 2022 15:25:47 +0000 (16:25 +0100)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Tue, 14 Jun 2022 15:25:47 +0000 (16:25 +0100)
README.md
config/config.exs
lib/pleroma/emoji.ex
lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex
lib/pleroma/web/common_api/activity_draft.ex
lib/pleroma/web/common_api/utils.ex
lib/pleroma/web/mastodon_api/views/status_view.ex
test/pleroma/web/common_api_test.exs
test/pleroma/web/mastodon_api/views/status_view_test.exs

index fa7881a1a8771528e1331dce810313264da89194..bf56cb81712e23e8e6568ff1c2410d29405db278 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,3 +1,31 @@
+## akkoma
+
+*a smallish microblogging platform, aka the cooler pleroma*
+
+### Why though?
+
+pleroma as a project has stagnated of late. after a spat between
+developers led to a fork (which died due to chronic lack of direction),
+nearly nobody seems to _want_ to work on it. this in addition to the
+BDFL being AWOL whenever needed, means that the entire project is
+nought but a power vacuum waiting for someone to step in. and with the
+track record pleroma has, i do not trust that whoever steps in will be
+good for the project.
+
+thus, i am striking out on my own. i already had a few modifications 
+on my instance, so it wasn't a particularly large leap to assume direct
+control. 
+
+### But really, why should I migrate to your thing?
+
+aside from me actually being responsive? let's lookie here, we've got
+- custom emoji reactions
+- misskey markdown (MFM) rendering and posting support 
+- elasticsearch support (because pleroma search is GARBAGE)
+- latest develop pleroma-fe additions
+- local-only posting
+- probably more, this is like 3.5 years of IHBA additions finally compiled
+
 ## Upgrading to Akkoma
 
 ### From source
index 417f298d702836cb959bb0af84c408feb7b482f5..ad70966692b8d861e9a8b007178b908a2a808bf8 100644 (file)
@@ -222,7 +222,8 @@ config :pleroma, :instance,
     "text/plain",
     "text/html",
     "text/markdown",
-    "text/bbcode"
+    "text/bbcode",
+    "text/x.misskeymarkdown"
   ],
   staff_transparency: [],
   autofollowed_nicknames: [],
index f4043ac80b9d317ab6c39369b5d7cc69cd74ecdf..9e1858ae73308ae333b293af7a999e07a8ceaaa2 100644 (file)
@@ -165,7 +165,7 @@ defmodule Pleroma.Emoji do
 
   def maybe_quote(name), do: name
 
-  def emoji_url(%{"type" => "EmojiReact", "content" => emoji, "tag" => []}), do: nil
+  def emoji_url(%{"type" => "EmojiReact", "content" => _, "tag" => []}), do: nil
 
   def emoji_url(%{"type" => "EmojiReact", "content" => emoji, "tag" => tags}) do
     tag =
index e3f3110f2dd415480e84a6e4391fc4d385c85e16..815995895e067879bf97f381bdef557d0ac20651 100644 (file)
@@ -29,6 +29,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do
     end
 
     field(:replies, {:array, ObjectValidators.ObjectID}, default: [])
+    field(:source, :map)
   end
 
   def cast_and_apply(data) do
@@ -79,6 +80,25 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do
 
   defp fix_replies(data), do: data
 
+  # https://github.com/misskey-dev/misskey/pull/8787
+  defp fix_misskey_content(%{"source" => %{"mediaType" => "text/x.misskeymarkdown"}} = object),
+    do: object
+
+  defp fix_misskey_content(%{"_misskey_content" => content} = object) do
+    object
+    |> Map.put("source", %{"content" => content, "mediaType" => "text/x.misskeymarkdown"})
+    |> Map.delete("_misskey_content")
+  end
+
+  defp fix_misskey_content(data), do: data
+
+  defp fix_source(%{"source" => source} = object) when is_binary(source) do
+    object
+    |> Map.put("source", %{"content" => source})
+  end
+
+  defp fix_source(object), do: object
+
   defp fix(data) do
     data
     |> CommonFixes.fix_actor()
@@ -86,6 +106,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do
     |> fix_url()
     |> fix_tag()
     |> fix_replies()
+    |> fix_source()
+    |> fix_misskey_content()
     |> Transmogrifier.fix_emoji()
     |> Transmogrifier.fix_content_map()
   end
index b4e3e37aec3bff82db68577af9a768a690dad18d..bd56b6e20bc86a7661d59c2bf6e7d22f51e9f29c 100644 (file)
@@ -213,13 +213,15 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do
       end
 
     emoji = Map.merge(emoji, summary_emoji)
-
     {:ok, note_data, _meta} = Builder.note(draft)
 
     object =
       note_data
       |> Map.put("emoji", emoji)
-      |> Map.put("source", draft.status)
+      |> Map.put("source", %{
+        "content" => draft.status,
+        "mediaType" => draft.params[:content_type]
+      })
       |> Map.put("generator", draft.params[:generator])
 
     %__MODULE__{draft | object: object}
index b6feaf32a6304ac66a37690838cbeb531a27e85a..8fde9ae156efb615addc05c51e2bbb10718382a6 100644 (file)
@@ -291,6 +291,15 @@ defmodule Pleroma.Web.CommonAPI.Utils do
     |> Formatter.html_escape("text/html")
   end
 
+  def format_input(text, "text/x.misskeymarkdown", options) do
+    text
+    |> Formatter.html_escape("text/plain")
+    |> Formatter.linkify(options)
+    |> (fn {text, mentions, tags} ->
+          {String.replace(text, ~r/\r?\n/, "<br>"), mentions, tags}
+        end).()
+  end
+
   def format_naive_asctime(date) do
     date |> DateTime.from_naive!("Etc/UTC") |> format_asctime
   end
index 008040866adcdf09ad3e7879fe903687a448cc6b..c0f467592d4cb02aaf552bb699924c7906055c9a 100644 (file)
@@ -80,7 +80,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
 
   def render("index.json", opts) do
     reading_user = opts[:for]
-
     # To do: check AdminAPIControllerTest on the reasons behind nil activities in the list
     activities = Enum.filter(opts.activities, & &1)
 
@@ -376,6 +375,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
         emoji_reactions: emoji_reactions,
         parent_visible: visible_for_user?(reply_to, opts[:for]),
         pinned_at: pinned_at
+      },
+      akkoma: %{
+        source: object.data["source"]
       }
     }
   end
index ad0b8754313cd399bb4b263ab9bafef9d8130448..20870bdd70ed87b813ea25ba3b4a522fc18d5718 100644 (file)
@@ -586,7 +586,11 @@ defmodule Pleroma.Web.CommonAPITest do
       object = Object.normalize(activity, fetch: false)
 
       assert object.data["content"] == "<p><b>2hu</b></p>alert(&#39;xss&#39;)"
-      assert object.data["source"] == post
+
+      assert object.data["source"] == %{
+               "mediaType" => "text/html",
+               "content" => post
+             }
     end
 
     test "it filters out obviously bad tags when accepting a post as Markdown" do
@@ -603,7 +607,11 @@ defmodule Pleroma.Web.CommonAPITest do
       object = Object.normalize(activity, fetch: false)
 
       assert object.data["content"] == "<p><b>2hu</b></p>"
-      assert object.data["source"] == post
+
+      assert object.data["source"] == %{
+               "mediaType" => "text/markdown",
+               "content" => post
+             }
     end
 
     test "it does not allow replies to direct messages that are not direct messages themselves" do
index 3ee53d95c0389cb9a42a7450ec9f0ce259e1bad7..caf2594c0330c6052d94ccc4eb9ddd6aa9206479 100644 (file)
@@ -302,6 +302,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
         emoji_reactions: [],
         parent_visible: false,
         pinned_at: nil
+      },
+      akkoma: %{
+        source: HTML.filter_tags(object_data["content"])
       }
     }