2018-10-11 17:37:39 +02:00
|
|
|
defmodule MobilizonWeb.PageController do
|
2018-01-14 17:56:50 +01:00
|
|
|
@moduledoc """
|
|
|
|
Controller to load our webapp
|
|
|
|
"""
|
2018-10-11 17:37:39 +02:00
|
|
|
use MobilizonWeb, :controller
|
2019-09-17 23:39:26 +02:00
|
|
|
|
|
|
|
alias MobilizonWeb.Cache
|
2018-01-13 23:33:03 +01:00
|
|
|
|
2019-07-04 17:34:59 +02:00
|
|
|
plug(:put_layout, false)
|
2019-03-05 10:13:19 +01:00
|
|
|
action_fallback(MobilizonWeb.FallbackController)
|
2017-12-08 09:58:14 +01:00
|
|
|
|
2019-05-02 13:04:21 +02:00
|
|
|
def index(conn, _params), do: render(conn, :index)
|
2019-03-04 17:20:18 +01:00
|
|
|
|
|
|
|
def actor(conn, %{"name" => name}) do
|
2019-09-17 23:39:26 +02:00
|
|
|
{status, actor} = Cache.get_local_actor_by_name(name)
|
2019-05-02 13:04:21 +02:00
|
|
|
render_or_error(conn, &ok_status?/2, status, :actor, actor)
|
2019-03-04 17:20:18 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def event(conn, %{"uuid" => uuid}) do
|
2019-09-17 23:39:26 +02:00
|
|
|
{status, event} = Cache.get_public_event_by_uuid_with_preload(uuid)
|
2019-05-02 13:04:21 +02:00
|
|
|
render_or_error(conn, &ok_status_and_is_visible?/2, status, :event, event)
|
2019-03-04 17:20:18 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def comment(conn, %{"uuid" => uuid}) do
|
2019-09-17 23:39:26 +02:00
|
|
|
{status, comment} = Cache.get_comment_by_uuid_with_preload(uuid)
|
2019-05-02 13:04:21 +02:00
|
|
|
render_or_error(conn, &ok_status_and_is_visible?/2, status, :comment, comment)
|
|
|
|
end
|
2019-03-04 17:20:18 +01:00
|
|
|
|
2019-05-02 13:04:21 +02:00
|
|
|
defp render_or_error(conn, check_fn, status, object_type, object) do
|
|
|
|
if check_fn.(status, object) do
|
2019-12-03 11:29:51 +01:00
|
|
|
case object do
|
|
|
|
%Mobilizon.Tombstone{} ->
|
|
|
|
conn
|
|
|
|
|> put_status(:gone)
|
|
|
|
|> render(object_type, object: object)
|
|
|
|
|
|
|
|
_ ->
|
|
|
|
render(conn, object_type, object: object)
|
|
|
|
end
|
2019-05-02 13:04:21 +02:00
|
|
|
else
|
|
|
|
{:error, :not_found}
|
2019-03-04 17:20:18 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-05-02 13:04:21 +02:00
|
|
|
defp is_visible?(%{visibility: v}), do: v in [:public, :unlisted]
|
2019-12-03 11:29:51 +01:00
|
|
|
defp is_visible?(%Mobilizon.Tombstone{}), do: true
|
2019-05-02 13:04:21 +02:00
|
|
|
|
|
|
|
defp ok_status?(status), do: status in [:ok, :commit]
|
|
|
|
defp ok_status?(status, _), do: ok_status?(status)
|
|
|
|
|
|
|
|
defp ok_status_and_is_visible?(status, o), do: ok_status?(status) and is_visible?(o)
|
2017-12-08 09:58:14 +01:00
|
|
|
end
|