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