Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

42 строки
1.4KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.ActivityPub.Pipeline do
  5. alias Pleroma.Activity
  6. alias Pleroma.Web.ActivityPub.ActivityPub
  7. alias Pleroma.Web.ActivityPub.MRF
  8. alias Pleroma.Web.ActivityPub.ObjectValidator
  9. alias Pleroma.Web.ActivityPub.SideEffects
  10. alias Pleroma.Web.Federator
  11. @spec common_pipeline(map(), keyword()) :: {:ok, Activity.t(), keyword()} | {:error, any()}
  12. def common_pipeline(object, meta) do
  13. with {_, {:ok, validated_object, meta}} <-
  14. {:validate_object, ObjectValidator.validate(object, meta)},
  15. {_, {:ok, mrfd_object}} <- {:mrf_object, MRF.filter(validated_object)},
  16. {_, {:ok, %Activity{} = activity, meta}} <-
  17. {:persist_object, ActivityPub.persist(mrfd_object, meta)},
  18. {_, {:ok, %Activity{} = activity, meta}} <-
  19. {:execute_side_effects, SideEffects.handle(activity, meta)},
  20. {_, {:ok, _}} <- {:federation, maybe_federate(activity, meta)} do
  21. {:ok, activity, meta}
  22. else
  23. e -> {:error, e}
  24. end
  25. end
  26. defp maybe_federate(activity, meta) do
  27. with {:ok, local} <- Keyword.fetch(meta, :local) do
  28. if local do
  29. Federator.publish(activity)
  30. {:ok, :federated}
  31. else
  32. {:ok, :not_federated}
  33. end
  34. else
  35. _e -> {:error, :badarg}
  36. end
  37. end
  38. end