Add error messages for repeated follows and unfollows

This commit is contained in:
dtluna 2017-04-12 17:34:36 +03:00
commit 65ef18a715
4 changed files with 55 additions and 27 deletions

View file

@ -103,7 +103,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
def follow(%User{} = follower, followed_id) do
with %User{} = followed <- Repo.get(User, followed_id),
{ :ok, follower } <- User.follow(follower, followed),
{ :ok, follower } <- User.follow(follower, followed),
{ :ok, activity } <- ActivityPub.insert(%{
"type" => "Follow",
"actor" => follower.ap_id,
@ -112,6 +112,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
})
do
{ :ok, follower, followed, activity }
else
err -> err
end
end
@ -120,6 +122,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
{ :ok, follower } <- User.unfollow(follower, followed)
do
{ :ok, follower, followed }
else
err -> err
end
end

View file

@ -44,21 +44,24 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
end
def follow(%{assigns: %{user: user}} = conn, %{ "user_id" => followed_id }) do
{ :ok, _user, follower, _activity } = TwitterAPI.follow(user, followed_id)
case TwitterAPI.follow(user, followed_id) do
{ :ok, _user, followed, _activity } ->
response = followed |> UserRepresenter.to_json(%{for: user})
conn |> json_reply(200, response)
{ :error, msg } -> forbidden_json_reply(conn, msg)
end
response = follower |> UserRepresenter.to_json(%{for: user})
conn
|> json_reply(200, response)
end
def unfollow(%{assigns: %{user: user}} = conn, %{ "user_id" => followed_id }) do
{ :ok, user, follower } = TwitterAPI.unfollow(user, followed_id)
case TwitterAPI.unfollow(user, followed_id) do
{ :ok, user, followed } ->
response = followed |> UserRepresenter.to_json(%{for: user})
response = follower |> UserRepresenter.to_json(%{for: user})
conn
|> json_reply(200, response)
conn
|> json_reply(200, response)
{ :error, msg } -> forbidden_json_reply(conn, msg)
end
end
def fetch_status(%{assigns: %{user: user}} = conn, %{ "id" => id }) do
@ -88,4 +91,11 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
|> put_resp_content_type("application/json")
|> send_resp(status, json)
end
defp forbidden_json_reply(conn, error_message) do
json = %{"error" => error_message, "request" => conn.request_path}
|> Poison.encode!
json_reply(conn, 403, json)
end
end