diff options
author | Roger Braun <rbraun@Bobble.local> | 2017-09-14 18:30:05 +0200 |
---|---|---|
committer | Roger Braun <rbraun@Bobble.local> | 2017-09-14 18:30:05 +0200 |
commit | 3ca853fb6165b82c39f23e24783e813015db48d5 (patch) | |
tree | bf322c2fe0242c42d9323601ab47f88f15d46571 /lib | |
parent | fc85c9f086cd5dd73effa28cb68fb245a554fa98 (diff) | |
download | pleroma-3ca853fb6165b82c39f23e24783e813015db48d5.tar.gz |
MastoAPI: Follower-related changes
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 45 | ||||
-rw-r--r-- | lib/pleroma/web/router.ex | 13 |
2 files changed, 58 insertions, 0 deletions
diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 4a5bbb7b6..c713c561b 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -87,6 +87,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity}) end + # TODO: Link headers def user_statuses(%{assigns: %{user: user}} = conn, params) do with %User{ap_id: ap_id} <- Repo.get(User, params["id"]) do params = params @@ -230,6 +231,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do end end + # TODO: Link headers def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do params = params |> Map.put("type", "Create") @@ -242,6 +244,49 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity}) end + # TODO: Pagination + def followers(conn, %{"id" => id}) do + with %User{} = user <- Repo.get(User, id), + {:ok, followers} <- User.get_followers(user) do + render conn, AccountView, "accounts.json", %{users: followers, as: :user} + end + end + + def following(conn, %{"id" => id}) do + with %User{} = user <- Repo.get(User, id), + {:ok, followers} <- User.get_friends(user) do + render conn, AccountView, "accounts.json", %{users: followers, as: :user} + end + end + + def follow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do + with %User{} = followed <- Repo.get(User, id), + {:ok, follower} <- User.follow(follower, followed), + {:ok, activity} <- ActivityPub.follow(follower, followed) do + render conn, AccountView, "relationship.json", %{user: follower, target: followed} + end + end + + # TODO: Clean up and unify + def unfollow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do + with %User{} = followed <- Repo.get(User, id), + { :ok, follower, follow_activity } <- User.unfollow(follower, followed), + { :ok, _activity } <- ActivityPub.insert(%{ + "type" => "Undo", + "actor" => follower.ap_id, + "object" => follow_activity.data["id"] # get latest Follow for these users + }) do + render conn, AccountView, "relationship.json", %{user: follower, target: followed} + end + end + + def relationship_noop(%{assigns: %{user: user}} = conn, %{"id" => id}) do + Logger.debug("Unimplemented, returning unmodified relationship") + with %User{} = target <- Repo.get(User, id) do + render conn, AccountView, "relationship.json", %{user: user, target: target} + end + end + def empty_array(conn, _) do Logger.debug("Unimplemented, returning an empty array") json(conn, []) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 5c46d3ca2..0e055a58a 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -44,6 +44,17 @@ defmodule Pleroma.Web.Router do get "/accounts/verify_credentials", MastodonAPIController, :verify_credentials get "/accounts/relationships", MastodonAPIController, :relationships + post "/accounts/:id/follow", MastodonAPIController, :follow + post "/accounts/:id/unfollow", MastodonAPIController, :unfollow + post "/accounts/:id/block", MastodonAPIController, :relationship_noop + post "/accounts/:id/unblock", MastodonAPIController, :relationship_noop + post "/accounts/:id/mute", MastodonAPIController, :relationship_noop + post "/accounts/:id/unmute", MastodonAPIController, :relationship_noop + + get "/blocks", MastodonAPIController, :empty_array + get "/domain_blocks", MastodonAPIController, :empty_array + get "/follow_requests", MastodonAPIController, :empty_array + get "/mutes", MastodonAPIController, :empty_array get "/timelines/home", MastodonAPIController, :home_timeline @@ -73,6 +84,8 @@ defmodule Pleroma.Web.Router do get "/statuses/:id/reblogged_by", MastodonAPIController, :reblogged_by get "/accounts/:id/statuses", MastodonAPIController, :user_statuses + get "/accounts/:id/followers", MastodonAPIController, :followers + get "/accounts/:id/following", MastodonAPIController, :following get "/accounts/:id", MastodonAPIController, :user end |