mirror of
https://github.com/foomo/keel.git
synced 2025-10-16 12:35:34 +00:00
feat: add GetRemoteAddr helper
This commit is contained in:
parent
6a41c542db
commit
78838de70a
@ -17,6 +17,7 @@ const (
|
||||
HeaderUpgrade = "Upgrade"
|
||||
HeaderVary = "Vary"
|
||||
HeaderWWWAuthenticate = "WWW-Authenticate"
|
||||
HeaderXForwardedHost = "X-Forwarded-Host"
|
||||
HeaderXForwardedFor = "X-Forwarded-For"
|
||||
HeaderXForwardedProto = "X-Forwarded-Proto"
|
||||
HeaderXForwardedProtocol = "X-Forwarded-Protocol"
|
||||
@ -33,9 +34,16 @@ const (
|
||||
HeaderXError = "X-Error"
|
||||
HeaderXRuntime = "X-Runtime"
|
||||
HeaderServer = "Server"
|
||||
HeaderTrueClientIP = "True-Client-Ip"
|
||||
HeaderOrigin = "Origin"
|
||||
HeaderUserAgent = "User-Agent"
|
||||
|
||||
// Cloudflare
|
||||
HeaderCloudflareIPCountry = "Cf-Ipcountry"
|
||||
HeaderCloudflareRay = "Cf-Ray"
|
||||
HeaderCloudflareConnectingIP = "Cf-Connecting-Ip"
|
||||
HeaderCloudflareVisitor = "Cf-Visitor"
|
||||
|
||||
// Access control
|
||||
HeaderAccessControlRequestMethod = "Access-Control-Request-Method"
|
||||
HeaderAccessControlRequestHeaders = "Access-Control-Request-Headers"
|
||||
|
||||
@ -1,22 +1,40 @@
|
||||
package httputils
|
||||
|
||||
import (
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
keelhttp "github.com/foomo/keel/net/http"
|
||||
)
|
||||
|
||||
// GetRequestHost returns the request's host
|
||||
func GetRequestHost(r *http.Request) string {
|
||||
var host string
|
||||
switch {
|
||||
case r.Header.Get("X-Forwarded-Host") != "":
|
||||
host = r.Header.Get("X-Forwarded-Host")
|
||||
case !r.URL.IsAbs():
|
||||
host = r.Host
|
||||
default:
|
||||
host = r.URL.Host
|
||||
if value := r.Header.Get(keelhttp.HeaderXForwardedHost); value != "" {
|
||||
return value
|
||||
} else if !r.URL.IsAbs() {
|
||||
return r.Host
|
||||
} else {
|
||||
return r.URL.Host
|
||||
}
|
||||
}
|
||||
|
||||
func GetRemoteAddr(r *http.Request) string {
|
||||
if value := r.Header.Get(keelhttp.HeaderXRealIP); value != "" {
|
||||
return value
|
||||
} else if value := r.Header.Get(keelhttp.HeaderTrueClientIP); value != "" {
|
||||
return value
|
||||
} else if value := r.Header.Get(keelhttp.HeaderXForwardedFor); value != "" {
|
||||
if i := strings.IndexAny(value, ", "); i > 0 {
|
||||
return value[:i]
|
||||
} else {
|
||||
return value
|
||||
}
|
||||
} else if value, _, err := net.SplitHostPort(r.RemoteAddr); err == nil {
|
||||
return value
|
||||
} else {
|
||||
return r.RemoteAddr
|
||||
}
|
||||
return host
|
||||
}
|
||||
|
||||
// GetRequestDomain returns the request's domain
|
||||
|
||||
Loading…
Reference in New Issue
Block a user