Skip to content

Commit 2af04ad

Browse files
authored
Merge pull request #232 from tallarium/x-forwarded-for-fixes
x-forwarded-for fixes
2 parents fbfaf42 + ca83455 commit 2af04ad

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

lib/reverse_proxy_plug.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ defmodule ReverseProxyPlug do
306306
defp add_x_fwd_for_header(headers, conn) do
307307
{x_fwd_for, headers} = Enum.split_with(headers, fn {k, _v} -> k == "x-forwarded-for" end)
308308

309-
remote_ip = conn.remote_ip |> Tuple.to_list() |> Enum.join(".")
309+
remote_ip = conn.remote_ip |> :inet.ntoa() |> to_string()
310310

311311
x_forwarded_for =
312312
case x_fwd_for do

test/reverse_proxy_plug_test.exs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,24 @@ defmodule ReverseProxyPlugTest do
266266
assert_header(headers, "x-forwarded-for", ["127.0.0.2, 127.0.0.1"])
267267
end
268268

269+
test_stream_and_buffer "supports IPv6 addresses for x-forwarded-for header" do
270+
%{req_function: req_function, opts: opts, get_responder: get_responder} = test_reuse_opts
271+
272+
ReverseProxyPlug.HTTPClientMock
273+
|> expect(req_function, fn %{headers: headers} = request ->
274+
send(self(), {:headers, headers})
275+
get_responder.(%{}).(request)
276+
end)
277+
278+
conn(:get, "/")
279+
# ::1
280+
|> Map.put(:remote_ip, {0, 0, 0, 0, 0, 0, 0, 1})
281+
|> ReverseProxyPlug.call(ReverseProxyPlug.init(opts))
282+
283+
assert_receive {:headers, headers}
284+
assert_header(headers, "x-forwarded-for", ["::1"])
285+
end
286+
269287
test_stream_and_buffer "removes hop-by-hop headers before forwarding request" do
270288
%{req_function: req_function, opts: opts, get_responder: get_responder} = test_reuse_opts
271289

0 commit comments

Comments
 (0)