Merge branch 'features/remote-follow-userpage-redirect' into 'develop'
[akkoma] / test / plugs / remote_ip_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Plugs.RemoteIpTest do
6 use ExUnit.Case, async: true
7 use Plug.Test
8
9 alias Pleroma.Plugs.RemoteIp
10
11 import Pleroma.Tests.Helpers, only: [clear_config: 1, clear_config: 2]
12
13 clear_config(RemoteIp)
14
15 test "disabled" do
16 Pleroma.Config.put(RemoteIp, enabled: false)
17
18 %{remote_ip: remote_ip} = conn(:get, "/")
19
20 conn =
21 conn(:get, "/")
22 |> put_req_header("x-forwarded-for", "1.1.1.1")
23 |> RemoteIp.call(nil)
24
25 assert conn.remote_ip == remote_ip
26 end
27
28 test "enabled" do
29 Pleroma.Config.put(RemoteIp, enabled: true)
30
31 conn =
32 conn(:get, "/")
33 |> put_req_header("x-forwarded-for", "1.1.1.1")
34 |> RemoteIp.call(nil)
35
36 assert conn.remote_ip == {1, 1, 1, 1}
37 end
38
39 test "custom headers" do
40 Pleroma.Config.put(RemoteIp, enabled: true, headers: ["cf-connecting-ip"])
41
42 conn =
43 conn(:get, "/")
44 |> put_req_header("x-forwarded-for", "1.1.1.1")
45 |> RemoteIp.call(nil)
46
47 refute conn.remote_ip == {1, 1, 1, 1}
48
49 conn =
50 conn(:get, "/")
51 |> put_req_header("cf-connecting-ip", "1.1.1.1")
52 |> RemoteIp.call(nil)
53
54 assert conn.remote_ip == {1, 1, 1, 1}
55 end
56
57 test "custom proxies" do
58 Pleroma.Config.put(RemoteIp, enabled: true)
59
60 conn =
61 conn(:get, "/")
62 |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1, 173.245.48.2")
63 |> RemoteIp.call(nil)
64
65 refute conn.remote_ip == {1, 1, 1, 1}
66
67 Pleroma.Config.put([RemoteIp, :proxies], ["173.245.48.0/20"])
68
69 conn =
70 conn(:get, "/")
71 |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1, 173.245.48.2")
72 |> RemoteIp.call(nil)
73
74 assert conn.remote_ip == {1, 1, 1, 1}
75 end
76 end