Twitter API: Support Mastodon-style bios
authorensra <ensra@users.noreply.github.com>
Tue, 21 Aug 2018 13:03:36 +0000 (14:03 +0100)
committerensra <ensra@users.noreply.github.com>
Tue, 21 Aug 2018 13:03:36 +0000 (14:03 +0100)
(multi-line, with links, and user mentions)

lib/pleroma/web/twitter_api/twitter_api_controller.ex
lib/pleroma/web/twitter_api/views/user_view.ex

index 65e67396b2284ebf54b572ae8c9f2856e48044e0..dfa6d2464102f1bfeeeba0f8c791310192f83318 100644 (file)
@@ -1,7 +1,9 @@
 defmodule Pleroma.Web.TwitterAPI.Controller do
   use Pleroma.Web, :controller
+  alias Pleroma.Formatter
   alias Pleroma.Web.TwitterAPI.{TwitterAPI, UserView, ActivityView, NotificationView}
   alias Pleroma.Web.CommonAPI
+  alias Pleroma.Web.CommonAPI.Utils, as: CommonUtils
   alias Pleroma.{Repo, Activity, User, Notification}
   alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Web.ActivityPub.Utils
@@ -411,8 +413,17 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
   def update_profile(%{assigns: %{user: user}} = conn, params) do
     params =
       if bio = params["description"] do
-        bio_brs = Regex.replace(~r/\r?\n/, bio, "<br>")
-        Map.put(params, "bio", bio_brs)
+        mentions = Formatter.parse_mentions(bio)
+        tags = Formatter.parse_tags(bio)
+        emoji =
+          (user.info["source_data"]["tag"] || [])
+          |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end)
+          |> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} ->
+            {String.trim(name, ":"), url}
+          end)
+        bio_html = CommonUtils.format_input(bio, mentions, tags)
+        |> Formatter.emojify(emoji)
+        Map.put(params, "bio", bio_html)
       else
         params
       end
index 7d0f0e7039c9df5d0b77c35e463559615b440181..25fda1aa80af3cf017f9c9977d10d392af122124 100644 (file)
@@ -36,12 +36,10 @@ defmodule Pleroma.Web.TwitterAPI.UserView do
         {String.trim(name, ":"), url}
       end)
 
-    bio = HtmlSanitizeEx.strip_tags(user.bio)
-
     data = %{
       "created_at" => user.inserted_at |> Utils.format_naive_asctime(),
-      "description" => bio,
-      "description_html" => bio |> Formatter.emojify(emoji),
+      "description" => HtmlSanitizeEx.strip_tags(user.bio |> String.replace("<br>", "\n")),
+      "description_html" => HtmlSanitizeEx.basic_html(user.bio),
       "favourites_count" => 0,
       "followers_count" => user_info[:follower_count],
       "following" => following,