logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

status_controller.ex (1919B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.PleromaAPI.StatusController do
  5. use Pleroma.Web, :controller
  6. import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2]
  7. require Ecto.Query
  8. require Pleroma.Constants
  9. alias Pleroma.Activity
  10. alias Pleroma.User
  11. alias Pleroma.Web.ActivityPub.ActivityPub
  12. alias Pleroma.Web.ActivityPub.Visibility
  13. alias Pleroma.Web.MastodonAPI.StatusView
  14. alias Pleroma.Web.Plugs.OAuthScopesPlug
  15. plug(Pleroma.Web.ApiSpec.CastAndValidate)
  16. action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
  17. plug(
  18. OAuthScopesPlug,
  19. %{scopes: ["read:statuses"], fallback: :proceed_unauthenticated} when action == :quotes
  20. )
  21. defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaStatusOperation
  22. @doc "GET /api/v1/pleroma/statuses/:id/quotes"
  23. def quotes(%{assigns: %{user: user}} = conn, %{id: id} = params) do
  24. with %Activity{object: object} = activity <- Activity.get_by_id_with_object(id),
  25. true <- Visibility.visible_for_user?(activity, user) do
  26. params =
  27. params
  28. |> Map.put(:type, "Create")
  29. |> Map.put(:blocking_user, user)
  30. |> Map.put(:quote_url, object.data["id"])
  31. recipients =
  32. if user do
  33. [Pleroma.Constants.as_public()] ++ [user.ap_id | User.following(user)]
  34. else
  35. [Pleroma.Constants.as_public()]
  36. end
  37. activities =
  38. recipients
  39. |> ActivityPub.fetch_activities(params)
  40. |> Enum.reverse()
  41. conn
  42. |> add_link_headers(activities)
  43. |> put_view(StatusView)
  44. |> render("index.json",
  45. activities: activities,
  46. for: user,
  47. as: :activity
  48. )
  49. else
  50. nil -> {:error, :not_found}
  51. false -> {:error, :not_found}
  52. end
  53. end
  54. end