diff options
| author | kaniini <nenolod@gmail.com> | 2019-04-23 02:47:43 +0000 | 
|---|---|---|
| committer | kaniini <nenolod@gmail.com> | 2019-04-23 02:47:43 +0000 | 
| commit | 3789945784a331790d73f69b407751df9f7d6e8f (patch) | |
| tree | fcb3708809496b8f60f97dc99f1e291e9b9f1945 /lib | |
| parent | 10c40e13d2bcc011f941546b571aa3bb9f08ae0c (diff) | |
| parent | 9dd36e5bcbfddcc38cc9b5093e38a5679ab3a6e6 (diff) | |
| download | pleroma-3789945784a331790d73f69b407751df9f7d6e8f.tar.gz pleroma-3789945784a331790d73f69b407751df9f7d6e8f.zip  | |
Merge branch 'feature/users-favourites-timeline-endpoint' into 'develop'
Extend Mastodon API with public endpoint for getting Favorites timeline of any user (#789)
Closes #789
See merge request pleroma/pleroma!1056
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/user/info.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 37 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api_controller.ex | 2 | 
4 files changed, 42 insertions, 1 deletions
diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex index 5afa7988c..7f22a45b5 100644 --- a/lib/pleroma/user/info.ex +++ b/lib/pleroma/user/info.ex @@ -38,6 +38,7 @@ defmodule Pleroma.User.Info do      field(:salmon, :string, default: nil)      field(:hide_followers, :boolean, default: false)      field(:hide_follows, :boolean, default: false) +    field(:hide_favorites, :boolean, default: true)      field(:pinned_activities, {:array, :string}, default: [])      field(:flavour, :string, default: nil) @@ -202,6 +203,7 @@ defmodule Pleroma.User.Info do        :banner,        :hide_follows,        :hide_followers, +      :hide_favorites,        :background,        :show_role      ]) diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index dfc89defa..0ba8d9eea 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1087,6 +1087,43 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      |> render("index.json", %{activities: activities, for: user, as: :activity})    end +  def user_favourites(%{assigns: %{user: for_user}} = conn, %{"id" => id} = params) do +    with %User{} = user <- User.get_by_id(id), +         false <- user.info.hide_favorites do +      params = +        params +        |> Map.put("type", "Create") +        |> Map.put("favorited_by", user.ap_id) +        |> Map.put("blocking_user", for_user) + +      recipients = +        if for_user do +          ["https://www.w3.org/ns/activitystreams#Public"] ++ +            [for_user.ap_id | for_user.following] +        else +          ["https://www.w3.org/ns/activitystreams#Public"] +        end + +      activities = +        recipients +        |> ActivityPub.fetch_activities(params) +        |> Enum.reverse() + +      conn +      |> add_link_headers(:favourites, activities) +      |> put_view(StatusView) +      |> render("index.json", %{activities: activities, for: for_user, as: :activity}) +    else +      nil -> +        {:error, :not_found} + +      true -> +        conn +        |> put_status(403) +        |> json(%{error: "Can't get favorites"}) +    end +  end +    def bookmarks(%{assigns: %{user: user}} = conn, _) do      user = User.get_cached_by_id(user.id) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 6228b5868..ff4f08af5 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -395,6 +395,8 @@ defmodule Pleroma.Web.Router do        get("/accounts/:id", MastodonAPIController, :user)        get("/search", MastodonAPIController, :search) + +      get("/pleroma/accounts/:id/favourites", MastodonAPIController, :user_favourites)      end    end diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 851f328fd..79ed9dad2 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -632,7 +632,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do    defp build_info_cng(user, params) do      info_params = -      ["no_rich_text", "locked", "hide_followers", "hide_follows", "show_role"] +      ["no_rich_text", "locked", "hide_followers", "hide_follows", "hide_favorites", "show_role"]        |> Enum.reduce(%{}, fn key, res ->          if value = params[key] do            Map.put(res, key, value == "true")  | 
