diff options
Diffstat (limited to 'lib')
28 files changed, 73 insertions, 75 deletions
| diff --git a/lib/pleroma/application_requirements.ex b/lib/pleroma/application_requirements.ex index 8c0df64fc..a334d12ee 100644 --- a/lib/pleroma/application_requirements.ex +++ b/lib/pleroma/application_requirements.ex @@ -241,10 +241,9 @@ defmodule Pleroma.ApplicationRequirements do      missing_mrfs =        Enum.reduce(mrfs, [], fn x, acc -> -        if Code.ensure_compiled(x) do -          acc -        else -          acc ++ [x] +        case Code.ensure_compiled(x) do +          {:module, _} -> acc +          {:error, _} -> acc ++ [x]          end        end) diff --git a/lib/pleroma/frontend.ex b/lib/pleroma/frontend.ex index ec72fb6a4..816499917 100644 --- a/lib/pleroma/frontend.ex +++ b/lib/pleroma/frontend.ex @@ -43,10 +43,6 @@ defmodule Pleroma.Frontend do        {:download_or_unzip, _} ->          Logger.info("Could not download or unzip the frontend")          {:error, "Could not download or unzip the frontend"} - -      _e -> -        Logger.info("Could not install the frontend") -        {:error, "Could not install the frontend"}      end    end diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 55b646b12..eb44b3855 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -99,21 +99,24 @@ defmodule Pleroma.Object do    def get_by_id(nil), do: nil    def get_by_id(id), do: Repo.get(Object, id) +  @spec get_by_id_and_maybe_refetch(integer(), list()) :: Object.t() | nil    def get_by_id_and_maybe_refetch(id, opts \\ []) do -    %{updated_at: updated_at} = object = get_by_id(id) - -    if opts[:interval] && -         NaiveDateTime.diff(NaiveDateTime.utc_now(), updated_at) > opts[:interval] do -      case Fetcher.refetch_object(object) do -        {:ok, %Object{} = object} -> -          object - -        e -> -          Logger.error("Couldn't refresh #{object.data["id"]}:\n#{inspect(e)}") -          object +    with %Object{updated_at: updated_at} = object <- get_by_id(id) do +      if opts[:interval] && +           NaiveDateTime.diff(NaiveDateTime.utc_now(), updated_at) > opts[:interval] do +        case Fetcher.refetch_object(object) do +          {:ok, %Object{} = object} -> +            object + +          e -> +            Logger.error("Couldn't refresh #{object.data["id"]}:\n#{inspect(e)}") +            object +        end +      else +        object        end      else -      object +      nil -> nil      end    end diff --git a/lib/pleroma/search.ex b/lib/pleroma/search.ex index fd0218cb8..b9d2a0188 100644 --- a/lib/pleroma/search.ex +++ b/lib/pleroma/search.ex @@ -16,6 +16,6 @@ defmodule Pleroma.Search do    def healthcheck_endpoints do      search_module = Pleroma.Config.get([Pleroma.Search, :module]) -    search_module.healthcheck_endpoints +    search_module.healthcheck_endpoints()    end  end diff --git a/lib/pleroma/telemetry/logger.ex b/lib/pleroma/telemetry/logger.ex index 9998d8185..31ce3cc20 100644 --- a/lib/pleroma/telemetry/logger.ex +++ b/lib/pleroma/telemetry/logger.ex @@ -39,7 +39,7 @@ defmodule Pleroma.Telemetry.Logger do          _,          _        ) do -    Logger.error(fn -> +    Logger.debug(fn ->        "Connection pool failed to reclaim any connections due to all of them being in use. It will have to drop requests for opening connections to new hosts"      end)    end @@ -70,7 +70,7 @@ defmodule Pleroma.Telemetry.Logger do          %{key: key},          _        ) do -    Logger.warning(fn -> +    Logger.debug(fn ->        "Pool worker for #{key}: Client #{inspect(client_pid)} died before releasing the connection with #{inspect(reason)}"      end)    end diff --git a/lib/pleroma/upload/filter/exiftool/strip_location.ex b/lib/pleroma/upload/filter/exiftool/strip_location.ex index 8becee712..1744a286d 100644 --- a/lib/pleroma/upload/filter/exiftool/strip_location.ex +++ b/lib/pleroma/upload/filter/exiftool/strip_location.ex @@ -16,7 +16,9 @@ defmodule Pleroma.Upload.Filter.Exiftool.StripLocation do    def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do      try do -      case System.cmd("exiftool", ["-overwrite_original", "-gps:all=", file], parallelism: true) do +      case System.cmd("exiftool", ["-overwrite_original", "-gps:all=", "-png:all=", file], +             parallelism: true +           ) do          {_response, 0} -> {:ok, :filtered}          {error, 1} -> {:error, error}        end diff --git a/lib/pleroma/web.ex b/lib/pleroma/web.ex index 7a8b176cd..e7e7e96f9 100644 --- a/lib/pleroma/web.ex +++ b/lib/pleroma/web.ex @@ -163,7 +163,7 @@ defmodule Pleroma.Web do        """        def safe_render_many(collection, view, template, assigns \\ %{}) do          Enum.map(collection, fn resource -> -          as = Map.get(assigns, :as) || view.__resource__ +          as = Map.get(assigns, :as) || view.__resource__()            assigns = Map.put(assigns, as, resource)            safe_render(view, template, assigns)          end) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 6c1d6ded9..b30b0cabe 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1661,7 +1661,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do         }}      else        {:error, _} = e -> e -      e -> {:error, e}      end    end diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index 1071f8e6e..bc418d908 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -204,7 +204,7 @@ defmodule Pleroma.Web.ActivityPub.MRF do        if function_exported?(policy, :config_description, 0) do          description =            @default_description -          |> Map.merge(policy.config_description) +          |> Map.merge(policy.config_description())            |> Map.put(:group, :pleroma)            |> Map.put(:tab, :mrf)            |> Map.put(:type, :group) diff --git a/lib/pleroma/web/activity_pub/mrf/nsfw_api_policy.ex b/lib/pleroma/web/activity_pub/mrf/nsfw_api_policy.ex index 3d1c273b9..451a212d4 100644 --- a/lib/pleroma/web/activity_pub/mrf/nsfw_api_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/nsfw_api_policy.ex @@ -137,7 +137,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.NsfwApiPolicy do        {:ok, object}      else        {:nsfw, _data} -> handle_nsfw(object) -      _ -> {:reject, "NSFW: Attachment rejected"}      end    end diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index 829ddeaea..d708c99eb 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -220,9 +220,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do           {:ok, object} <- check_object(object) do        {:ok, object}      else -      {:reject, nil} -> {:reject, "[SimplePolicy]"}        {:reject, _} = e -> e -      _ -> {:reject, "[SimplePolicy]"}      end    end @@ -236,9 +234,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do           {:ok, object} <- check_banner_removal(actor_info, object) do        {:ok, object}      else -      {:reject, nil} -> {:reject, "[SimplePolicy]"}        {:reject, _} = e -> e -      _ -> {:reject, "[SimplePolicy]"}      end    end @@ -249,9 +245,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do           {:ok, object} <- check_reject(uri, object) do        {:ok, object}      else -      {:reject, nil} -> {:reject, "[SimplePolicy]"}        {:reject, _} = e -> e -      _ -> {:reject, "[SimplePolicy]"}      end    end diff --git a/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex b/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex index d9deff35f..1c114558e 100644 --- a/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex @@ -31,7 +31,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.VocabularyPolicy do        {:reject, _} = e -> e        {:accepted, _} -> {:reject, "[VocabularyPolicy] #{message_type} not in accept list"}        {:rejected, _} -> {:reject, "[VocabularyPolicy] #{message_type} in reject list"} -      _ -> {:reject, "[VocabularyPolicy]"}      end    end diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index 40184bd97..7f11a4d67 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -23,7 +23,7 @@ defmodule Pleroma.Web.ActivityPub.Pipeline do    defp config, do: Config.get([:pipeline, :config], Config)    @spec common_pipeline(map(), keyword()) :: -          {:ok, Activity.t() | Object.t(), keyword()} | {:error, any()} +          {:ok, Activity.t() | Object.t(), keyword()} | {:error | :reject, any()}    def common_pipeline(object, meta) do      case Repo.transaction(fn -> do_common_pipeline(object, meta) end, Utils.query_timeout()) do        {:ok, {:ok, activity, meta}} -> diff --git a/lib/pleroma/web/admin_api/controllers/invite_controller.ex b/lib/pleroma/web/admin_api/controllers/invite_controller.ex index 7e3020f28..30dbc7e73 100644 --- a/lib/pleroma/web/admin_api/controllers/invite_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/invite_controller.ex @@ -46,7 +46,6 @@ defmodule Pleroma.Web.AdminAPI.InviteController do        render(conn, "show.json", invite: updated_invite)      else        nil -> {:error, :not_found} -      error -> error      end    end diff --git a/lib/pleroma/web/admin_api/controllers/rule_controller.ex b/lib/pleroma/web/admin_api/controllers/rule_controller.ex index 43b2f209a..5d4427b84 100644 --- a/lib/pleroma/web/admin_api/controllers/rule_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/rule_controller.ex @@ -24,7 +24,7 @@ defmodule Pleroma.Web.AdminAPI.RuleController do    plug(OAuthScopesPlug, %{scopes: ["admin:read"]} when action == :index) -  action_fallback(AdminAPI.FallbackController) +  action_fallback(Pleroma.Web.AdminAPI.FallbackController)    defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.RuleOperation diff --git a/lib/pleroma/web/api_spec/operations/streaming_operation.ex b/lib/pleroma/web/api_spec/operations/streaming_operation.ex index b580bc2f0..47bce07b3 100644 --- a/lib/pleroma/web/api_spec/operations/streaming_operation.ex +++ b/lib/pleroma/web/api_spec/operations/streaming_operation.ex @@ -139,7 +139,7 @@ defmodule Pleroma.Web.ApiSpec.StreamingOperation do    end    defp get_schema(%Schema{} = schema), do: schema -  defp get_schema(schema), do: schema.schema +  defp get_schema(schema), do: schema.schema()    defp server_sent_event_helper(name, description, type, payload, opts \\ []) do      payload_type = Keyword.get(opts, :payload_type, :json) diff --git a/lib/pleroma/web/api_spec/schemas/chat.ex b/lib/pleroma/web/api_spec/schemas/chat.ex index a07d12865..affa25a95 100644 --- a/lib/pleroma/web/api_spec/schemas/chat.ex +++ b/lib/pleroma/web/api_spec/schemas/chat.ex @@ -68,7 +68,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Chat do        },        "id" => "1",        "unread" => 2, -      "last_message" => ChatMessage.schema().example(), +      "last_message" => ChatMessage.schema().example,        "updated_at" => "2020-04-21T15:06:45.000Z"      }    }) diff --git a/lib/pleroma/web/auth/ldap_authenticator.ex b/lib/pleroma/web/auth/ldap_authenticator.ex index 17ffd820d..c2c5eb1e5 100644 --- a/lib/pleroma/web/auth/ldap_authenticator.ex +++ b/lib/pleroma/web/auth/ldap_authenticator.ex @@ -102,28 +102,37 @@ defmodule Pleroma.Web.Auth.LDAPAuthenticator do             {:scope, :eldap.wholeSubtree()},             {:timeout, @search_timeout}           ]) do -      {:ok, {:eldap_search_result, [{:eldap_entry, _, attributes}], _}} -> -        params = %{ -          name: name, -          nickname: name, -          password: nil -        } - -        params = -          case List.keyfind(attributes, ~c"mail", 0) do -            {_, [mail]} -> Map.put_new(params, :email, :erlang.list_to_binary(mail)) -            _ -> params -          end - -        changeset = User.register_changeset_ldap(%User{}, params) +      # The :eldap_search_result record structure changed in OTP 24.3 and added a controls field +      # https://github.com/erlang/otp/pull/5538 +      {:ok, {:eldap_search_result, [{:eldap_entry, _object, attributes}], _referrals}} -> +        try_register(name, attributes) -        case User.register(changeset) do -          {:ok, user} -> user -          error -> error -        end +      {:ok, {:eldap_search_result, [{:eldap_entry, _object, attributes}], _referrals, _controls}} -> +        try_register(name, attributes)        error ->          error      end    end + +  defp try_register(name, attributes) do +    params = %{ +      name: name, +      nickname: name, +      password: nil +    } + +    params = +      case List.keyfind(attributes, ~c"mail", 0) do +        {_, [mail]} -> Map.put_new(params, :email, :erlang.list_to_binary(mail)) +        _ -> params +      end + +    changeset = User.register_changeset_ldap(%User{}, params) + +    case User.register(changeset) do +      {:ok, user} -> user +      error -> error +    end +  end  end diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index 34e480d73..09bedcd2b 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -611,7 +611,6 @@ defmodule Pleroma.Web.CommonAPI do        Utils.update_report_state(activity, state)      else        nil -> {:error, :not_found} -      _ -> {:error, dgettext("errors", "Could not update state")}      end    end @@ -621,7 +620,6 @@ defmodule Pleroma.Web.CommonAPI do        set_visibility(activity, opts)      else        nil -> {:error, :not_found} -      {:error, reason} -> {:error, reason}      end    end diff --git a/lib/pleroma/web/o_auth/app.ex b/lib/pleroma/web/o_auth/app.ex index 0aa655381..d1bf6dd18 100644 --- a/lib/pleroma/web/o_auth/app.ex +++ b/lib/pleroma/web/o_auth/app.ex @@ -62,7 +62,7 @@ defmodule Pleroma.Web.OAuth.App do      |> Repo.insert()    end -  @spec update(pos_integer(), map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()} +  @spec update(pos_integer(), map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()} | nil    def update(id, params) do      with %__MODULE__{} = app <- Repo.get(__MODULE__, id) do        app diff --git a/lib/pleroma/web/rich_media/backfill.ex b/lib/pleroma/web/rich_media/backfill.ex index 1d8cc87d4..f1ee83bf0 100644 --- a/lib/pleroma/web/rich_media/backfill.ex +++ b/lib/pleroma/web/rich_media/backfill.ex @@ -11,6 +11,10 @@ defmodule Pleroma.Web.RichMedia.Backfill do    require Logger    @cachex Pleroma.Config.get([:cachex, :provider], Cachex) +  @stream_out_impl Pleroma.Config.get( +                     [__MODULE__, :stream_out], +                     Pleroma.Web.ActivityPub.ActivityPub +                   )    @spec run(map()) ::            :ok | {:error, {:invalid_metadata, any()} | :body_too_large | {:content, any()} | any()} @@ -64,7 +68,7 @@ defmodule Pleroma.Web.RichMedia.Backfill do    defp stream_update(%{"activity_id" => activity_id}) do      Pleroma.Activity.get_by_id(activity_id)      |> Pleroma.Activity.normalize() -    |> Pleroma.Web.ActivityPub.ActivityPub.stream_out() +    |> @stream_out_impl.stream_out()    end    defp warm_cache(key, val), do: @cachex.put(:rich_media_cache, key, val) diff --git a/lib/pleroma/web/rich_media/card.ex b/lib/pleroma/web/rich_media/card.ex index 72ff5e791..abad4957e 100644 --- a/lib/pleroma/web/rich_media/card.ex +++ b/lib/pleroma/web/rich_media/card.ex @@ -83,7 +83,7 @@ defmodule Pleroma.Web.RichMedia.Card do            card          nil -> -          activity_id = Keyword.get(opts, :activity, nil) +          activity_id = Keyword.get(opts, :activity_id, nil)            RichMediaWorker.new(%{"op" => "backfill", "url" => url, "activity_id" => activity_id})            |> Oban.insert() diff --git a/lib/pleroma/web/templates/feed/feed/tag.atom.eex b/lib/pleroma/web/templates/feed/feed/tag.atom.eex index 14b0ee594..3449c97ff 100644 --- a/lib/pleroma/web/templates/feed/feed/tag.atom.eex +++ b/lib/pleroma/web/templates/feed/feed/tag.atom.eex @@ -12,7 +12,7 @@    <subtitle><%= Gettext.dpgettext("static_pages", "tag feed description", "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse.", tag: @tag) %></subtitle>    <logo><%= feed_logo() %></logo>    <updated><%= most_recent_update(@activities) %></updated> -  <link rel="self" href="<%= '#{Routes.tag_feed_url(@conn, :feed, @tag)}.atom'  %>" type="application/atom+xml"/> +  <link rel="self" href="<%= "#{Routes.tag_feed_url(@conn, :feed, @tag)}.atom"  %>" type="application/atom+xml"/>    <%= for activity <- @activities do %>    <%= render Phoenix.Controller.view_module(@conn), "_tag_activity.atom", Map.merge(assigns, prepare_activity(activity, actor: true)) %> diff --git a/lib/pleroma/web/templates/feed/feed/tag.rss.eex b/lib/pleroma/web/templates/feed/feed/tag.rss.eex index 27dde5627..a87f9bf50 100644 --- a/lib/pleroma/web/templates/feed/feed/tag.rss.eex +++ b/lib/pleroma/web/templates/feed/feed/tag.rss.eex @@ -6,7 +6,7 @@      <title>#<%= @tag %></title>      <description><%= Gettext.dpgettext("static_pages", "tag feed description", "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse.", tag: @tag) %></description> -    <link><%= '#{Routes.tag_feed_url(@conn, :feed, @tag)}.rss' %></link> +    <link><%= "#{Routes.tag_feed_url(@conn, :feed, @tag)}.rss" %></link>      <webfeeds:logo><%= feed_logo() %></webfeeds:logo>      <webfeeds:accentColor>2b90d9</webfeeds:accentColor>      <%= for activity <- @activities do %> diff --git a/lib/pleroma/web/templates/feed/feed/user.atom.eex b/lib/pleroma/web/templates/feed/feed/user.atom.eex index e36bfc66c..c2c77cfed 100644 --- a/lib/pleroma/web/templates/feed/feed/user.atom.eex +++ b/lib/pleroma/web/templates/feed/feed/user.atom.eex @@ -11,12 +11,12 @@    <subtitle><%= escape(@user.bio) %></subtitle>    <updated><%= most_recent_update(@activities, @user, :atom) %></updated>    <logo><%= logo(@user) %></logo> -  <link rel="self" href="<%= '#{Routes.user_feed_url(@conn, :feed, @user.nickname)}.atom' %>" type="application/atom+xml"/> +  <link rel="self" href="<%= "#{Routes.user_feed_url(@conn, :feed, @user.nickname)}.atom" %>" type="application/atom+xml"/>    <%= render Phoenix.Controller.view_module(@conn), "_author.atom", assigns %>    <%= if last_activity(@activities) do %> -    <link rel="next" href="<%= '#{Routes.user_feed_url(@conn, :feed, @user.nickname)}.atom?max_id=#{last_activity(@activities).id}' %>" type="application/atom+xml"/> +    <link rel="next" href="<%= "#{Routes.user_feed_url(@conn, :feed, @user.nickname)}.atom?max_id=#{last_activity(@activities).id}" %>" type="application/atom+xml"/>    <% end %>    <%= for activity <- @activities do %> diff --git a/lib/pleroma/web/templates/feed/feed/user.rss.eex b/lib/pleroma/web/templates/feed/feed/user.rss.eex index fae3fcf3d..b907a7e57 100644 --- a/lib/pleroma/web/templates/feed/feed/user.rss.eex +++ b/lib/pleroma/web/templates/feed/feed/user.rss.eex @@ -7,20 +7,20 @@       xmlns:poco="http://portablecontacts.net/spec/1.0">    <channel>      <title><%= @user.nickname <> "'s timeline" %></title> -    <link><%= '#{Routes.user_feed_url(@conn, :feed, @user.nickname)}.rss' %></link> +    <link><%= "#{Routes.user_feed_url(@conn, :feed, @user.nickname)}.rss" %></link>      <atom:link href="<%= Routes.user_feed_url(@conn, :feed, @user.nickname) <> ".atom" %>"                 rel="self" type="application/rss+xml" />      <description><%= escape(@user.bio) %></description>      <image>        <url><%= logo(@user) %></url>        <title><%= @user.nickname <> "'s timeline" %></title> -      <link><%= '#{Routes.user_feed_url(@conn, :feed, @user.nickname)}.rss' %></link> +      <link><%= "#{Routes.user_feed_url(@conn, :feed, @user.nickname)}.rss" %></link>      </image>      <%= render Phoenix.Controller.view_module(@conn), "_author.rss", assigns %>      <%= if last_activity(@activities) do %> -      <link rel="next"><%= '#{Routes.user_feed_url(@conn, :feed, @user.nickname)}.rss?max_id=#{last_activity(@activities).id}' %></link> +      <link rel="next"><%= "#{Routes.user_feed_url(@conn, :feed, @user.nickname)}.rss?max_id=#{last_activity(@activities).id}" %></link>      <% end %>      <%= for activity <- @activities do %> diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 040fa3286..6805233df 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -207,9 +207,6 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do            {:error, changeset} ->              {_, {error, _}} = Enum.at(changeset.errors, 0)              json(conn, %{error: "New password #{error}."}) - -          _ -> -            json(conn, %{error: "Unable to change password."})          end        {:error, msg} -> diff --git a/lib/pleroma/workers/user_refresh_worker.ex b/lib/pleroma/workers/user_refresh_worker.ex index 5842143f8..f43170c8f 100644 --- a/lib/pleroma/workers/user_refresh_worker.ex +++ b/lib/pleroma/workers/user_refresh_worker.ex @@ -3,11 +3,11 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Workers.UserRefreshWorker do -  use Pleroma.Workers.WorkerHelper, queue: "background", max_attempts: 1, unique: [period: 300] +  use Oban.Worker, queue: :background, max_attempts: 1, unique: [period: 300]    alias Pleroma.User -  @impl Oban.Worker +  @impl true    def perform(%Job{args: %{"ap_id" => ap_id}}) do      User.fetch_by_ap_id(ap_id)    end | 
