logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

remote_ip_test.exs (2660B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.Plugs.RemoteIpTest do
  5. use ExUnit.Case
  6. use Plug.Test
  7. alias Pleroma.Web.Plugs.RemoteIp
  8. import Pleroma.Tests.Helpers, only: [clear_config: 2]
  9. setup do:
  10. clear_config(RemoteIp,
  11. enabled: true,
  12. headers: ["x-forwarded-for"],
  13. proxies: [],
  14. reserved: [
  15. "127.0.0.0/8",
  16. "::1/128",
  17. "fc00::/7",
  18. "10.0.0.0/8",
  19. "172.16.0.0/12",
  20. "192.168.0.0/16"
  21. ]
  22. )
  23. test "disabled" do
  24. clear_config(RemoteIp, enabled: false)
  25. %{remote_ip: remote_ip} = conn(:get, "/")
  26. conn =
  27. conn(:get, "/")
  28. |> put_req_header("x-forwarded-for", "1.1.1.1")
  29. |> RemoteIp.call(nil)
  30. assert conn.remote_ip == remote_ip
  31. end
  32. test "enabled" do
  33. conn =
  34. conn(:get, "/")
  35. |> put_req_header("x-forwarded-for", "1.1.1.1")
  36. |> RemoteIp.call(nil)
  37. assert conn.remote_ip == {1, 1, 1, 1}
  38. end
  39. test "custom headers" do
  40. clear_config(RemoteIp, enabled: true, headers: ["cf-connecting-ip"])
  41. conn =
  42. conn(:get, "/")
  43. |> put_req_header("x-forwarded-for", "1.1.1.1")
  44. |> RemoteIp.call(nil)
  45. refute conn.remote_ip == {1, 1, 1, 1}
  46. conn =
  47. conn(:get, "/")
  48. |> put_req_header("cf-connecting-ip", "1.1.1.1")
  49. |> RemoteIp.call(nil)
  50. assert conn.remote_ip == {1, 1, 1, 1}
  51. end
  52. test "custom proxies" do
  53. conn =
  54. conn(:get, "/")
  55. |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1, 173.245.48.2")
  56. |> RemoteIp.call(nil)
  57. refute conn.remote_ip == {1, 1, 1, 1}
  58. clear_config([RemoteIp, :proxies], ["173.245.48.0/20"])
  59. conn =
  60. conn(:get, "/")
  61. |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1, 173.245.48.2")
  62. |> RemoteIp.call(nil)
  63. assert conn.remote_ip == {1, 1, 1, 1}
  64. end
  65. test "proxies set without CIDR format" do
  66. clear_config([RemoteIp, :proxies], ["173.245.48.1"])
  67. conn =
  68. conn(:get, "/")
  69. |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1")
  70. |> RemoteIp.call(nil)
  71. assert conn.remote_ip == {1, 1, 1, 1}
  72. end
  73. test "proxies set `nonsensical` CIDR" do
  74. clear_config([RemoteIp, :reserved], ["127.0.0.0/8"])
  75. clear_config([RemoteIp, :proxies], ["10.0.0.3/24"])
  76. conn =
  77. conn(:get, "/")
  78. |> put_req_header("x-forwarded-for", "10.0.0.3, 1.1.1.1")
  79. |> RemoteIp.call(nil)
  80. assert conn.remote_ip == {1, 1, 1, 1}
  81. end
  82. end