giant massive dep upgrade and dialyxir-found error emporium (#371)
[akkoma] / test / pleroma / web / plugs / remote_ip_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.Plugs.RemoteIpTest do
6 use ExUnit.Case
7 use Plug.Test
8
9 alias Pleroma.Web.Plugs.RemoteIp
10
11 import Pleroma.Tests.Helpers, only: [clear_config: 2]
12
13 setup do
14 clear_config([RemoteIp, :enabled], true)
15 clear_config([RemoteIp, :headers], ["x-forwarded-for"])
16 clear_config([RemoteIp, :proxies], [])
17
18 clear_config(
19 [RemoteIp, :reserved],
20 [
21 "127.0.0.0/8",
22 "::1/128",
23 "fc00::/7",
24 "10.0.0.0/8",
25 "172.16.0.0/12",
26 "192.168.0.0/16"
27 ]
28 )
29 end
30
31 test "disabled" do
32 clear_config([RemoteIp, :enabled], false)
33
34 %{remote_ip: remote_ip} = conn(:get, "/")
35
36 conn =
37 :get
38 |> conn("/")
39 |> put_req_header("x-forwarded-for", "1.1.1.1")
40 |> RemoteIp.call(nil)
41
42 assert conn.remote_ip == remote_ip
43 end
44
45 test "enabled" do
46 conn =
47 :get
48 |> conn("/")
49 |> put_req_header("x-forwarded-for", "1.1.1.1")
50 |> RemoteIp.call(nil)
51
52 assert conn.remote_ip == {1, 1, 1, 1}
53 end
54
55 test "custom headers" do
56 clear_config([RemoteIp, :enabled], true)
57 clear_config([RemoteIp, :headers], ["cf-connecting-ip"])
58
59 conn =
60 :get
61 |> conn("/")
62 |> put_req_header("x-forwarded-for", "1.1.1.1")
63 |> RemoteIp.call(nil)
64
65 refute conn.remote_ip == {1, 1, 1, 1}
66
67 conn =
68 :get
69 |> conn("/")
70 |> put_req_header("cf-connecting-ip", "1.1.1.1")
71 |> RemoteIp.call(nil)
72
73 assert conn.remote_ip == {1, 1, 1, 1}
74 end
75
76 test "custom proxies" do
77 conn =
78 :get
79 |> conn("/")
80 |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1, 173.245.48.2")
81 |> RemoteIp.call(nil)
82
83 refute conn.remote_ip == {1, 1, 1, 1}
84
85 clear_config([RemoteIp, :proxies], ["173.245.48.0/20"])
86
87 conn =
88 :get
89 |> conn("/")
90 |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1, 173.245.48.2")
91 |> RemoteIp.call(nil)
92
93 assert conn.remote_ip == {1, 1, 1, 1}
94 end
95
96 test "proxies set without CIDR format" do
97 clear_config([RemoteIp, :proxies], ["173.245.48.1"])
98
99 conn =
100 :get
101 |> conn("/")
102 |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1")
103 |> RemoteIp.call(nil)
104
105 assert conn.remote_ip == {1, 1, 1, 1}
106 end
107
108 test "proxies set `nonsensical` CIDR" do
109 clear_config([RemoteIp, :reserved], ["127.0.0.0/8"])
110 clear_config([RemoteIp, :proxies], ["10.0.0.3/24"])
111
112 conn =
113 :get
114 |> conn("/")
115 |> put_req_header("x-forwarded-for", "10.0.0.3, 1.1.1.1")
116 |> RemoteIp.call(nil)
117
118 assert conn.remote_ip == {1, 1, 1, 1}
119 end
120 end