dotfiles/app/lib/prymn_web/controllers/server_controller.ex
2023-07-20 23:11:12 +03:00

36 lines
1 KiB
Elixir

defmodule PrymnWeb.ServerController do
alias Prymn.Servers
require Logger
use PrymnWeb, :controller
@doc """
Used by clients to request a new server connection to the prymn backend
validating their registration token.
"""
def register(conn, %{"token" => token}) do
case Servers.register_server(token, conn.remote_ip) do
{:ok, _server} ->
json(conn, %{"connected" => true})
{:error, :invalid_ip} ->
Logger.error("could not register a server because we received an invalid ip")
put_status(conn, 422)
|> json(%{"errors" => ["invalid ip received"]})
{:error, :bad_token} ->
put_status(conn, 422)
|> json(%{"errors" => %{"token" => "token is not valid"}})
{:error, %Ecto.Changeset{} = changeset} ->
errors = Ecto.Changeset.traverse_errors(changeset, fn {msg, _} -> msg end)
put_status(conn, 422)
|> json(%{"errors" => errors})
{:error, error} ->
raise "An unhandled error was received #{inspect(error)}"
end
end
end