diff --git a/elixir/apps/api/lib/api/client/channel.ex b/elixir/apps/api/lib/api/client/channel.ex index c0631038b..96f676643 100644 --- a/elixir/apps/api/lib/api/client/channel.ex +++ b/elixir/apps/api/lib/api/client/channel.ex @@ -618,17 +618,23 @@ defmodule API.Client.Channel do end defp select_gateway_version_requirement(client) do - gateway_version_requirement = - Enum.find_value( - @gateway_compatibility, - fn {client_version_requirement, gateway_version_requirement} -> - if Version.match?(client.last_seen_version, client_version_requirement) do - gateway_version_requirement - end - end - ) + case Version.parse(client.last_seen_version) do + {:ok, _version} -> + gateway_version_requirement = + Enum.find_value( + @gateway_compatibility, + fn {client_version_requirement, gateway_version_requirement} -> + if Version.match?(client.last_seen_version, client_version_requirement) do + gateway_version_requirement + end + end + ) - gateway_version_requirement || "> 0.0.0" + gateway_version_requirement || "> 0.0.0" + + :error -> + "> 0.0.0" + end end defp filter_compatible_gateways(gateways, gateway_version_requirement) do diff --git a/elixir/apps/api/test/api/client/channel_test.exs b/elixir/apps/api/test/api/client/channel_test.exs index 4484d0a2f..0619250c9 100644 --- a/elixir/apps/api/test/api/client/channel_test.exs +++ b/elixir/apps/api/test/api/client/channel_test.exs @@ -189,6 +189,20 @@ defmodule API.Client.ChannelTest do |> subscribe_and_join(API.Client.Channel, "client") assert socket.assigns.gateway_version_requirement == ">= 1.1.0" + + client = %{client | last_seen_version: "development"} + + {:ok, _reply, socket} = + API.Client.Socket + |> socket("client:#{client.id}", %{ + opentelemetry_ctx: OpenTelemetry.Ctx.new(), + opentelemetry_span_ctx: OpenTelemetry.Tracer.start_span("test"), + client: client, + subject: subject + }) + |> subscribe_and_join(API.Client.Channel, "client") + + assert socket.assigns.gateway_version_requirement == "> 0.0.0" end test "sends list of resources after join", %{ diff --git a/elixir/apps/domain/lib/domain/types/inet.ex b/elixir/apps/domain/lib/domain/types/inet.ex index eb7f73d09..c3898b0f8 100644 --- a/elixir/apps/domain/lib/domain/types/inet.ex +++ b/elixir/apps/domain/lib/domain/types/inet.ex @@ -39,7 +39,7 @@ defmodule Domain.Types.INET do defp cast_address(address) do address |> String.to_charlist() - |> :inet.parse_address() + |> :inet.parse_strict_address() end defp cast_netmask(nil), do: {:ok, nil} diff --git a/elixir/apps/web/assets/tailwind.config.js b/elixir/apps/web/assets/tailwind.config.js index 00fb0f835..bf55dfb51 100644 --- a/elixir/apps/web/assets/tailwind.config.js +++ b/elixir/apps/web/assets/tailwind.config.js @@ -41,7 +41,7 @@ const firezoneColors = { }, // neutral: chicago "chicago": { - 50: "#f6f6f6", + 50: "#f6f6f6", 100: "#e7e7e7", 200: "#d1d1d1", 300: "#b0b0b0", @@ -82,7 +82,6 @@ module.exports = { charts: true, }), require("@tailwindcss/forms"), - plugin(({ addVariant }) => addVariant("phx-no-feedback", [".phx-no-feedback&", ".phx-no-feedback &"])), plugin(({ addVariant }) => addVariant("phx-click-loading", [".phx-click-loading&", ".phx-click-loading &"])), plugin(({ addVariant }) => addVariant("phx-submit-loading", [".phx-submit-loading&", ".phx-submit-loading &"])), plugin(({ addVariant }) => addVariant("phx-change-loading", [".phx-change-loading&", ".phx-change-loading &"])), diff --git a/elixir/apps/web/lib/web/components/core_components.ex b/elixir/apps/web/lib/web/components/core_components.ex index 2b4b95f3d..4862ceb02 100644 --- a/elixir/apps/web/lib/web/components/core_components.ex +++ b/elixir/apps/web/lib/web/components/core_components.ex @@ -350,7 +350,7 @@ defmodule Web.CoreComponents do
<.icon name="hero-exclamation-circle-mini" class="mt-0.5 h-5 w-5 flex-none" /> diff --git a/elixir/apps/web/lib/web/components/form_components.ex b/elixir/apps/web/lib/web/components/form_components.ex index e7ebad3f1..c7899029f 100644 --- a/elixir/apps/web/lib/web/components/form_components.ex +++ b/elixir/apps/web/lib/web/components/form_components.ex @@ -60,13 +60,18 @@ defmodule Web.FormComponents do def input(%{field: %Phoenix.HTML.FormField{} = field} = assigns) do errors = - if assigns.value_index do - Enum.filter(field.errors, fn {_error, meta} -> - Keyword.get(meta, :validated_as) == :list and - Keyword.get(meta, :at) == assigns.value_index - end) - else - field.errors + cond do + not Phoenix.Component.used_input?(field) -> + [] + + not is_nil(assigns.value_index) -> + Enum.filter(field.errors, fn {_error, meta} -> + Keyword.get(meta, :validated_as) == :list and + Keyword.get(meta, :at) == assigns.value_index + end) + + true -> + field.errors end |> Enum.map(&translate_error(&1)) @@ -94,7 +99,7 @@ defmodule Web.FormComponents do def input(%{type: "radio"} = assigns) do ~H""" -