diff options
| author | kaniini <nenolod@gmail.com> | 2019-03-22 00:50:24 +0000 | 
|---|---|---|
| committer | kaniini <nenolod@gmail.com> | 2019-03-22 00:50:24 +0000 | 
| commit | 1c3d3d0c2b6ebb4948df0b4ec085bcc4a564a126 (patch) | |
| tree | da2492e2a4d7e1202e82bff3fbe4d89ddd8b85c5 /lib | |
| parent | b548181b52c4397d5034cfd95b2ef7e05c9c9c22 (diff) | |
| parent | bf27190f7f0942a05de518f2085a299eb011614c (diff) | |
| download | pleroma-1c3d3d0c2b6ebb4948df0b4ec085bcc4a564a126.tar.gz pleroma-1c3d3d0c2b6ebb4948df0b4ec085bcc4a564a126.zip | |
Merge branch 'safe-mentions' into 'develop'
Add safe dm mode option.
See merge request pleroma/pleroma!958
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/formatter.ex | 20 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/common_api.ex | 3 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 12 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/controllers/util_controller.ex | 4 | 
4 files changed, 32 insertions, 7 deletions
| diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 1e4ede3f2..e3625383b 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Formatter do    alias Pleroma.User    alias Pleroma.Web.MediaProxy +  @safe_mention_regex ~r/^(\s*(?<mentions>@.+?\s+)+)(?<rest>.*)/    @markdown_characters_regex ~r/(`|\*|_|{|}|[|]|\(|\)|#|\+|-|\.|!)/    @link_regex ~r{((?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~%:/?#[\]@!\$&'\(\)\*\+,;=.]+)|[0-9a-z+\-\.]+:[0-9a-z$-_.+!*'(),]+}ui    # credo:disable-for-previous-line Credo.Check.Readability.MaxLineLength @@ -45,15 +46,28 @@ defmodule Pleroma.Formatter do    @doc """    Parses a text and replace plain text links with HTML. Returns a tuple with a result text, mentions, and hashtags. + +  If the 'safe_mention' option is given, only consecutive mentions at the start the post are actually mentioned.    """    @spec linkify(String.t(), keyword()) ::            {String.t(), [{String.t(), User.t()}], [{String.t(), String.t()}]}    def linkify(text, options \\ []) do      options = options ++ @auto_linker_config -    acc = %{mentions: MapSet.new(), tags: MapSet.new()} -    {text, %{mentions: mentions, tags: tags}} = AutoLinker.link_map(text, acc, options) -    {text, MapSet.to_list(mentions), MapSet.to_list(tags)} +    if options[:safe_mention] && Regex.named_captures(@safe_mention_regex, text) do +      %{"mentions" => mentions, "rest" => rest} = Regex.named_captures(@safe_mention_regex, text) +      acc = %{mentions: MapSet.new(), tags: MapSet.new()} + +      {text_mentions, %{mentions: mentions}} = AutoLinker.link_map(mentions, acc, options) +      {text_rest, %{tags: tags}} = AutoLinker.link_map(rest, acc, options) + +      {text_mentions <> text_rest, MapSet.to_list(mentions), MapSet.to_list(tags)} +    else +      acc = %{mentions: MapSet.new(), tags: MapSet.new()} +      {text, %{mentions: mentions, tags: tags}} = AutoLinker.link_map(text, acc, options) + +      {text, MapSet.to_list(mentions), MapSet.to_list(tags)} +    end    end    def emojify(text) do diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index b5f79c3bf..50d60aade 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -142,7 +142,8 @@ defmodule Pleroma.Web.CommonAPI do             make_content_html(               status,               attachments, -             data +             data, +             visibility             ),           {to, cc} <- to_for_user_and_mentions(user, mentions, in_reply_to, visibility),           context <- make_context(in_reply_to), diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index fcdfea8e1..3e807a5b7 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -101,7 +101,8 @@ defmodule Pleroma.Web.CommonAPI.Utils do    def make_content_html(          status,          attachments, -        data +        data, +        visibility        ) do      no_attachment_links =        data @@ -110,8 +111,15 @@ defmodule Pleroma.Web.CommonAPI.Utils do      content_type = get_content_type(data["content_type"]) +    options = +      if visibility == "direct" && Config.get([:instance, :safe_dm_mentions]) do +        [safe_mention: true] +      else +        [] +      end +      status -    |> format_input(content_type) +    |> format_input(content_type, options)      |> maybe_add_attachments(attachments, no_attachment_links)      |> maybe_add_nsfw_tag(data)    end diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 320ec778c..faa733fec 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -197,7 +197,9 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do            vapidPublicKey: vapid_public_key,            accountActivationRequired:              if(Keyword.get(instance, :account_activation_required, false), do: "1", else: "0"), -          invitesEnabled: if(Keyword.get(instance, :invites_enabled, false), do: "1", else: "0") +          invitesEnabled: if(Keyword.get(instance, :invites_enabled, false), do: "1", else: "0"), +          safeDMMentionsEnabled: +            if(Pleroma.Config.get([:instance, :safe_dm_mentions]), do: "1", else: "0")          }          pleroma_fe = | 
