about summary refs log tree commit diff
diff options
context:
space:
mode:
-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