mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 18:18:55 +00:00
Device creation works
This commit is contained in:
@@ -3,6 +3,9 @@ import { qrEncode } from "./qr_code.js"
|
||||
let Hooks = {}
|
||||
|
||||
Hooks.QrEncode = {
|
||||
mounted() {
|
||||
qrEncode()
|
||||
},
|
||||
updated() {
|
||||
qrEncode()
|
||||
}
|
||||
|
||||
@@ -90,6 +90,19 @@ defmodule FgHttp.Devices do
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Verifies a Device.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> verify!(device.id)
|
||||
{:ok, %Device{}}
|
||||
"""
|
||||
def verify(id) do
|
||||
get_device!(id)
|
||||
|> update_device(%{verified_at: DateTime.utc_now})
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deletes a device.
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ defmodule FgHttp.Devices.Device do
|
||||
@doc false
|
||||
def changeset(device, attrs) do
|
||||
device
|
||||
|> cast(attrs, [:name, :public_key])
|
||||
|> validate_required([:name])
|
||||
|> cast(attrs, [:user_id, :verified_at, :name, :public_key])
|
||||
|> validate_required([:user_id])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -19,7 +19,7 @@ defmodule FgHttp.Users.User do
|
||||
def changeset(user, attrs \\ %{}) do
|
||||
user
|
||||
|> cast(attrs, [:email, :confirmed_at, :password_digest, :last_signed_in_at])
|
||||
|> validate_required([:email, :last_signed_in_at])
|
||||
|> validate_required([:email])
|
||||
|> unique_constraint(:email)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -18,6 +18,25 @@ defmodule FgHttpWeb.DeviceController do
|
||||
render(conn, "new.html", changeset: changeset)
|
||||
end
|
||||
|
||||
def create(conn, %{"device" => device_params}) do
|
||||
create_params = %{
|
||||
"user_id" => conn.assigns.current_user.id,
|
||||
"verified_at" => DateTime.utc_now,
|
||||
"name" => "Auto"
|
||||
}
|
||||
all_params = Map.merge(device_params, create_params)
|
||||
IO.puts "Create device with params: "
|
||||
IO.inspect all_params
|
||||
case Devices.create_device(all_params) do
|
||||
{:ok, device} ->
|
||||
IO.inspect(device)
|
||||
redirect(conn, to: Routes.device_path(conn, :show, device))
|
||||
{:error, %Ecto.Changeset{} = changeset} ->
|
||||
IO.inspect(changeset)
|
||||
render(conn, "new.html", changeset: changeset)
|
||||
end
|
||||
end
|
||||
|
||||
def show(conn, %{"id" => id}) do
|
||||
device = Devices.get_device!(id)
|
||||
render(conn, "show.html", device: device)
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
defmodule FgHttpWeb.NewDeviceLive do
|
||||
use Phoenix.LiveView
|
||||
use Phoenix.HTML
|
||||
alias FgHttpWeb.Router.Helpers, as: Routes
|
||||
|
||||
alias FgHttp.Devices.Device
|
||||
|
||||
def mount(_params, %{"current_user_id" => user_id}, socket) do
|
||||
def mount(_params, %{}, socket) do
|
||||
user_id = "1"
|
||||
IO.inspect(socket)
|
||||
if connected?(socket), do: wait_for_device(socket)
|
||||
|
||||
device = %Device{user_id: user_id}
|
||||
device = %Device{id: "1", user_id: user_id}
|
||||
{:ok, assign(socket, :device, device)}
|
||||
end
|
||||
|
||||
defp wait_for_device(socket) do
|
||||
# TODO: pass socket to fg_vpn somehow
|
||||
IO.inspect(socket)
|
||||
:timer.send_after(10000, self(), :update)
|
||||
:timer.send_after(3000, self(), :update)
|
||||
end
|
||||
|
||||
def handle_info(:update, socket) do
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<p>
|
||||
Add the following to your Wireguard configuration file:
|
||||
Add the following to your WireGuard™ configuration file:
|
||||
</p>
|
||||
|
||||
<div class="cf">
|
||||
@@ -18,16 +18,33 @@ Endpoint = <%= Application.fetch_env!(:fg_http, :vpn_endpoint) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
When we receive a connection from your device, we'll prompt you verify it here.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Waiting for device connection...
|
||||
<span phx-hook="QrEncode">
|
||||
<%= if @device.public_key do %>
|
||||
Connected! Device Public Key: <%= @device.public_key %>
|
||||
<a href="#">Configure your device -></a>
|
||||
<% end %>
|
||||
</span>
|
||||
</p>
|
||||
<div phx-hook="QrEncode">
|
||||
<%= unless @device.public_key do %>
|
||||
<h4>
|
||||
Waiting for device connection...
|
||||
</h4>
|
||||
<p>
|
||||
When we receive a connection from your device, we'll prompt you verify it here.
|
||||
</p>
|
||||
<% else %>
|
||||
<h4>Connected!</h4>
|
||||
<p>
|
||||
Device Public Key: <%= @device.public_key %>
|
||||
</p>
|
||||
<p>
|
||||
<%# XXX: Use the public key sent by the actual device and not the one here %>
|
||||
<%=
|
||||
link("This looks good, verify and continue. ->",
|
||||
to: Routes.device_path(@socket, :create, "device[public_key]": @device.public_key),
|
||||
method: :post)
|
||||
%>
|
||||
</p>
|
||||
<p>
|
||||
<%=
|
||||
link("<- Something's wrong. Don't add this device and go back.",
|
||||
to: Routes.device_path(@socket, :index),
|
||||
method: :delete)
|
||||
%>
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -4,12 +4,13 @@ defmodule FgHttpWeb.Plugs.Authenticator do
|
||||
"""
|
||||
|
||||
import Plug.Conn
|
||||
alias FgHttp.Users.User
|
||||
alias FgHttp.{Users.User, Repo}
|
||||
|
||||
|
||||
def init(default), do: default
|
||||
|
||||
def call(conn, _default) do
|
||||
user = %User{id: 1, email: "dev_user@fireguard.network"}
|
||||
user = Repo.one(User)
|
||||
assign(conn, :current_user, user)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -23,7 +23,7 @@ defmodule FgHttpWeb.Router do
|
||||
resources "/user", UserController, singleton: true, only: [:show, :edit, :update, :delete]
|
||||
resources "/users", UserController, only: [:new, :create]
|
||||
|
||||
resources "/devices", DeviceController, except: [:create] do
|
||||
resources "/devices", DeviceController do
|
||||
resources "/rules", RuleController, only: [:new, :index, :create]
|
||||
end
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<h1>New Device</h1>
|
||||
|
||||
<%= live_render(@conn, FgHttpWeb.NewDeviceLive, session: %{"current_user_id" => 1}) %>
|
||||
<%= live_render(@conn, FgHttpWeb.NewDeviceLive) %>
|
||||
|
||||
<p>
|
||||
<%= link "Back", to: Routes.device_path(@conn, :index) %>
|
||||
|
||||
Reference in New Issue
Block a user