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