logo

pleroma

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

scrobble_controller.ex (1609B)


  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.ScrobbleController do
  5. use Pleroma.Web, :controller
  6. import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2]
  7. alias Pleroma.User
  8. alias Pleroma.Web.ActivityPub.ActivityPub
  9. alias Pleroma.Web.CommonAPI
  10. alias Pleroma.Web.Plugs.OAuthScopesPlug
  11. plug(Pleroma.Web.ApiSpec.CastAndValidate)
  12. plug(
  13. OAuthScopesPlug,
  14. %{scopes: ["read"], fallback: :proceed_unauthenticated} when action == :index
  15. )
  16. plug(OAuthScopesPlug, %{scopes: ["write"]} when action == :create)
  17. defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaScrobbleOperation
  18. def create(%{assigns: %{user: user}, body_params: params} = conn, _) do
  19. with {:ok, activity} <- CommonAPI.listen(user, params) do
  20. render(conn, "show.json", activity: activity, for: user)
  21. else
  22. {:error, message} ->
  23. conn
  24. |> put_status(:bad_request)
  25. |> json(%{"error" => message})
  26. end
  27. end
  28. def index(%{assigns: %{user: reading_user}} = conn, %{id: id} = params) do
  29. with %User{} = user <- User.get_cached_by_nickname_or_id(id, for: reading_user) do
  30. params = Map.put(params, :type, ["Listen"])
  31. activities = ActivityPub.fetch_user_abstract_activities(user, reading_user, params)
  32. conn
  33. |> add_link_headers(activities)
  34. |> render("index.json", %{
  35. activities: activities,
  36. for: reading_user,
  37. as: :activity
  38. })
  39. end
  40. end
  41. end