2023-06-19 20:28:24 +00:00
|
|
|
defmodule PrymnWeb.ServerLive.NewServer do
|
|
|
|
use PrymnWeb, :live_component
|
|
|
|
|
|
|
|
alias Prymn.Servers
|
|
|
|
require Logger
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
def render(assigns) do
|
|
|
|
~H"""
|
|
|
|
<div>
|
2023-12-13 15:41:46 +00:00
|
|
|
<.header class="mb-10">
|
2023-06-19 20:28:24 +00:00
|
|
|
Add a new server
|
|
|
|
<:subtitle>Connect your server to Prymn!</:subtitle>
|
|
|
|
</.header>
|
|
|
|
|
|
|
|
<.error :if={assigns[:error]}>There were some errors.</.error>
|
|
|
|
|
2023-07-28 20:44:00 +00:00
|
|
|
<.simple_form
|
|
|
|
id="server-form"
|
|
|
|
for={@form}
|
|
|
|
phx-change="validate"
|
|
|
|
phx-submit="connect"
|
|
|
|
phx-target={@myself}
|
|
|
|
>
|
2023-06-19 20:28:24 +00:00
|
|
|
<.input field={@form[:name]} label="Server Name" phx-debounce={1000} />
|
|
|
|
<.input
|
|
|
|
field={@form[:provider]}
|
|
|
|
label="Provider"
|
|
|
|
type="select"
|
|
|
|
prompt="Select a provider"
|
|
|
|
options={Ecto.Enum.mappings(Servers.Server, :provider)}
|
|
|
|
/>
|
|
|
|
<.provider id="provider" provider={@form[:provider]} />
|
|
|
|
<:actions>
|
2023-11-23 13:45:33 +00:00
|
|
|
<Button.primary>Connect</Button.primary>
|
2023-06-19 20:28:24 +00:00
|
|
|
</:actions>
|
|
|
|
</.simple_form>
|
|
|
|
</div>
|
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
def update(assigns, socket) do
|
|
|
|
changeset = Servers.change_server(%Servers.Server{})
|
|
|
|
|
|
|
|
socket =
|
|
|
|
socket
|
|
|
|
|> assign(assigns)
|
|
|
|
|> assign(:form, to_form(changeset))
|
|
|
|
|
|
|
|
{:ok, socket}
|
|
|
|
end
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
def handle_event("validate", %{"server" => params}, socket) do
|
|
|
|
form =
|
|
|
|
%Servers.Server{}
|
|
|
|
|> Servers.change_server(params)
|
|
|
|
|> Map.put(:action, :validate)
|
|
|
|
|> to_form()
|
|
|
|
|
|
|
|
{:noreply, assign(socket, form: form)}
|
|
|
|
end
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
def handle_event("connect", %{"server" => params}, socket) do
|
|
|
|
socket =
|
|
|
|
case Servers.create_server(params) do
|
|
|
|
{:ok, server} ->
|
|
|
|
# Notify parent
|
|
|
|
send(self(), {:connect, server})
|
|
|
|
|
|
|
|
socket
|
|
|
|
|> put_flash(:info, "Starting new server connection...")
|
|
|
|
|> push_patch(to: ~p"/servers")
|
|
|
|
|
|
|
|
{:error, %Ecto.Changeset{} = changeset} ->
|
|
|
|
socket
|
|
|
|
|> assign(:form, to_form(changeset))
|
|
|
|
|> assign(:error, true)
|
|
|
|
end
|
|
|
|
|
|
|
|
{:noreply, socket}
|
|
|
|
end
|
|
|
|
|
|
|
|
defp provider(%{provider: %{value: :Custom}} = assigns) do
|
|
|
|
~H"""
|
|
|
|
<p>
|
|
|
|
<bold class="font-bold">Manual installation:</bold>
|
|
|
|
To connect, you must have root SSH access to your server. When you click
|
|
|
|
connect, you will be prompted to execute a command on your server to
|
|
|
|
complete the installation.
|
|
|
|
</p>
|
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
|
|
|
defp provider(assigns), do: ~H""
|
|
|
|
end
|