+## 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
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(%{"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.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()
|> fix_url()
|> fix_tag()
|> fix_replies()
+ |> fix_source()
|> fix_misskey_content()
|> Transmogrifier.fix_emoji()
|> Transmogrifier.fix_content_map()
object = Object.normalize(activity, fetch: false)
assert object.data["content"] == "<p><b>2hu</b></p>alert('xss')"
- 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
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
emoji_reactions: [],
parent_visible: false,
pinned_at: nil
+ },
+ akkoma: %{
+ source: HTML.filter_tags(object_data["content"])
}
}