aboutsummaryrefslogtreecommitdiff
path: root/lib/http
diff options
context:
space:
mode:
Diffstat (limited to 'lib/http')
-rw-r--r--lib/http/http.go12
-rw-r--r--lib/http/http_example_test.go29
2 files changed, 17 insertions, 24 deletions
diff --git a/lib/http/http.go b/lib/http/http.go
index 7c289479..175cf84b 100644
--- a/lib/http/http.go
+++ b/lib/http/http.go
@@ -251,15 +251,15 @@ var (
//
// IPAddressOfRequest get the client IP address from HTTP request header
-// "X-Real-IP" or "X-Forwarded-For" or from Request.RemoteAddr, which ever
-// non-empty first.
+// "X-Real-IP" or "X-Forwarded-For", which ever non-empty first.
+// If no headers present, use the default address.
//
-func IPAddressOfRequest(req *http.Request) (addr string) {
- addr = req.Header.Get(HeaderXRealIp)
+func IPAddressOfRequest(headers http.Header, defAddr string) (addr string) {
+ addr = headers.Get(HeaderXRealIp)
if len(addr) == 0 {
- addr, _ = ParseXForwardedFor(req.Header.Get(HeaderXForwardedFor))
+ addr, _ = ParseXForwardedFor(headers.Get(HeaderXForwardedFor))
if len(addr) == 0 {
- addr = req.RemoteAddr
+ addr = defAddr
}
}
addr, _, _ = libnet.ParseIPPort(addr, 0)
diff --git a/lib/http/http_example_test.go b/lib/http/http_example_test.go
index 6271d97c..fd9db431 100644
--- a/lib/http/http_example_test.go
+++ b/lib/http/http_example_test.go
@@ -6,32 +6,25 @@ import (
)
func ExampleIPAddressOfRequest() {
- reqWithXRealIP := &http.Request{
- Header: http.Header{
- "X-Real-Ip": []string{"127.0.0.1"},
- },
- RemoteAddr: "192.168.100.1",
- }
- fmt.Println("Request with X-Real-IP:", IPAddressOfRequest(reqWithXRealIP))
+ defAddress := "192.168.100.1"
- reqWithXForwardedFor := &http.Request{
- Header: http.Header{
- "X-Forwarded-For": []string{"127.0.0.2, 192.168.100.1"},
- },
- RemoteAddr: "192.168.100.1",
+ headers := http.Header{
+ "X-Real-Ip": []string{"127.0.0.1"},
}
- fmt.Println("Request with X-Forwarded-For:", IPAddressOfRequest(reqWithXForwardedFor))
+ fmt.Println("Request with X-Real-IP:", IPAddressOfRequest(headers, defAddress))
- reqWithRemoteAddr := &http.Request{
- Header: http.Header{},
- RemoteAddr: "127.0.0.3",
+ headers = http.Header{
+ "X-Forwarded-For": []string{"127.0.0.2, 192.168.100.1"},
}
- fmt.Println("Request without X-* headers:", IPAddressOfRequest(reqWithRemoteAddr))
+ fmt.Println("Request with X-Forwarded-For:", IPAddressOfRequest(headers, defAddress))
+
+ headers = http.Header{}
+ fmt.Println("Request without X-* headers:", IPAddressOfRequest(headers, defAddress))
// Output:
// Request with X-Real-IP: 127.0.0.1
// Request with X-Forwarded-For: 127.0.0.2
- // Request without X-* headers: 127.0.0.3
+ // Request without X-* headers: 192.168.100.1
}
func ExampleParseXForwardedFor() {