diff options
| author | Mel <einebeere@gmail.com> | 2022-02-21 02:53:56 +0100 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-02-21 03:00:57 +0100 |
| commit | ed6e133bba9b1f51388c425763e227f4e25cc639 (patch) | |
| tree | b1b183168ba6afd93a62951fb81de02d8c532d85 /lib | |
| parent | c3a46f9b8f4c11fb4ce81ab9177591238e15198b (diff) | |
| download | rook-ed6e133bba9b1f51388c425763e227f4e25cc639.tar.zst rook-ed6e133bba9b1f51388c425763e227f4e25cc639.zip | |
Try to get IP from forwarded headers
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/rook/utils/identity.ex | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/lib/rook/utils/identity.ex b/lib/rook/utils/identity.ex index 385030e..7542621 100644 --- a/lib/rook/utils/identity.ex +++ b/lib/rook/utils/identity.ex @@ -1,6 +1,14 @@ defmodule Rook.Identity do - def get_ip_from_connect_info(%{peer_data: %{address: ip}, x_headers: _x_headers}) do - ip_to_string(ip) + def get_ip_from_connect_info(%{peer_data: %{address: ip}, x_headers: x_headers}) do + real_ip = Enum.find(x_headers, fn {key, _value} -> key == 'x-real-ip' end) + + case real_ip do + nil -> + ip_to_string(ip) + + {_key, ip} -> + ip + end end def get_location_from_ip(_ip) do @@ -15,15 +23,16 @@ defmodule Rook.Identity do browser_family = ua.client.name browser_version = ua.client.version - browser = if browser_family != :unknown do - if browser_version != :unknown do - browser_family <> " " <> browser_version + browser = + if browser_family != :unknown do + if browser_version != :unknown do + browser_family <> " " <> browser_version + else + browser_family + end else - browser_family + "Unknown Browser" end - else - "Unknown Browser" - end if ua.os_family != :unknown do browser <> " on " <> ua.os_family |
