From 289e6572cc835c0abb25fe45bef49a4ebb51df9e Mon Sep 17 00:00:00 2001 From: jarm Date: Sun, 24 May 2015 06:02:57 -0500 Subject: [PATCH] ClientIP() fix for single item in X-Forwarded-For. --- context.go | 4 +++- context_test.go | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/context.go b/context.go index be6262df..0cebbf2c 100644 --- a/context.go +++ b/context.go @@ -280,8 +280,10 @@ func (c *Context) ClientIP() string { return clientIP } clientIP = c.Request.Header.Get("X-Forwarded-For") - clientIP = strings.Split(clientIP, ",")[0] if len(clientIP) > 0 { + if strings.Contains(clientIP, ",") { + clientIP = strings.Split(clientIP, ",")[0] + } return strings.TrimSpace(clientIP) } return c.Request.RemoteAddr diff --git a/context_test.go b/context_test.go index 3cfde113..a78ce2a2 100644 --- a/context_test.go +++ b/context_test.go @@ -403,12 +403,15 @@ func TestContextClientIP(t *testing.T) { c.Request.Header.Set("X-Real-IP", "10.10.10.10") c.Request.Header.Set("X-Forwarded-For", "20.20.20.20 , 30.30.30.30") + c.Request.Header.Set("X-Forwarded-For", "30.30.30.30") c.Request.RemoteAddr = "40.40.40.40" assert.Equal(t, c.ClientIP(), "10.10.10.10") c.Request.Header.Del("X-Real-IP") assert.Equal(t, c.ClientIP(), "20.20.20.20") c.Request.Header.Del("X-Forwarded-For") + assert.Equal(t, c.ClientIP(), "30.30.30.30") + c.Request.Header.Del("X-Forwarded-For") assert.Equal(t, c.ClientIP(), "40.40.40.40") }