@@ -6,6 +6,7 @@ import (
66 "net/http/httptest"
77
88 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/middleware"
9+ "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/ip"
910 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/requests/util"
1011 . "github.com/onsi/ginkgo/v2"
1112 . "github.com/onsi/gomega"
@@ -19,8 +20,13 @@ var _ = Describe("Util Suite", func() {
1920 uriNoQueryParams = "/test/endpoint"
2021 )
2122 var req *http.Request
23+ var trustedProxies *ip.NetSet
2224
2325 BeforeEach(func() {
26+ var err error
27+ trustedProxies, err = ip.ParseNetSet([]string{"127.0.0.1"})
28+ Expect(err).ToNot(HaveOccurred())
29+
2430 req = httptest.NewRequest(
2531 http.MethodGet,
2632 fmt.Sprintf("%s://%s%s", proto, host, uriWithQueryParams),
@@ -29,7 +35,7 @@ var _ = Describe("Util Suite", func() {
2935 })
3036
3137 Context("GetRequestHost", func() {
32− Context("IsProxied is false", func() {
38+ Context("trusted forwarded headers are disabled", func() {
3339 BeforeEach(func() {
3440 req = middleware.AddRequestScope(req, &middleware.RequestScope{})
3541 })
@@ -44,10 +50,12 @@ var _ = Describe("Util Suite", func() {
4450 })
4551 })
4652
47− Context("IsProxied is true", func() {
53+ Context("trusted forwarded headers are enabled", func() {
4854 BeforeEach(func() {
55+ req.RemoteAddr = "127.0.0.1:4180"
4956 req = middleware.AddRequestScope(req, &middleware.RequestScope{
50− ReverseProxy: true,
57+ ReverseProxy: true,
58+ TrustedProxies: trustedProxies,
5159 })
5260 })
5361
@@ -63,7 +71,7 @@ var _ = Describe("Util Suite", func() {
6371 })
6472
6573 Context("GetRequestProto", func() {
66− Context("IsProxied is false", func() {
74+ Context("trusted forwarded headers are disabled", func() {
6775 BeforeEach(func() {
6876 req = middleware.AddRequestScope(req, &middleware.RequestScope{})
6977 })
@@ -78,10 +86,12 @@ var _ = Describe("Util Suite", func() {
7886 })
7987 })
8088
81− Context("IsProxied is true", func() {
89+ Context("trusted forwarded headers are enabled", func() {
8290 BeforeEach(func() {
91+ req.RemoteAddr = "127.0.0.1:4180"
8392 req = middleware.AddRequestScope(req, &middleware.RequestScope{
84− ReverseProxy: true,
93+ ReverseProxy: true,
94+ TrustedProxies: trustedProxies,
8595 })
8696 })
8797
@@ -97,7 +107,7 @@ var _ = Describe("Util Suite", func() {
97107 })
98108
99109 Context("GetRequestURI", func() {
100− Context("IsProxied is false", func() {
110+ Context("trusted forwarded headers are disabled", func() {
101111 BeforeEach(func() {
102112 req = middleware.AddRequestScope(req, &middleware.RequestScope{})
103113 })
@@ -112,10 +122,12 @@ var _ = Describe("Util Suite", func() {
112122 })
113123 })
114124
115− Context("IsProxied is true", func() {
125+ Context("trusted forwarded headers are enabled", func() {
116126 BeforeEach(func() {
127+ req.RemoteAddr = "127.0.0.1:4180"
117128 req = middleware.AddRequestScope(req, &middleware.RequestScope{
118− ReverseProxy: true,
129+ ReverseProxy: true,
130+ TrustedProxies: trustedProxies,
119131 })
120132 })
121133
@@ -131,7 +143,7 @@ var _ = Describe("Util Suite", func() {
131143 })
132144
133145 Context("GetRequestPath", func() {
134− Context("IsProxied is false", func() {
146+ Context("trusted forwarded headers are disabled", func() {
135147 BeforeEach(func() {
136148 req = middleware.AddRequestScope(req, &middleware.RequestScope{})
137149 })
@@ -146,10 +158,12 @@ var _ = Describe("Util Suite", func() {
146158 })
147159 })
148160
149− Context("IsProxied is true", func() {
161+ Context("trusted forwarded headers are enabled", func() {
150162 BeforeEach(func() {
163+ req.RemoteAddr = "127.0.0.1:4180"
151164 req = middleware.AddRequestScope(req, &middleware.RequestScope{
152− ReverseProxy: true,
165+ ReverseProxy: true,
166+ TrustedProxies: trustedProxies,
153167 })
154168 })
155169
@@ -163,4 +177,30 @@ var _ = Describe("Util Suite", func() {
163177 })
164178 })
165179 })
180+
181+ Context("CanTrustForwardedHeaders", func() {
182+ It("returns false when no scope is present", func() {
183+ Expect(util.CanTrustForwardedHeaders(req)).To(BeFalse())
184+ })
185+
186+ It("returns true when the remote address is trusted", func() {
187+ req.RemoteAddr = "127.0.0.1:4180"
188+ req = middleware.AddRequestScope(req, &middleware.RequestScope{
189+ ReverseProxy: true,
190+ TrustedProxies: trustedProxies,
191+ })
192+
193+ Expect(util.CanTrustForwardedHeaders(req)).To(BeTrue())
194+ })
195+
196+ It("returns false when the remote address is untrusted", func() {
197+ req.RemoteAddr = "192.0.2.10:4180"
198+ req = middleware.AddRequestScope(req, &middleware.RequestScope{
199+ ReverseProxy: true,
200+ TrustedProxies: trustedProxies,
201+ })
202+
203+ Expect(util.CanTrustForwardedHeaders(req)).To(BeFalse())
204+ })
205+ })
166206})