From c1e39c9bf2383bf119fcfe8b258230219df04c04 Mon Sep 17 00:00:00 2001 From: Nikos Papadakis Date: Mon, 4 Sep 2023 13:01:18 +0300 Subject: [PATCH] app: use x-forwarded-for header to get ips --- app/lib/prymn_web/controllers/server_controller.ex | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/lib/prymn_web/controllers/server_controller.ex b/app/lib/prymn_web/controllers/server_controller.ex index 4a1699f..edf831d 100644 --- a/app/lib/prymn_web/controllers/server_controller.ex +++ b/app/lib/prymn_web/controllers/server_controller.ex @@ -9,7 +9,16 @@ defmodule PrymnWeb.ServerController do validating their registration token. """ def register(conn, %{"token" => token}) do - case Servers.register_server(token, conn.remote_ip) do + ip = + with [ip] <- Plug.Conn.get_req_header(conn, "x-forwarded-for"), + {:ok, ip} <- :inet.parse_address(to_charlist(ip)) do + ip + else + {:error, reason} -> raise "Could not parse ip address: #{inspect(reason)}" + [] -> conn.remote_ip + end + + case Servers.register_server(token, ip) do {:ok, _server} -> json(conn, %{"connected" => true})