mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-28 10:18:51 +00:00
Merge pull request #306 from firezone/fix-empty-address-crash
Fix crash from empty address
This commit is contained in:
@@ -24,13 +24,13 @@ defmodule FzHttp.Devices do
|
||||
|
||||
def create_device(attrs \\ %{}) do
|
||||
%Device{}
|
||||
|> Device.changeset(attrs)
|
||||
|> Device.create_changeset(attrs)
|
||||
|> Repo.insert()
|
||||
end
|
||||
|
||||
def update_device(%Device{} = device, attrs) do
|
||||
device
|
||||
|> Device.changeset(attrs)
|
||||
|> Device.update_changeset(attrs)
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
@@ -39,7 +39,7 @@ defmodule FzHttp.Devices do
|
||||
end
|
||||
|
||||
def change_device(%Device{} = device) do
|
||||
Device.changeset(device, %{})
|
||||
Device.update_changeset(device, %{})
|
||||
end
|
||||
|
||||
def rand_name do
|
||||
|
||||
@@ -30,7 +30,7 @@ defmodule FzHttp.Devices.Device do
|
||||
timestamps(type: :utc_datetime_usec)
|
||||
end
|
||||
|
||||
def changeset(device, attrs) do
|
||||
def create_changeset(device, attrs) do
|
||||
device
|
||||
|> cast(attrs, [
|
||||
:allowed_ips,
|
||||
@@ -43,6 +43,28 @@ defmodule FzHttp.Devices.Device do
|
||||
:name,
|
||||
:public_key
|
||||
])
|
||||
|> shared_changeset()
|
||||
end
|
||||
|
||||
def update_changeset(device, attrs) do
|
||||
device
|
||||
|> cast(attrs, [
|
||||
:allowed_ips,
|
||||
:dns_servers,
|
||||
:remote_ip,
|
||||
:address,
|
||||
:server_public_key,
|
||||
:private_key,
|
||||
:user_id,
|
||||
:name,
|
||||
:public_key
|
||||
])
|
||||
|> shared_changeset()
|
||||
|> validate_required(:address)
|
||||
end
|
||||
|
||||
defp shared_changeset(changeset) do
|
||||
changeset
|
||||
|> validate_required([
|
||||
:user_id,
|
||||
:name,
|
||||
|
||||
@@ -71,6 +71,18 @@ defmodule FzHttp.DevicesTest do
|
||||
allowed_ips: "1.1.1.1, 11, foobar"
|
||||
}
|
||||
|
||||
@empty_address %{
|
||||
address: ""
|
||||
}
|
||||
|
||||
@low_address %{
|
||||
address: "1"
|
||||
}
|
||||
|
||||
@high_address %{
|
||||
address: "255"
|
||||
}
|
||||
|
||||
test "updates device", %{device: device} do
|
||||
{:ok, test_device} = Devices.update_device(device, @attrs)
|
||||
assert @attrs = test_device
|
||||
@@ -90,6 +102,28 @@ defmodule FzHttp.DevicesTest do
|
||||
}
|
||||
end
|
||||
|
||||
test "prevents updating device with empty address", %{device: device} do
|
||||
{:error, changeset} = Devices.update_device(device, @empty_address)
|
||||
|
||||
assert changeset.errors[:address] == {"can't be blank", [{:validation, :required}]}
|
||||
end
|
||||
|
||||
test "prevents updating device with address too low", %{device: device} do
|
||||
{:error, changeset} = Devices.update_device(device, @low_address)
|
||||
|
||||
assert changeset.errors[:address] ==
|
||||
{"must be greater than or equal to %{number}",
|
||||
[{:validation, :number}, {:kind, :greater_than_or_equal_to}, {:number, 2}]}
|
||||
end
|
||||
|
||||
test "prevents updating device with address too high", %{device: device} do
|
||||
{:error, changeset} = Devices.update_device(device, @high_address)
|
||||
|
||||
assert changeset.errors[:address] ==
|
||||
{"must be less than or equal to %{number}",
|
||||
[{:validation, :number}, {:kind, :less_than_or_equal_to}, {:number, 254}]}
|
||||
end
|
||||
|
||||
test "updates device with valid allowed_ips", %{device: device} do
|
||||
{:ok, test_device} = Devices.update_device(device, @valid_allowed_ips_attrs)
|
||||
assert @valid_allowed_ips_attrs = test_device
|
||||
|
||||
Reference in New Issue
Block a user