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/")