Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
javierprovecho committed Dec 6, 2016
1 parent 18392f5 commit 7e58c80
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 0 deletions.
8 changes: 8 additions & 0 deletions context.go
Original file line number Diff line number Diff line change
Expand Up @@ -353,9 +353,17 @@ func (c *Context) ClientIP() string {
return clientIP
}
}

if c.engine.AppEngine {
if addr := c.Request.Header.Get("X-Appengine-Remote-Addr"); addr != "" {
return addr
}
}

if ip, _, err := net.SplitHostPort(strings.TrimSpace(c.Request.RemoteAddr)); err == nil {
return ip
}

return ""
}

Expand Down
7 changes: 7 additions & 0 deletions context_appengine.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// +build appengine

package gin

func init() {
defaultAppEngine = true
}
9 changes: 9 additions & 0 deletions context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,7 @@ 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-Appengine-Remote-Addr", "50.50.50.50")
c.Request.RemoteAddr = " 40.40.40.40:42123 "

assert.Equal(t, c.ClientIP(), "10.10.10.10")
Expand All @@ -661,7 +662,15 @@ func TestContextClientIP(t *testing.T) {
assert.Equal(t, c.ClientIP(), "30.30.30.30")

c.Request.Header.Del("X-Forwarded-For")
c.engine.AppEngine = true
assert.Equal(t, c.ClientIP(), "50.50.50.50")

c.Request.Header.Del("X-Appengine-Remote-Addr")
assert.Equal(t, c.ClientIP(), "40.40.40.40")

// no port
c.Request.RemoteAddr = "50.50.50.50"
assert.Equal(t, c.ClientIP(), "")
}

func TestContextContentType(t *testing.T) {
Expand Down
6 changes: 6 additions & 0 deletions gin.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const Version = "v1.0rc2"

var default404Body = []byte("404 page not found")
var default405Body = []byte("405 method not allowed")
var defaultAppEngine bool

type HandlerFunc func(*Context)
type HandlersChain []HandlerFunc
Expand Down Expand Up @@ -78,6 +79,10 @@ type (
// handler.
HandleMethodNotAllowed bool
ForwardedByClientIP bool

// #726 #755 If enabled, it will thrust some headers starting with
// 'X-AppEngine...' for better integration with that PaaS.
AppEngine bool
}
)

Expand All @@ -101,6 +106,7 @@ func New() *Engine {
RedirectFixedPath: false,
HandleMethodNotAllowed: false,
ForwardedByClientIP: true,
AppEngine: defaultAppEngine,
trees: make(methodTrees, 0, 9),
}
engine.RouterGroup.engine = engine
Expand Down

0 comments on commit 7e58c80

Please sign in to comment.