subscription_controller.ex (2204B)
1 # Pleroma: A lightweight social networking server 2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> 3 # SPDX-License-Identifier: AGPL-3.0-only 4 5 defmodule Pleroma.Web.MastodonAPI.SubscriptionController do 6 @moduledoc "The module represents functions to manage user subscriptions." 7 use Pleroma.Web, :controller 8 9 alias Pleroma.Web.Push 10 alias Pleroma.Web.Push.Subscription 11 alias Pleroma.Web.MastodonAPI.PushSubscriptionView, as: View 12 13 action_fallback(:errors) 14 15 # Creates PushSubscription 16 # POST /api/v1/push/subscription 17 # 18 def create(%{assigns: %{user: user, token: token}} = conn, params) do 19 with true <- Push.enabled(), 20 {:ok, _} <- Subscription.delete_if_exists(user, token), 21 {:ok, subscription} <- Subscription.create(user, token, params) do 22 view = View.render("push_subscription.json", subscription: subscription) 23 json(conn, view) 24 end 25 end 26 27 # Gets PushSubscription 28 # GET /api/v1/push/subscription 29 # 30 def get(%{assigns: %{user: user, token: token}} = conn, _params) do 31 with true <- Push.enabled(), 32 {:ok, subscription} <- Subscription.get(user, token) do 33 view = View.render("push_subscription.json", subscription: subscription) 34 json(conn, view) 35 end 36 end 37 38 # Updates PushSubscription 39 # PUT /api/v1/push/subscription 40 # 41 def update(%{assigns: %{user: user, token: token}} = conn, params) do 42 with true <- Push.enabled(), 43 {:ok, subscription} <- Subscription.update(user, token, params) do 44 view = View.render("push_subscription.json", subscription: subscription) 45 json(conn, view) 46 end 47 end 48 49 # Deletes PushSubscription 50 # DELETE /api/v1/push/subscription 51 # 52 def delete(%{assigns: %{user: user, token: token}} = conn, _params) do 53 with true <- Push.enabled(), 54 {:ok, _response} <- Subscription.delete(user, token), 55 do: json(conn, %{}) 56 end 57 58 # fallback action 59 # 60 def errors(conn, {:error, :not_found}) do 61 conn 62 |> put_status(:not_found) 63 |> json(dgettext("errors", "Not found")) 64 end 65 66 def errors(conn, _) do 67 conn 68 |> put_status(:internal_server_error) 69 |> json(dgettext("errors", "Something went wrong")) 70 end 71 end