Floatingghost
5043571084
Some checks are pending
ci/woodpecker/push/build-amd64 Pipeline is pending
ci/woodpecker/push/build-arm64 Pipeline is pending
ci/woodpecker/push/docs Pipeline is pending
ci/woodpecker/push/lint Pipeline is pending
ci/woodpecker/push/test Pipeline is pending
ci/woodpecker/pr/build-amd64 Pipeline is pending
ci/woodpecker/pr/build-arm64 Pipeline is pending
ci/woodpecker/pr/docs Pipeline is pending
ci/woodpecker/pr/lint Pipeline is pending
ci/woodpecker/pr/test Pipeline is pending
by default just prevent job floods with a 1-seconds uniqueness check, but override in RemoteFetcherWorker for 5 minute uniqueness check over all states :infinity is an option we can go for maybe at some point, but that would prevent any refetches so maybe not idk.
46 lines
1.1 KiB
Elixir
46 lines
1.1 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
defmodule Pleroma.Workers.RemoteFetcherWorker do
|
|
alias Pleroma.Object.Fetcher
|
|
|
|
use Pleroma.Workers.WorkerHelper,
|
|
queue: "remote_fetcher",
|
|
unique: [period: 300, states: Oban.Job.states()]
|
|
|
|
@impl Oban.Worker
|
|
def perform(%Job{args: %{"op" => "fetch_remote", "id" => id} = args}) do
|
|
case Fetcher.fetch_object_from_id(id, depth: args["depth"]) do
|
|
{:ok, _object} ->
|
|
:ok
|
|
|
|
{:error, :forbidden} ->
|
|
{:discard, :forbidden}
|
|
|
|
{:error, :not_found} ->
|
|
{:discard, :not_found}
|
|
|
|
{:error, :allowed_depth} ->
|
|
{:discard, :allowed_depth}
|
|
|
|
{:error, :invalid_uri_scheme} ->
|
|
{:discard, :invalid_uri_scheme}
|
|
|
|
{:error, :local_resource} ->
|
|
{:discard, :local_resource}
|
|
|
|
{:reject, _} ->
|
|
{:discard, :reject}
|
|
|
|
{:error, :id_mismatch} ->
|
|
{:discard, :id_mismatch}
|
|
|
|
{:error, _} = e ->
|
|
e
|
|
|
|
e ->
|
|
{:error, e}
|
|
end
|
|
end
|
|
end
|