diff options
| -rw-r--r-- | lib/pleroma/formatter.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/views/user_view.ex | 10 | ||||
| -rw-r--r-- | test/formatter_test.exs | 13 | ||||
| -rw-r--r-- | test/web/twitter_api/views/user_view_test.exs | 38 | 
4 files changed, 54 insertions, 15 deletions
| diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 62f54a3f2..d5565a2ca 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -222,13 +222,7 @@ defmodule Pleroma.Formatter do      subs =        subs ++          Enum.map(links, fn {uuid, url} -> -          {:safe, link} = Phoenix.HTML.Link.link(url, to: url) - -          link = -            link -            |> IO.iodata_to_binary() - -          {uuid, link} +          {uuid, "<a href=\"#{url}\">#{url}</a>"}          end)      {subs, uuid_text} diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index cfbaef4c9..a662f83b6 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -37,6 +37,13 @@ defmodule Pleroma.Web.TwitterAPI.UserView do          {String.trim(name, ":"), url}        end) +    # ``fields`` is an array of mastodon profile field, containing ``{"name": "…", "value": "…"}``. +    # For example: [{"name": "Pronoun", "value": "she/her"}, …] +    fields = +      (user.info["source_data"]["attachment"] || []) +      |> Enum.filter(fn %{"type" => t} -> t == "PropertyValue" end) +      |> Enum.map(fn fields -> Map.take(fields, ["name", "value"]) end) +      data = %{        "created_at" => user.inserted_at |> Utils.format_naive_asctime(),        "description" => HTML.strip_tags((user.bio || "") |> String.replace("<br>", "\n")), @@ -65,7 +72,8 @@ defmodule Pleroma.Web.TwitterAPI.UserView do        "is_local" => user.local,        "locked" => !!user.info["locked"],        "default_scope" => user.info["default_scope"] || "public", -      "no_rich_text" => user.info["no_rich_text"] || false +      "no_rich_text" => user.info["no_rich_text"] || false, +      "fields" => fields      }      if assigns[:token] do diff --git a/test/formatter_test.exs b/test/formatter_test.exs index 273eefb8a..e37b17879 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -23,7 +23,7 @@ defmodule Pleroma.FormatterTest do        text = "Hey, check out https://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2#blabla ."        expected = -        "Hey, check out <a href=\"https://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2#blabla\">https://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2#blabla</a> ." +        "Hey, check out <a href=\"https://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2#blabla\">https://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2#blabla</a> ."        assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected @@ -54,7 +54,7 @@ defmodule Pleroma.FormatterTest do        text = "https://forum.zdoom.org/viewtopic.php?f=44&t=57087"        expected = -        "<a href=\"https://forum.zdoom.org/viewtopic.php?f=44&t=57087\">https://forum.zdoom.org/viewtopic.php?f=44&t=57087</a>" +        "<a href=\"https://forum.zdoom.org/viewtopic.php?f=44&t=57087\">https://forum.zdoom.org/viewtopic.php?f=44&t=57087</a>"        assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected @@ -75,7 +75,7 @@ defmodule Pleroma.FormatterTest do        text = "https://en.wikipedia.org/wiki/Duff's_device"        expected = -        "<a href=\"https://en.wikipedia.org/wiki/Duff's_device\">https://en.wikipedia.org/wiki/Duff's_device</a>" +        "<a href=\"https://en.wikipedia.org/wiki/Duff's_device\">https://en.wikipedia.org/wiki/Duff's_device</a>"        assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected @@ -91,6 +91,13 @@ defmodule Pleroma.FormatterTest do        expected = "<a href=\"xmpp:contact@hacktivis.me\">xmpp:contact@hacktivis.me</a>"        assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected + +      text = +        "magnet:?xt=urn:btih:7ec9d298e91d6e4394d1379caf073c77ff3e3136&tr=udp%3A%2F%2Fopentor.org%3A2710&tr=udp%3A%2F%2Ftracker.blackunicorn.xyz%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com" + +      expected = "<a href=\"#{text}\">#{text}</a>" + +      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected      end    end diff --git a/test/web/twitter_api/views/user_view_test.exs b/test/web/twitter_api/views/user_view_test.exs index 50687f450..2deb22fb1 100644 --- a/test/web/twitter_api/views/user_view_test.exs +++ b/test/web/twitter_api/views/user_view_test.exs @@ -88,7 +88,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "is_local" => true,        "locked" => false,        "default_scope" => "public", -      "no_rich_text" => false +      "no_rich_text" => false, +      "fields" => []      }      assert represented == UserView.render("show.json", %{user: user}) @@ -128,7 +129,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "is_local" => true,        "locked" => false,        "default_scope" => "public", -      "no_rich_text" => false +      "no_rich_text" => false, +      "fields" => []      }      assert represented == UserView.render("show.json", %{user: user, for: follower}) @@ -169,7 +171,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "is_local" => true,        "locked" => false,        "default_scope" => "public", -      "no_rich_text" => false +      "no_rich_text" => false, +      "fields" => []      }      assert represented == UserView.render("show.json", %{user: follower, for: user}) @@ -217,10 +220,37 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do        "is_local" => true,        "locked" => false,        "default_scope" => "public", -      "no_rich_text" => false +      "no_rich_text" => false, +      "fields" => []      }      blocker = Repo.get(User, blocker.id)      assert represented == UserView.render("show.json", %{user: user, for: blocker})    end + +  test "a user with mastodon fields" do +    fields = [ +      %{ +        "name" => "Pronouns", +        "value" => "she/her" +      }, +      %{ +        "name" => "Website", +        "value" => "https://example.org/" +      } +    ] + +    user = +      insert(:user, %{ +        info: %{ +          "source_data" => %{ +            "attachment" => +              Enum.map(fields, fn field -> Map.put(field, "type", "PropertyValue") end) +          } +        } +      }) + +    userview = UserView.render("show.json", %{user: user}) +    assert userview["fields"] == fields +  end  end | 
