Merge branch 'feature/private-comment' into 'master'

Only render public comments

Closes #111

See merge request framasoft/mobilizon!126
This commit is contained in:
Thomas Citharel 2019-04-26 10:10:11 +02:00
commit e1e410d595
4 changed files with 49 additions and 21 deletions

View file

@ -42,7 +42,16 @@ defmodule MobilizonWeb.ActivityPubController do
true <- event.visibility in [:public, :unlisted] do true <- event.visibility in [:public, :unlisted] do
conn conn
|> put_resp_header("content-type", "application/activity+json") |> put_resp_header("content-type", "application/activity+json")
|> json(ObjectView.render("event.json", %{event: event |> Utils.make_event_data()})) |> json(
ObjectView.render(
"event.json",
%{
event:
event
|> Utils.make_event_data()
}
)
)
else else
{:ignore, _} -> {:ignore, _} ->
{:error, :not_found} {:error, :not_found}
@ -55,15 +64,22 @@ defmodule MobilizonWeb.ActivityPubController do
@spec comment(Plug.Conn.t(), map()) :: Plug.Conn.t() @spec comment(Plug.Conn.t(), map()) :: Plug.Conn.t()
def comment(conn, %{"uuid" => uuid}) do def comment(conn, %{"uuid" => uuid}) do
with {status, %Comment{} = comment} when status in [:ok, :commit] <- with {status, %Comment{} = comment} when status in [:ok, :commit] <-
Events.get_cached_comment_full_by_uuid(uuid) do Events.get_cached_comment_full_by_uuid(uuid),
# Comments are always public for now true <- comment.visibility in [:public, :unlisted] do
# TODO : Make comments maybe restricted
# true <- comment.public do
conn conn
|> put_resp_header("content-type", "application/activity+json") |> put_resp_header("content-type", "application/activity+json")
|> json(ObjectView.render("comment.json", %{comment: comment |> Utils.make_comment_data()})) |> json(
ObjectView.render(
"comment.json",
%{
comment:
comment
|> Utils.make_comment_data()
}
)
)
else else
{:ignore, _} -> _ ->
{:error, :not_found} {:error, :not_found}
end end
end end

View file

@ -60,10 +60,8 @@ defmodule MobilizonWeb.PageController do
case get_format(conn) do case get_format(conn) do
"html" -> "html" ->
with {status, %Comment{} = comment} when status in [:ok, :commit] <- with {status, %Comment{} = comment} when status in [:ok, :commit] <-
Events.get_cached_comment_full_by_uuid(uuid) do Events.get_cached_comment_full_by_uuid(uuid),
# Comments are always public for now true <- comment.visibility in [:public, :unlisted] do
# TODO : Make comments maybe restricted
# true <- comment.public do
render_with_meta(conn, comment) render_with_meta(conn, comment)
else else
_ -> {:error, :not_found} _ -> {:error, :not_found}

View file

@ -69,17 +69,16 @@ defmodule MobilizonWeb.ActivityPubControllerTest do
ObjectView.render("comment.json", %{comment: comment |> Utils.make_comment_data()}) ObjectView.render("comment.json", %{comment: comment |> Utils.make_comment_data()})
end end
# TODO ! test "it returns 404 for non-public comments", %{conn: conn} do
# test "it returns 404 for non-public comments", %{conn: conn} do comment = insert(:comment, visibility: :private)
# event = insert(:event, public: false)
# conn = conn =
# conn conn
# |> put_req_header("accept", "application/activity+json") |> put_req_header("accept", "application/activity+json")
# |> get("/events/#{event.uuid}") |> get(Routes.page_url(Endpoint, :comment, comment.uuid))
# assert json_response(conn, 404) assert json_response(conn, 404)
# end end
end end
describe "/@:preferred_username/inbox" do describe "/@:preferred_username/inbox" do

View file

@ -43,5 +43,20 @@ defmodule MobilizonWeb.PageControllerTest do
assert html_response(conn, 404) assert html_response(conn, 404)
end end
# TODO: Comments test "GET /comments/:uuid", %{conn: conn} do
comment = insert(:comment)
conn = get(conn, Routes.page_url(Endpoint, :comment, comment.uuid))
assert html_response(conn, 200)
end
test "GET /comments/:uuid with not existing comment", %{conn: conn} do
conn = get(conn, Routes.page_url(Endpoint, :comment, "not_existing_comment"))
assert html_response(conn, 404)
end
test "GET /comments/:uuid with comment not public", %{conn: conn} do
comment = insert(:comment, visibility: :private)
conn = get(conn, Routes.page_url(Endpoint, :comment, comment.uuid))
assert html_response(conn, 404)
end
end end