defmodule Xmeta.Xadmin.Plug do
use Plug.Router
require EEx
if Mix.env() == :dev do
use Plug.Debugger
end
use Plug.ErrorHandler
plug(Plug.Parsers,
parsers: [:urlencoded, :json],
json_decoder: Jason
)
plug(Plug.Logger, log: :debug)
plug(:match)
plug(:dispatch)
@impl true
def init(options) do
# initialize options
options
end
defp module_name_upcase(name) do
{first,last} = String.next_grapheme(name)
String.upcase(first) <> last
end
defp format_params(params) do
params
|> Map.delete("glob")
|>Map.delete("xapi_site")
|>Map.delete("xapi_router")
|>Map.delete("xapi_view")
end
get "/" do
render_html(conn, "home.html", amisJSON: Xmeta.Xapi.Docs.Amis.amisJSON())
# send_resp(conn, 200, Xmeta.Docs.HomeTemplate.html())
end
match "/router/:mod/json" do
mod_name = conn.params["mod"]
mod = mod_name |> String.split(".") |> Module.concat
conn
|> put_resp_content_type("application/json")
|> send_resp(200, Jason.encode!(Xmeta.Xapi.Docs.Amis.get_router_view(mod)))
end
match "/view/:mod/json" do
mod_name = conn.params["mod"]
mod = mod_name |> String.split(".") |> Module.concat
conn
|> put_resp_content_type("application/json")
|> send_resp(200, Jason.encode!(Xmeta.Xapi.Docs.Amis.get_view(mod)))
end
match _ do
send_resp(conn, 404, "not found")
end
defp render_html(%{status: status} = conn, template, assigns \\ []) do
template_dir = __MODULE__.__info__(:compile)[:source] |> Path.dirname
template_dir = template_dir
body =
template_dir
|> Path.join(template)
|> String.replace_suffix(".html", ".html.eex")
|> EEx.eval_file(assigns)
send_resp(conn, status || 200, body)
end
defp render_json(conn, response) when is_map(response) do
conn
|> put_resp_content_type("application/json")
|> send_resp(200, Jason.encode!(response))
end
defp render_json(conn, response) when is_binary(response) do
conn
|> send_resp(200, response)
end
end