From 276c66a7c84f47d8f95f63d445eadb9c0059a6cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20de=20Metz?= Date: Sun, 15 Mar 2026 21:52:14 +0100 Subject: [PATCH] Rewrite protocol to https when x-forwarded-proto is wss. --- lib/plug/rewrite_on.ex | 3 +++ test/plug/rewrite_on_test.exs | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/plug/rewrite_on.ex b/lib/plug/rewrite_on.ex index f2b20533..62fdd035 100644 --- a/lib/plug/rewrite_on.ex +++ b/lib/plug/rewrite_on.ex @@ -96,6 +96,9 @@ defmodule Plug.RewriteOn do defp put_scheme(%{scheme: :http, port: 80} = conn, ["https"]), do: %{conn | scheme: :https, port: 443} + defp put_scheme(%{scheme: :http, port: 80} = conn, ["wss"]), + do: %{conn | scheme: :https, port: 443} + defp put_scheme(conn, ["https"]), do: %{conn | scheme: :https} diff --git a/test/plug/rewrite_on_test.exs b/test/plug/rewrite_on_test.exs index 5dafedad..c0c29c34 100644 --- a/test/plug/rewrite_on_test.exs +++ b/test/plug/rewrite_on_test.exs @@ -37,6 +37,16 @@ defmodule Plug.RewriteOnTest do assert conn.port == 443 end + test "rewrites http to https when x-forwarded-proto value wss" do + conn = + conn(:get, "http://example.com/") + |> put_req_header("x-forwarded-proto", "wss") + |> call(:x_forwarded_proto) + + assert conn.scheme == :https + assert conn.port == 443 + end + test "doesn't change the port when it doesn't match the scheme" do conn = conn(:get, "http://example.com:1234/")