logo

pleroma

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

subscription_controller.ex (2341B)


  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.SubscriptionController do
  5. @moduledoc "The module represents functions to manage user subscriptions."
  6. use Pleroma.Web, :controller
  7. alias Pleroma.Web.Push
  8. alias Pleroma.Web.Push.Subscription
  9. action_fallback(:errors)
  10. plug(Pleroma.Web.ApiSpec.CastAndValidate)
  11. plug(:restrict_push_enabled)
  12. plug(Pleroma.Web.Plugs.OAuthScopesPlug, %{scopes: ["push"]})
  13. defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.SubscriptionOperation
  14. # Creates PushSubscription
  15. # POST /api/v1/push/subscription
  16. #
  17. def create(%{assigns: %{user: user, token: token}, body_params: params} = conn, _) do
  18. with {:ok, _} <- Subscription.delete_if_exists(user, token),
  19. {:ok, subscription} <- Subscription.create(user, token, params) do
  20. render(conn, "show.json", subscription: subscription)
  21. end
  22. end
  23. # Gets PushSubscription
  24. # GET /api/v1/push/subscription
  25. #
  26. def show(%{assigns: %{user: user, token: token}} = conn, _params) do
  27. with {:ok, subscription} <- Subscription.get(user, token) do
  28. render(conn, "show.json", subscription: subscription)
  29. end
  30. end
  31. # Updates PushSubscription
  32. # PUT /api/v1/push/subscription
  33. #
  34. def update(%{assigns: %{user: user, token: token}, body_params: params} = conn, _) do
  35. with {:ok, subscription} <- Subscription.update(user, token, params) do
  36. render(conn, "show.json", subscription: subscription)
  37. end
  38. end
  39. # Deletes PushSubscription
  40. # DELETE /api/v1/push/subscription
  41. #
  42. def delete(%{assigns: %{user: user, token: token}} = conn, _params) do
  43. with {:ok, _response} <- Subscription.delete(user, token),
  44. do: json(conn, %{})
  45. end
  46. defp restrict_push_enabled(conn, _) do
  47. if Push.enabled() do
  48. conn
  49. else
  50. conn
  51. |> render_error(:forbidden, "Web push subscription is disabled on this Pleroma instance")
  52. |> halt()
  53. end
  54. end
  55. # fallback action
  56. #
  57. def errors(conn, {:error, :not_found}) do
  58. conn
  59. |> put_status(:not_found)
  60. |> json(%{error: dgettext("errors", "Record not found")})
  61. end
  62. def errors(conn, _) do
  63. Pleroma.Web.MastodonAPI.FallbackController.call(conn, nil)
  64. end
  65. end