aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-02-21 02:53:56 +0100
committerMel <einebeere@gmail.com>2022-02-21 03:00:57 +0100
commited6e133bba9b1f51388c425763e227f4e25cc639 (patch)
treeb1b183168ba6afd93a62951fb81de02d8c532d85 /lib
parentc3a46f9b8f4c11fb4ce81ab9177591238e15198b (diff)
downloadrook-ed6e133bba9b1f51388c425763e227f4e25cc639.tar.zst
rook-ed6e133bba9b1f51388c425763e227f4e25cc639.zip
Try to get IP from forwarded headers
Diffstat (limited to 'lib')
-rw-r--r--lib/rook/utils/identity.ex27
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