Render errors using ErrorView
This commit is contained in:
parent
34d3a90b63
commit
58fc8b5557
|
@ -1,6 +1,6 @@
|
||||||
defmodule Pleroma.Web.TwitterAPI.Controller do
|
defmodule Pleroma.Web.TwitterAPI.Controller do
|
||||||
use Pleroma.Web, :controller
|
use Pleroma.Web, :controller
|
||||||
alias Pleroma.Web.TwitterAPI.{StatusView, TwitterAPI, UserView}
|
alias Pleroma.Web.TwitterAPI.{ErrorView, StatusView, TwitterAPI, UserView}
|
||||||
alias Pleroma.{Web, Repo, Activity}
|
alias Pleroma.{Web, Repo, Activity}
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
alias Ecto.Changeset
|
alias Ecto.Changeset
|
||||||
|
@ -74,7 +74,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
|
||||||
case TwitterAPI.follow(user, params) do
|
case TwitterAPI.follow(user, params) do
|
||||||
{:ok, user, followed, _activity} ->
|
{:ok, user, followed, _activity} ->
|
||||||
render(conn, UserView, "show.json", %{user: followed, for: user})
|
render(conn, UserView, "show.json", %{user: followed, for: user})
|
||||||
{:error, msg} -> forbidden_json_reply(conn, msg)
|
{:error, msg} -> forbidden_reply(conn, msg)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
|
||||||
case TwitterAPI.unfollow(user, params) do
|
case TwitterAPI.unfollow(user, params) do
|
||||||
{:ok, user, unfollowed} ->
|
{:ok, user, unfollowed} ->
|
||||||
render(conn, UserView, "show.json", %{user: unfollowed, for: user})
|
render(conn, UserView, "show.json", %{user: unfollowed, for: user})
|
||||||
{:error, msg} -> forbidden_json_reply(conn, msg)
|
{:error, msg} -> forbidden_reply(conn, msg)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -115,9 +115,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
def upload_json(conn, %{"media" => media}) do
|
def upload_json(conn, %{"media" => media}) do
|
||||||
response = TwitterAPI.upload(media, "json")
|
json(conn, TwitterAPI.upload(media, "json"))
|
||||||
conn
|
|
||||||
|> json_reply(200, response)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def config(conn, _params) do
|
def config(conn, _params) do
|
||||||
|
@ -157,8 +155,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
|
||||||
render(conn, UserView, "show.json", %{user: user})
|
render(conn, UserView, "show.json", %{user: user})
|
||||||
else
|
else
|
||||||
{:error, errors} ->
|
{:error, errors} ->
|
||||||
conn
|
bad_request_reply(conn, Poison.encode!(errors))
|
||||||
|> json_reply(400, Poison.encode!(errors))
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -171,30 +168,24 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
def external_profile(%{assigns: %{user: current_user}} = conn, %{"profileurl" => uri}) do
|
def external_profile(%{assigns: %{user: current_user}} = conn, %{"profileurl" => uri}) do
|
||||||
with {:ok, user_map} <- TwitterAPI.get_external_profile(current_user, uri),
|
with {:ok, user_map} <- TwitterAPI.get_external_profile(current_user, uri) do
|
||||||
response <- Poison.encode!(user_map) do
|
json(conn, user_map)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp bad_request_reply(conn, message) do
|
||||||
conn
|
conn
|
||||||
|> json_reply(200, response)
|
|> put_status(:bad_request)
|
||||||
end
|
|> render_error(message)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp bad_request_reply(conn, error_message) do
|
defp forbidden_reply(conn, message) do
|
||||||
json = error_json(conn, error_message)
|
|
||||||
json_reply(conn, 400, json)
|
|
||||||
end
|
|
||||||
|
|
||||||
defp json_reply(conn, status, json) do
|
|
||||||
conn
|
conn
|
||||||
|> put_resp_content_type("application/json")
|
|> put_status(:forbidden)
|
||||||
|> send_resp(status, json)
|
|> render_error(message)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp forbidden_json_reply(conn, error_message) do
|
defp render_error(conn, message) do
|
||||||
json = error_json(conn, error_message)
|
render(conn, ErrorView, "error.json", %{request_path: conn.request_path, message: message})
|
||||||
json_reply(conn, 403, json)
|
|
||||||
end
|
|
||||||
|
|
||||||
defp error_json(conn, error_message) do
|
|
||||||
%{"error" => error_message, "request" => conn.request_path} |> Poison.encode!
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
defmodule Pleroma.Web.TwitterAPI.ErrorView do
|
||||||
|
use Pleroma.Web, :view
|
||||||
|
|
||||||
|
def render("error.json", %{request_path: request_path, message: message}) do
|
||||||
|
%{error: message, request: request_path}
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,14 @@
|
||||||
|
defmodule Pleroma.Web.TwitterAPI.ErrorViewTest do
|
||||||
|
use Pleroma.DataCase
|
||||||
|
|
||||||
|
alias Pleroma.Web.TwitterAPI.ErrorView
|
||||||
|
|
||||||
|
test "render an error" do
|
||||||
|
path = "/labor_theory_of_value"
|
||||||
|
message = "Labor theory of value is invalid!"
|
||||||
|
map = %{request_path: path, message: message}
|
||||||
|
expected_object = %{request: path, error: message}
|
||||||
|
|
||||||
|
assert expected_object == ErrorView.render("error.json", map)
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue