Skip to content

Commit

Permalink
get ip address from x-forwarded-for header request, #153
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonLab committed Mar 15, 2022
1 parent 73571ea commit b70cce9
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 5 deletions.
21 changes: 17 additions & 4 deletions lib/hits.ex
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,22 @@ defmodule Hits do
end

def get_user_ip_address(conn) do
IO.inspect("############ GET IP ADDRESS ##############")
IO.inspect(conn.req_headers)
IO.inspect("##########################################")
Enum.join(Tuple.to_list(conn.remote_ip), ".")
get_x_forwarded_for_ip(conn.req_headers) ||
Enum.join(Tuple.to_list(conn.remote_ip), ".")
end

defp get_x_forwarded_for_ip(headers) do
case Enum.find(headers, fn {k, _} -> k == "x-forwarded-for" end) do
# header doesn't exist
nil ->
nil

# header exists and can contains multiple ips
{_, ips} ->
ips
|> String.split(",")
|> List.first()
|> String.trim()
end
end
end
2 changes: 1 addition & 1 deletion lib/hits_web/controllers/page_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ defmodule HitsWeb.PageController do
render(conn, "index.html")
end

def error(conn, %{"user" => user, "repository" => repository} = params) do
def error(conn, %{"user" => user, "repository" => repository}) do
render(conn, "error.html", user: user, repository: repository)
end
end
10 changes: 10 additions & 0 deletions test/hits_web/controllers/hit_controller_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@ defmodule HitsWeb.HitControllerTest do
assert res.resp_body =~ Hits.make_badge(1)
end

test "GET /user1/repo1.svg", %{conn: conn} do
res =
put_req_header(conn, "user-agent", "Hackintosh")
|> put_req_header("x-forwarded-for", "127.0.0.1, 127.0.0.2")
|> put_req_header("accept-language", "en-GB,en;q=0.5")
|> get("/user1/repo1.svg")

assert res.resp_body =~ Hits.make_badge(1)
end

test "test counter increments! GET /totes/amaze.svg", %{conn: conn} do
put_req_header(conn, "user-agent", "Hackintosh")
|> put_req_header("accept-language", "en-GB,en;q=0.5")
Expand Down

0 comments on commit b70cce9

Please sign in to comment.