|
7 | 7 | "github.com/getfider/fider/app/models/query" |
8 | 8 | . "github.com/getfider/fider/app/pkg/assert" |
9 | 9 | "github.com/getfider/fider/app/pkg/bus" |
| 10 | + "github.com/getfider/fider/app/pkg/env" |
10 | 11 | "github.com/getfider/fider/app/pkg/rand" |
11 | 12 | "github.com/getfider/fider/app/pkg/validate" |
12 | 13 | ) |
@@ -114,6 +115,45 @@ func TestWebhookURL_AllowedAddresses(t *testing.T) { |
114 | 115 | } |
115 | 116 | } |
116 | 117 |
|
| 118 | +func TestWebhookURL_PrivateIPsAllowedWhenOptedIn(t *testing.T) { |
| 119 | + RegisterT(t) |
| 120 | + |
| 121 | + original := env.Config.AllowPrivateNetworkTargets |
| 122 | + env.Config.AllowPrivateNetworkTargets = true |
| 123 | + t.Cleanup(func() { env.Config.AllowPrivateNetworkTargets = original }) |
| 124 | + |
| 125 | + for _, rawurl := range []string{ |
| 126 | + "http://localhost/hook", |
| 127 | + "http://127.0.0.1/hook", |
| 128 | + "http://10.0.0.1/hook", |
| 129 | + "http://172.16.0.1/hook", |
| 130 | + "http://192.168.1.1:8080/hook", |
| 131 | + "http://[::1]/hook", |
| 132 | + "http://internal.lan/hook", |
| 133 | + } { |
| 134 | + messages := validate.WebhookURL(rawurl) |
| 135 | + Expect(messages).HasLen(0) |
| 136 | + } |
| 137 | +} |
| 138 | + |
| 139 | +func TestWebhookURL_OptInDoesNotBypassFormatValidation(t *testing.T) { |
| 140 | + RegisterT(t) |
| 141 | + |
| 142 | + original := env.Config.AllowPrivateNetworkTargets |
| 143 | + env.Config.AllowPrivateNetworkTargets = true |
| 144 | + t.Cleanup(func() { env.Config.AllowPrivateNetworkTargets = original }) |
| 145 | + |
| 146 | + for _, rawurl := range []string{ |
| 147 | + "ftp://example.com/hook", |
| 148 | + "file:///etc/passwd", |
| 149 | + "not a url at all", |
| 150 | + "", |
| 151 | + } { |
| 152 | + messages := validate.WebhookURL(rawurl) |
| 153 | + Expect(len(messages) > 0).IsTrue() |
| 154 | + } |
| 155 | +} |
| 156 | + |
117 | 157 | func TestInvalidCNAME(t *testing.T) { |
118 | 158 | RegisterT(t) |
119 | 159 |
|
|
0 commit comments