logo

pleroma

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

follow_request_controller.ex (2047B)


  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.MastodonAPI.FollowRequestController do
  5. use Pleroma.Web, :controller
  6. alias Pleroma.User
  7. alias Pleroma.Web.CommonAPI
  8. alias Pleroma.Web.Plugs.OAuthScopesPlug
  9. plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false)
  10. plug(:assign_follower when action != :index)
  11. action_fallback(:errors)
  12. plug(OAuthScopesPlug, %{scopes: ["follow", "read:follows"]} when action == :index)
  13. plug(
  14. OAuthScopesPlug,
  15. %{scopes: ["follow", "write:follows"]} when action != :index
  16. )
  17. defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.FollowRequestOperation
  18. @doc "GET /api/v1/follow_requests"
  19. def index(%{assigns: %{user: followed}} = conn, _params) do
  20. follow_requests = User.get_follow_requests(followed)
  21. render(conn, "index.json", for: followed, users: follow_requests, as: :user)
  22. end
  23. @doc "POST /api/v1/follow_requests/:id/authorize"
  24. def authorize(%{assigns: %{user: followed, follower: follower}} = conn, _params) do
  25. with {:ok, follower} <- CommonAPI.accept_follow_request(follower, followed) do
  26. render(conn, "relationship.json", user: followed, target: follower)
  27. end
  28. end
  29. @doc "POST /api/v1/follow_requests/:id/reject"
  30. def reject(%{assigns: %{user: followed, follower: follower}} = conn, _params) do
  31. with {:ok, follower} <- CommonAPI.reject_follow_request(follower, followed) do
  32. render(conn, "relationship.json", user: followed, target: follower)
  33. end
  34. end
  35. defp assign_follower(%{private: %{open_api_spex: %{params: %{id: id}}}} = conn, _) do
  36. case User.get_cached_by_id(id) do
  37. %User{} = follower -> assign(conn, :follower, follower)
  38. nil -> Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found}) |> halt()
  39. end
  40. end
  41. defp errors(conn, {:error, message}) do
  42. conn
  43. |> put_status(:forbidden)
  44. |> json(%{error: message})
  45. end
  46. end