diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex
index 5d989bc8c..5a241fe45 100644
--- a/lib/pleroma/formatter.ex
+++ b/lib/pleroma/formatter.ex
@@ -1,4 +1,5 @@
defmodule Pleroma.Formatter do
+ alias Pleroma.User
@link_regex ~r/https?:\/\/[\w\.\/?=\-#]+[\w]/
def linkify(text) do
@@ -10,4 +11,15 @@ def parse_tags(text) do
Regex.scan(@tag_regex, text)
|> Enum.map(fn (["#" <> tag = full_tag]) -> {full_tag, tag} end)
end
+
+ def parse_mentions(text) do
+ # Modified from https://www.w3.org/TR/html5/forms.html#valid-e-mail-address
+ regex = ~r/@[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/
+
+ Regex.scan(regex, text)
+ |> List.flatten
+ |> Enum.uniq
+ |> Enum.map(fn ("@" <> match = full_match) -> {full_match, User.get_cached_by_nickname(match)} end)
+ |> Enum.filter(fn ({_match, user}) -> user end)
+ end
end
diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex
index cf9610723..07ac30cb2 100644
--- a/lib/pleroma/web/twitter_api/twitter_api.ex
+++ b/lib/pleroma/web/twitter_api/twitter_api.ex
@@ -31,7 +31,7 @@ def get_replied_to_activity(_), do: nil
def create_status(%User{} = user, %{"status" => status} = data) do
with attachments <- attachments_from_ids(data["media_ids"]),
- mentions <- parse_mentions(status),
+ mentions <- Formatter.parse_mentions(status),
inReplyTo <- get_replied_to_activity(data["in_reply_to_status_id"]),
to <- to_for_user_and_mentions(user, mentions, inReplyTo),
content_html <- make_content_html(status, mentions, attachments),
@@ -182,17 +182,6 @@ def upload(%Plug.Upload{} = file, format \\ "xml") do
end
end
- def parse_mentions(text) do
- # Modified from https://www.w3.org/TR/html5/forms.html#valid-e-mail-address
- regex = ~r/@[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/
-
- Regex.scan(regex, text)
- |> List.flatten
- |> Enum.uniq
- |> Enum.map(fn ("@" <> match = full_match) -> {full_match, User.get_cached_by_nickname(match)} end)
- |> Enum.filter(fn ({_match, user}) -> user end)
- end
-
def register_user(params) do
params = %{
nickname: params["nickname"],
diff --git a/test/formatter_test.exs b/test/formatter_test.exs
index bf09b246f..1e3a29e09 100644
--- a/test/formatter_test.exs
+++ b/test/formatter_test.exs
@@ -2,6 +2,8 @@ defmodule Pleroma.FormatterTest do
alias Pleroma.Formatter
use Pleroma.DataCase
+ import Pleroma.Factory
+
describe ".linkify" do
test "turning urls into links" do
text = "Hey, check out https://www.youtube.com/watch?v=8Zg1-TufFzY."
@@ -25,4 +27,20 @@ test "parses tags in the text" do
assert Formatter.parse_tags(text) == expected
end
end
+
+ test "it can parse mentions and return the relevant users" do
+ text = "@gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me"
+
+ gsimg = insert(:user, %{nickname: "gsimg"})
+ archaeme = insert(:user, %{nickname: "archaeme"})
+ archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"})
+
+ expected_result = [
+ {"@gsimg", gsimg},
+ {"@archaeme", archaeme},
+ {"@archaeme@archae.me", archaeme_remote},
+ ]
+
+ assert Formatter.parse_mentions(text) == expected_result
+ end
end
diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs
index d5a1fa57a..da880e67c 100644
--- a/test/web/twitter_api/twitter_api_test.exs
+++ b/test/web/twitter_api/twitter_api_test.exs
@@ -240,22 +240,6 @@ test "upload a file" do
assert is_binary(response)
end
- test "it can parse mentions and return the relevant users" do
- text = "@gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me"
-
- gsimg = insert(:user, %{nickname: "gsimg"})
- archaeme = insert(:user, %{nickname: "archaeme"})
- archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"})
-
- expected_result = [
- {"@gsimg", gsimg},
- {"@archaeme", archaeme},
- {"@archaeme@archae.me", archaeme_remote},
- ]
-
- assert TwitterAPI.parse_mentions(text) == expected_result
- end
-
test "it adds user links to an existing text" do
text = "@gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me"
@@ -263,7 +247,7 @@ test "it adds user links to an existing text" do
archaeme = insert(:user, %{nickname: "archaeme"})
archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"})
- mentions = TwitterAPI.parse_mentions(text)
+ mentions = Pleroma.Formatter.parse_mentions(text)
expected_text = "@gsimg According to @archaeme, that is @daggsy. Also hello @archaeme"
assert Utils.add_user_links(text, mentions) == expected_text