Add filters list to the resource view of a Gateway (#1987)

Closes https://github.com/firezone/product/issues/654
This commit is contained in:
Andrew Dryga
2023-09-12 18:46:27 -06:00
committed by GitHub
parent 34fd5693d7
commit 782bbe9417
2 changed files with 45 additions and 4 deletions

View File

@@ -8,7 +8,8 @@ defmodule API.Gateway.Views.Resource do
address: resource.address,
name: resource.name,
ipv4: resource.ipv4,
ipv6: resource.ipv6
ipv6: resource.ipv6,
filters: Enum.flat_map(resource.filters, &render_filter/1)
}
end
@@ -17,7 +18,37 @@ defmodule API.Gateway.Views.Resource do
id: resource.id,
type: :cidr,
address: resource.address,
name: resource.name
name: resource.name,
filters: Enum.flat_map(resource.filters, &render_filter/1)
}
end
def render_filter(%Resources.Resource.Filter{} = filter) do
Enum.map(filter.ports, fn port ->
case String.split(port, "-") do
[port_start, port_end] ->
port_start = port_to_number(port_start)
port_end = port_to_number(port_end)
%{
protocol: filter.protocol,
port_range_start: port_start,
port_range_end: port_end
}
[port] ->
port = port_to_number(port)
%{
protocol: filter.protocol,
port_range_start: port,
port_range_end: port
}
end
end)
end
defp port_to_number(port) do
port |> String.trim() |> String.to_integer()
end
end

View File

@@ -89,7 +89,12 @@ defmodule API.Gateway.ChannelTest do
name: resource.name,
type: :dns,
ipv4: resource.ipv4,
ipv6: resource.ipv6
ipv6: resource.ipv6,
filters: [
%{protocol: :tcp, port_range_end: 80, port_range_start: 80},
%{protocol: :tcp, port_range_end: 433, port_range_start: 433},
%{protocol: :udp, port_range_start: 100, port_range_end: 200}
]
}
assert payload.device_id == device.id
@@ -173,7 +178,12 @@ defmodule API.Gateway.ChannelTest do
name: resource.name,
type: :dns,
ipv4: resource.ipv4,
ipv6: resource.ipv6
ipv6: resource.ipv6,
filters: [
%{protocol: :tcp, port_range_end: 80, port_range_start: 80},
%{protocol: :tcp, port_range_end: 433, port_range_start: 433},
%{protocol: :udp, port_range_start: 100, port_range_end: 200}
]
}
assert payload.device == %{