fix(portal): Do not crash WebSocket when client version is invalid (#5525)

This commit is contained in:
Andrew Dryga
2024-06-26 18:50:43 -06:00
committed by GitHub
parent 990f98e60f
commit cfe777f389
2 changed files with 20 additions and 22 deletions

View File

@@ -21,16 +21,16 @@ defmodule API.Client.Channel do
opentelemetry_ctx = OpenTelemetry.Ctx.get_current()
opentelemetry_span_ctx = OpenTelemetry.Tracer.current_span_ctx()
gateway_version_requirement = select_gateway_version_requirement(socket.assigns.client)
with {:ok, socket} <- schedule_expiration(socket),
{:ok, gateway_version_requirement} <-
select_gateway_version_requirement(socket.assigns.client) do
socket =
assign(socket,
opentelemetry_ctx: opentelemetry_ctx,
opentelemetry_span_ctx: opentelemetry_span_ctx,
gateway_version_requirement: gateway_version_requirement
)
socket =
assign(socket,
opentelemetry_ctx: opentelemetry_ctx,
opentelemetry_span_ctx: opentelemetry_span_ctx,
gateway_version_requirement: gateway_version_requirement
)
with {:ok, socket} <- schedule_expiration(socket) do
send(self(), {:after_join, {opentelemetry_ctx, opentelemetry_span_ctx}})
{:ok, socket}
end
@@ -640,10 +640,10 @@ defmodule API.Client.Channel do
end
)
gateway_version_requirement || "> 0.0.0"
{:ok, gateway_version_requirement || "> 0.0.0"}
:error ->
"> 0.0.0"
{:error, %{reason: :invalid_version}}
end
end

View File

@@ -192,17 +192,15 @@ defmodule API.Client.ChannelTest do
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"
assert 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") ==
{:error, %{reason: :invalid_version}}
end
test "sends list of resources after join", %{