diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/activity_expiration.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/config/transfer_task.ex | 4 | ||||
| -rw-r--r-- | lib/pleroma/html.ex | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/mrf/object_age_policy.ex | 3 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/mrf/simple_policy.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/mrf/subchain_policy.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/admin_api/admin_api_controller.ex | 48 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/views/status_view.ex | 14 | ||||
| -rw-r--r-- | lib/pleroma/web/metadata/rel_me.ex | 6 | ||||
| -rw-r--r-- | lib/pleroma/web/nodeinfo/nodeinfo_controller.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex | 4 | ||||
| -rw-r--r-- | lib/pleroma/web/rel_me.ex | 5 | ||||
| -rw-r--r-- | lib/pleroma/web/rich_media/parser.ex | 6 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 6 | 
16 files changed, 64 insertions, 50 deletions
| diff --git a/lib/pleroma/activity_expiration.ex b/lib/pleroma/activity_expiration.ex index 7ea5c48ca..a58a493f7 100644 --- a/lib/pleroma/activity_expiration.ex +++ b/lib/pleroma/activity_expiration.ex @@ -62,6 +62,6 @@ defmodule Pleroma.ActivityExpiration do    def expires_late_enough?(scheduled_at) do      now = NaiveDateTime.utc_now()      diff = NaiveDateTime.diff(scheduled_at, now, :millisecond) -    diff >= @min_activity_lifetime +    diff > @min_activity_lifetime    end  end diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index 6c5ba1f95..f037ce8a5 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -146,9 +146,7 @@ defmodule Pleroma.Config.TransferTask do    defp update_env(group, key, nil), do: Application.delete_env(group, key)    defp update_env(group, key, value), do: Application.put_env(group, key, value) -  defp restart(_, :pleroma, :test), do: Logger.warn("pleroma restarted") - -  defp restart(_, :pleroma, _), do: send(Restarter.Pleroma, :after_boot) +  defp restart(_, :pleroma, env), do: Restarter.Pleroma.restart_after_boot(env)    defp restart(started_applications, app, _) do      with {^app, _, _} <- List.keyfind(started_applications, app, 0), diff --git a/lib/pleroma/html.ex b/lib/pleroma/html.ex index 11513106e..05946aa96 100644 --- a/lib/pleroma/html.ex +++ b/lib/pleroma/html.ex @@ -108,6 +108,7 @@ defmodule Pleroma.HTML do      Cachex.fetch!(:scrubber_cache, key, fn _key ->        result =          content +        |> Floki.parse_fragment!()          |> Floki.filter_out("a.mention,a.hashtag,a[rel~=\"tag\"]")          |> Floki.attribute("a", "href")          |> Enum.at(0) diff --git a/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex b/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex index 8abe18e29..802d10edc 100644 --- a/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex @@ -17,6 +17,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicy do    # does the post contain links?    defp contains_links?(%{"content" => content} = _object) do      content +    |> Floki.parse_fragment!()      |> Floki.filter_out("a.mention,a.hashtag,a[rel~=\"tag\"],a.zrl")      |> Floki.attribute("a", "href")      |> length() > 0 diff --git a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex index 8b36c1021..788508349 100644 --- a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex @@ -5,12 +5,11 @@  defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy do    alias Pleroma.Config    alias Pleroma.User -  alias Pleroma.Web.ActivityPub.MRF    require Pleroma.Constants    @moduledoc "Filter activities depending on their age" -  @behaviour MRF +  @behaviour Pleroma.Web.ActivityPub.MRF    defp check_date(%{"published" => published} = message) do      with %DateTime{} = now <- DateTime.utc_now(), diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index 8e53296e7..b94c3c78a 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do    alias Pleroma.User    alias Pleroma.Web.ActivityPub.MRF    @moduledoc "Filter activities depending on their origin instance" -  @behaviour MRF +  @behaviour Pleroma.Web.ActivityPub.MRF    require Pleroma.Constants diff --git a/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex b/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex index 566c1e191..77ffd1bb9 100644 --- a/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex @@ -8,7 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SubchainPolicy do    require Logger -  @behaviour MRF +  @behaviour Pleroma.Web.ActivityPub.MRF    defp lookup_subchain(actor) do      with matches <- Config.get([:mrf_subchain, :match_actor]), diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index c95cd182d..67222ebae 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do    import Pleroma.Web.ControllerHelper, only: [json_response: 3]    alias Pleroma.Activity +  alias Pleroma.Config    alias Pleroma.ConfigDB    alias Pleroma.ModerationLog    alias Pleroma.Plugs.OAuthScopesPlug @@ -570,8 +571,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do    @doc "Sends registration invite via email"    def email_invite(%{assigns: %{user: user}} = conn, %{"email" => email} = params) do      with true <- -           Pleroma.Config.get([:instance, :invites_enabled]) && -             !Pleroma.Config.get([:instance, :registrations_open]), +           Config.get([:instance, :invites_enabled]) && +             !Config.get([:instance, :registrations_open]),           {:ok, invite_token} <- UserInviteToken.create_invite(),           email <-             Pleroma.Emails.UserEmail.user_invitation_email( @@ -808,7 +809,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do        configs = ConfigDB.get_all_as_keyword()        merged = -        Pleroma.Config.Holder.config() +        Config.Holder.config()          |> ConfigDB.merge(configs)          |> Enum.map(fn {group, values} ->            Enum.map(values, fn {key, value} -> @@ -838,7 +839,16 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do          end)          |> List.flatten() -      json(conn, %{configs: merged}) +      response = %{configs: merged} + +      response = +        if Restarter.Pleroma.need_reboot?() do +          Map.put(response, :need_reboot, true) +        else +          response +        end + +      json(conn, response)      end    end @@ -863,20 +873,26 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do            Ecto.get_meta(config, :state) == :deleted          end) -      Pleroma.Config.TransferTask.load_and_update_env(deleted, false) +      Config.TransferTask.load_and_update_env(deleted, false)        need_reboot? = -        Enum.any?(updated, fn config -> -          group = ConfigDB.from_string(config.group) -          key = ConfigDB.from_string(config.key) -          value = ConfigDB.from_binary(config.value) -          Pleroma.Config.TransferTask.pleroma_need_restart?(group, key, value) -        end) +        Restarter.Pleroma.need_reboot?() || +          Enum.any?(updated, fn config -> +            group = ConfigDB.from_string(config.group) +            key = ConfigDB.from_string(config.key) +            value = ConfigDB.from_binary(config.value) +            Config.TransferTask.pleroma_need_restart?(group, key, value) +          end)        response = %{configs: updated}        response = -        if need_reboot?, do: Map.put(response, :need_reboot, need_reboot?), else: response +        if need_reboot? do +          Restarter.Pleroma.need_reboot() +          Map.put(response, :need_reboot, need_reboot?) +        else +          response +        end        conn        |> put_view(ConfigView) @@ -886,18 +902,14 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do    def restart(conn, _params) do      with :ok <- configurable_from_database(conn) do -      if Pleroma.Config.get(:env) == :test do -        Logger.warn("pleroma restarted") -      else -        send(Restarter.Pleroma, {:restart, 50}) -      end +      Restarter.Pleroma.restart(Config.get(:env), 50)        json(conn, %{})      end    end    defp configurable_from_database(conn) do -    if Pleroma.Config.get(:configurable_from_database) do +    if Config.get(:configurable_from_database) do        :ok      else        errors( diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index ca6c93862..4445894b0 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -228,9 +228,9 @@ defmodule Pleroma.Web.CommonAPI.Utils do          data,          visibility        ) do -    no_attachment_links = +    attachment_links =        data -      |> Map.get("no_attachment_links", Config.get([:instance, :no_attachment_links])) +      |> Map.get("attachment_links", Config.get([:instance, :attachment_links]))        |> truthy_param?()      content_type = get_content_type(data["content_type"]) @@ -244,7 +244,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do      status      |> format_input(content_type, options) -    |> maybe_add_attachments(attachments, no_attachment_links) +    |> maybe_add_attachments(attachments, attachment_links)      |> maybe_add_nsfw_tag(data)    end @@ -270,7 +270,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do    def make_context(%Activity{data: %{"context" => context}}, _), do: context    def make_context(_, _), do: Utils.generate_context_id() -  def maybe_add_attachments(parsed, _attachments, true = _no_links), do: parsed +  def maybe_add_attachments(parsed, _attachments, false = _no_links), do: parsed    def maybe_add_attachments({text, mentions, tags}, attachments, _no_links) do      text = add_attachments(text, attachments) diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 6cb158bbf..6b0fe9215 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -175,9 +175,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do      expires_at =        with true <- client_posted_this_activity, -           expiration when not is_nil(expiration) <- +           %ActivityExpiration{scheduled_at: scheduled_at} <-               ActivityExpiration.get_by_activity_id(activity.id) do -        expiration.scheduled_at +        scheduled_at +      else +        _ -> nil        end      thread_muted? = @@ -242,9 +244,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do        with %{data: %{"reactions" => emoji_reactions}} <- object do          Enum.map(emoji_reactions, fn [emoji, users] ->            %{ -            emoji: emoji, +            name: emoji,              count: length(users), -            reacted: !!(opts[:for] && opts[:for].ap_id in users) +            me: !!(opts[:for] && opts[:for].ap_id in users)            }          end)        else @@ -321,11 +323,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do          nil        end -    site_name = rich_media[:site_name] || page_url_data.host -      %{        type: "link", -      provider_name: site_name, +      provider_name: page_url_data.host,        provider_url: page_url_data.scheme <> "://" <> page_url_data.host,        url: page_url,        image: image_url |> MediaProxy.url(), diff --git a/lib/pleroma/web/metadata/rel_me.ex b/lib/pleroma/web/metadata/rel_me.ex index f87fc1973..86dcc1a3b 100644 --- a/lib/pleroma/web/metadata/rel_me.ex +++ b/lib/pleroma/web/metadata/rel_me.ex @@ -8,8 +8,10 @@ defmodule Pleroma.Web.Metadata.Providers.RelMe do    @impl Provider    def build_tags(%{user: user}) do -    (Floki.attribute(user.bio, "link[rel~=me]", "href") ++ -       Floki.attribute(user.bio, "a[rel~=me]", "href")) +    bio_tree = Floki.parse_fragment!(user.bio) + +    (Floki.attribute(bio_tree, "link[rel~=me]", "href") ++ +       Floki.attribute(bio_tree, "a[rel~=me]", "href"))      |> Enum.map(fn link ->        {:link, [rel: "me", href: link], []}      end) diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 03c35cc2a..333012920 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -46,10 +46,10 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do          data          |> Map.merge(%{quarantined_instances: quarantined}) -        |> Map.put(:enabled, Config.get([:instance, :federating]))        else          %{}        end +      |> Map.put(:enabled, Config.get([:instance, :federating]))      features =        [ diff --git a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex index d76e39795..108e48438 100644 --- a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex @@ -53,10 +53,10 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do              |> Enum.filter(& &1)            %{ -            emoji: emoji, +            name: emoji,              count: length(users),              accounts: AccountView.render("index.json", %{users: users, for: user, as: :user}), -            reacted: !!(user && user.ap_id in user_ap_ids) +            me: !!(user && user.ap_id in user_ap_ids)            }          end) diff --git a/lib/pleroma/web/rel_me.ex b/lib/pleroma/web/rel_me.ex index 16b1a53d2..540fa65df 100644 --- a/lib/pleroma/web/rel_me.ex +++ b/lib/pleroma/web/rel_me.ex @@ -27,9 +27,10 @@ defmodule Pleroma.Web.RelMe do    defp parse_url(url) do      with {:ok, %Tesla.Env{body: html, status: status}} when status in 200..299 <-             Pleroma.HTTP.get(url, [], adapter: @hackney_options), +         {:ok, html_tree} <- Floki.parse_document(html),           data <- -           Floki.attribute(html, "link[rel~=me]", "href") ++ -             Floki.attribute(html, "a[rel~=me]", "href") do +           Floki.attribute(html_tree, "link[rel~=me]", "href") ++ +             Floki.attribute(html_tree, "a[rel~=me]", "href") do        {:ok, data}      end    rescue diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex index c06b0a0f2..9702e90f1 100644 --- a/lib/pleroma/web/rich_media/parser.ex +++ b/lib/pleroma/web/rich_media/parser.ex @@ -81,18 +81,18 @@ defmodule Pleroma.Web.RichMedia.Parser do        {:ok, %Tesla.Env{body: html}} = Pleroma.HTTP.get(url, [], adapter: @hackney_options)        html -      |> parse_html +      |> parse_html()        |> maybe_parse()        |> Map.put(:url, url)        |> clean_parsed_data()        |> check_parsed_data()      rescue        e -> -        {:error, "Parsing error: #{inspect(e)}"} +        {:error, "Parsing error: #{inspect(e)} #{inspect(__STACKTRACE__)}"}      end    end -  defp parse_html(html), do: Floki.parse(html) +  defp parse_html(html), do: Floki.parse_document!(html)    defp maybe_parse(html) do      Enum.reduce_while(parsers(), %{}, fn parser, acc -> diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index e86bc3cc3..897215698 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -271,7 +271,7 @@ defmodule Pleroma.Web.Router do    scope "/api/v1/pleroma", Pleroma.Web.PleromaAPI do      pipe_through(:api) -    get("/statuses/:id/emoji_reactions_by", PleromaAPIController, :emoji_reactions_by) +    get("/statuses/:id/reactions", PleromaAPIController, :emoji_reactions_by)    end    scope "/api/v1/pleroma", Pleroma.Web.PleromaAPI do @@ -287,8 +287,8 @@ defmodule Pleroma.Web.Router do        pipe_through(:authenticated_api)        patch("/conversations/:id", PleromaAPIController, :update_conversation) -      post("/statuses/:id/react_with_emoji", PleromaAPIController, :react_with_emoji) -      post("/statuses/:id/unreact_with_emoji", PleromaAPIController, :unreact_with_emoji) +      put("/statuses/:id/reactions/:emoji", PleromaAPIController, :react_with_emoji) +      delete("/statuses/:id/reactions/:emoji", PleromaAPIController, :unreact_with_emoji)        post("/notifications/read", PleromaAPIController, :read_notification)        patch("/accounts/update_avatar", AccountController, :update_avatar) | 
