aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRoger Braun <rbraun@Bobble.local>2017-09-14 18:30:05 +0200
committerRoger Braun <rbraun@Bobble.local>2017-09-14 18:30:05 +0200
commit3ca853fb6165b82c39f23e24783e813015db48d5 (patch)
treebf322c2fe0242c42d9323601ab47f88f15d46571 /lib
parentfc85c9f086cd5dd73effa28cb68fb245a554fa98 (diff)
downloadpleroma-3ca853fb6165b82c39f23e24783e813015db48d5.tar.gz
MastoAPI: Follower-related changes
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/mastodon_api/mastodon_api_controller.ex45
-rw-r--r--lib/pleroma/web/router.ex13
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