49 lines
1,007 B
Elixir
49 lines
1,007 B
Elixir
defmodule Triggerer.Router do
|
|
@moduledoc """
|
|
Router dispatching requests to the correct handlers.
|
|
"""
|
|
|
|
use Plug.Router
|
|
use Plug.ErrorHandler
|
|
require Logger
|
|
|
|
plug(Plug.Logger)
|
|
plug(:match)
|
|
plug(:dispatch)
|
|
|
|
paths =
|
|
quote do
|
|
Triggerer.get_envs()
|
|
end
|
|
|
|
match "/:path" do
|
|
case Map.get(unquote(paths), path) do
|
|
nil ->
|
|
route_not_found(conn)
|
|
|
|
script ->
|
|
case Triggerer.run(script) do
|
|
:ok ->
|
|
send_resp(conn, 200, "OK")
|
|
|
|
{:error, :file_not_found} ->
|
|
send_resp(conn, 404, "File not found.")
|
|
|
|
error ->
|
|
Logger.error("Unknown error: #{inspect(error)}")
|
|
send_resp(conn, 500, "Unknown error.")
|
|
end
|
|
end
|
|
end
|
|
|
|
match _ do
|
|
route_not_found(conn)
|
|
end
|
|
|
|
defp route_not_found(conn), do: send_resp(conn, 404, "Route not found.")
|
|
|
|
defp handle_errors(conn, data) do
|
|
Logger.error(inspect(data))
|
|
send_resp(conn, conn.status, "Something went wrong.")
|
|
end
|
|
end
|