Adds ForwardedByClientIP option
This commit is contained in:
		
							
								
								
									
										24
									
								
								context.go
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								context.go
									
									
									
									
									
								
							| @ -251,17 +251,19 @@ func (c *Context) BindWith(obj interface{}, b binding.Binding) error { | ||||
| // Best effort algoritm to return the real client IP, it parses | ||||
| // X-Real-IP and X-Forwarded-For in order to work properly with reverse-proxies such us: nginx or haproxy. | ||||
| func (c *Context) ClientIP() string { | ||||
| 	clientIP := strings.TrimSpace(c.requestHeader("X-Real-Ip")) | ||||
| 	if len(clientIP) > 0 { | ||||
| 		return clientIP | ||||
| 	} | ||||
| 	clientIP = c.requestHeader("X-Forwarded-For") | ||||
| 	if index := strings.IndexByte(clientIP, ','); index >= 0 { | ||||
| 		clientIP = clientIP[0:index] | ||||
| 	} | ||||
| 	clientIP = strings.TrimSpace(clientIP) | ||||
| 	if len(clientIP) > 0 { | ||||
| 		return clientIP | ||||
| 	if c.engine.ForwardedByClientIP { | ||||
| 		clientIP := strings.TrimSpace(c.requestHeader("X-Real-Ip")) | ||||
| 		if len(clientIP) > 0 { | ||||
| 			return clientIP | ||||
| 		} | ||||
| 		clientIP = c.requestHeader("X-Forwarded-For") | ||||
| 		if index := strings.IndexByte(clientIP, ','); index >= 0 { | ||||
| 			clientIP = clientIP[0:index] | ||||
| 		} | ||||
| 		clientIP = strings.TrimSpace(clientIP) | ||||
| 		if len(clientIP) > 0 { | ||||
| 			return clientIP | ||||
| 		} | ||||
| 	} | ||||
| 	return strings.TrimSpace(c.Request.RemoteAddr) | ||||
| } | ||||
|  | ||||
							
								
								
									
										8
									
								
								gin.go
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								gin.go
									
									
									
									
									
								
							| @ -14,7 +14,7 @@ import ( | ||||
| 	"github.com/gin-gonic/gin/render" | ||||
| ) | ||||
|  | ||||
| const Version = "v1.0rc1" | ||||
| const Version = "v1.0rc2" | ||||
|  | ||||
| var default404Body = []byte("404 page not found") | ||||
| var default405Body = []byte("405 method not allowed") | ||||
| @ -59,6 +59,7 @@ type ( | ||||
| 		// If no other Method is allowed, the request is delegated to the NotFound | ||||
| 		// handler. | ||||
| 		HandleMethodNotAllowed bool | ||||
| 		ForwardedByClientIP    bool | ||||
| 	} | ||||
| ) | ||||
|  | ||||
| @ -74,7 +75,8 @@ func New() *Engine { | ||||
| 		RedirectTrailingSlash:  true, | ||||
| 		RedirectFixedPath:      false, | ||||
| 		HandleMethodNotAllowed: false, | ||||
| 		trees: make(methodTrees, 0, 5), | ||||
| 		ForwardedByClientIP:    true, | ||||
| 		trees:                  make(methodTrees, 0, 9), | ||||
| 	} | ||||
| 	engine.RouterGroup.engine = engine | ||||
| 	engine.pool.New = func() interface{} { | ||||
| @ -90,7 +92,7 @@ func Default() *Engine { | ||||
| 	return engine | ||||
| } | ||||
|  | ||||
| func (engine *Engine) allocateContext() (context *Context) { | ||||
| func (engine *Engine) allocateContext() *Context { | ||||
| 	return &Context{engine: engine} | ||||
| } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user