feat: add GetRemoteAddr helper

This commit is contained in:
Kevin Franklin Kim 2022-05-03 18:55:20 +02:00
parent 6a41c542db
commit 78838de70a
2 changed files with 35 additions and 9 deletions

View File

@ -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"

View File

@ -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