mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-19 20:32:35 +02:00
add $remote_host and $remote_port variables
This commit is contained in:
parent
aff8a3b401
commit
2cbee10527
3 changed files with 38 additions and 4 deletions
|
@ -2,6 +2,7 @@ package middleware
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"slices"
|
"slices"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -26,6 +27,8 @@ func TestModifyRequest(t *testing.T) {
|
||||||
"X-Test-Req-Uri": VarRequestURI,
|
"X-Test-Req-Uri": VarRequestURI,
|
||||||
"X-Test-Req-Content-Type": VarRequestContentType,
|
"X-Test-Req-Content-Type": VarRequestContentType,
|
||||||
"X-Test-Req-Content-Length": VarRequestContentLen,
|
"X-Test-Req-Content-Length": VarRequestContentLen,
|
||||||
|
"X-Test-Remote-Host": VarRemoteHost,
|
||||||
|
"X-Test-Remote-Port": VarRemotePort,
|
||||||
"X-Test-Remote-Addr": VarRemoteAddr,
|
"X-Test-Remote-Addr": VarRemoteAddr,
|
||||||
"X-Test-Upstream-Scheme": VarUpstreamScheme,
|
"X-Test-Upstream-Scheme": VarUpstreamScheme,
|
||||||
"X-Test-Upstream-Host": VarUpstreamHost,
|
"X-Test-Upstream-Host": VarUpstreamHost,
|
||||||
|
@ -76,6 +79,10 @@ func TestModifyRequest(t *testing.T) {
|
||||||
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Req-Uri"), reqURL.RequestURI())
|
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Req-Uri"), reqURL.RequestURI())
|
||||||
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Req-Content-Type"), "application/json")
|
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Req-Content-Type"), "application/json")
|
||||||
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Req-Content-Length"), "100")
|
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Req-Content-Length"), "100")
|
||||||
|
|
||||||
|
remoteHost, remotePort, _ := net.SplitHostPort(result.RemoteAddr)
|
||||||
|
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Remote-Host"), remoteHost)
|
||||||
|
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Remote-Port"), remotePort)
|
||||||
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Remote-Addr"), result.RemoteAddr)
|
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Remote-Addr"), result.RemoteAddr)
|
||||||
|
|
||||||
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Upstream-Scheme"), upstreamURL.Scheme)
|
ExpectEqual(t, result.RequestHeaders.Get("X-Test-Upstream-Scheme"), upstreamURL.Scheme)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package middleware
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"slices"
|
"slices"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -27,6 +28,10 @@ func TestModifyResponse(t *testing.T) {
|
||||||
"X-Test-Req-Query": VarRequestQuery,
|
"X-Test-Req-Query": VarRequestQuery,
|
||||||
"X-Test-Req-Url": VarRequestURL,
|
"X-Test-Req-Url": VarRequestURL,
|
||||||
"X-Test-Req-Uri": VarRequestURI,
|
"X-Test-Req-Uri": VarRequestURI,
|
||||||
|
"X-Test-Req-Content-Type": VarRequestContentType,
|
||||||
|
"X-Test-Req-Content-Length": VarRequestContentLen,
|
||||||
|
"X-Test-Remote-Host": VarRemoteHost,
|
||||||
|
"X-Test-Remote-Port": VarRemotePort,
|
||||||
"X-Test-Remote-Addr": VarRemoteAddr,
|
"X-Test-Remote-Addr": VarRemoteAddr,
|
||||||
"X-Test-Upstream-Scheme": VarUpstreamScheme,
|
"X-Test-Upstream-Scheme": VarUpstreamScheme,
|
||||||
"X-Test-Upstream-Host": VarUpstreamHost,
|
"X-Test-Upstream-Host": VarUpstreamHost,
|
||||||
|
@ -83,6 +88,12 @@ func TestModifyResponse(t *testing.T) {
|
||||||
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Req-Query"), reqURL.RawQuery)
|
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Req-Query"), reqURL.RawQuery)
|
||||||
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Req-Url"), reqURL.String())
|
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Req-Url"), reqURL.String())
|
||||||
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Req-Uri"), reqURL.RequestURI())
|
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Req-Uri"), reqURL.RequestURI())
|
||||||
|
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Req-Content-Type"), "application/json")
|
||||||
|
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Req-Content-Length"), "100")
|
||||||
|
|
||||||
|
remoteHost, remotePort, _ := net.SplitHostPort(result.RemoteAddr)
|
||||||
|
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Remote-Host"), remoteHost)
|
||||||
|
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Remote-Port"), remotePort)
|
||||||
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Remote-Addr"), result.RemoteAddr)
|
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Remote-Addr"), result.RemoteAddr)
|
||||||
|
|
||||||
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Upstream-Scheme"), upstreamURL.Scheme)
|
ExpectEqual(t, result.ResponseHeaders.Get("X-Test-Upstream-Scheme"), upstreamURL.Scheme)
|
||||||
|
|
|
@ -34,6 +34,8 @@ const (
|
||||||
VarRequestURI = "$req_uri"
|
VarRequestURI = "$req_uri"
|
||||||
VarRequestContentType = "$req_content_type"
|
VarRequestContentType = "$req_content_type"
|
||||||
VarRequestContentLen = "$req_content_length"
|
VarRequestContentLen = "$req_content_length"
|
||||||
|
VarRemoteHost = "$remote_host"
|
||||||
|
VarRemotePort = "$remote_port"
|
||||||
VarRemoteAddr = "$remote_addr"
|
VarRemoteAddr = "$remote_addr"
|
||||||
VarUpstreamScheme = "$upstream_scheme"
|
VarUpstreamScheme = "$upstream_scheme"
|
||||||
VarUpstreamHost = "$upstream_host"
|
VarUpstreamHost = "$upstream_host"
|
||||||
|
@ -72,10 +74,24 @@ var staticReqVarSubsMap = map[string]reqVarGetter{
|
||||||
VarRequestURI: func(req *Request) string { return req.URL.RequestURI() },
|
VarRequestURI: func(req *Request) string { return req.URL.RequestURI() },
|
||||||
VarRequestContentType: func(req *Request) string { return req.Header.Get("Content-Type") },
|
VarRequestContentType: func(req *Request) string { return req.Header.Get("Content-Type") },
|
||||||
VarRequestContentLen: func(req *Request) string { return strconv.FormatInt(req.ContentLength, 10) },
|
VarRequestContentLen: func(req *Request) string { return strconv.FormatInt(req.ContentLength, 10) },
|
||||||
VarRemoteAddr: func(req *Request) string { return req.RemoteAddr },
|
VarRemoteHost: func(req *Request) string {
|
||||||
VarUpstreamScheme: func(req *Request) string { return req.Header.Get(gphttp.HeaderUpstreamScheme) },
|
clientIP, _, err := net.SplitHostPort(req.RemoteAddr)
|
||||||
VarUpstreamHost: func(req *Request) string { return req.Header.Get(gphttp.HeaderUpstreamHost) },
|
if err == nil {
|
||||||
VarUpstreamPort: func(req *Request) string { return req.Header.Get(gphttp.HeaderUpstreamPort) },
|
return clientIP
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
},
|
||||||
|
VarRemotePort: func(req *Request) string {
|
||||||
|
_, clientPort, err := net.SplitHostPort(req.RemoteAddr)
|
||||||
|
if err == nil {
|
||||||
|
return clientPort
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
},
|
||||||
|
VarRemoteAddr: func(req *Request) string { return req.RemoteAddr },
|
||||||
|
VarUpstreamScheme: func(req *Request) string { return req.Header.Get(gphttp.HeaderUpstreamScheme) },
|
||||||
|
VarUpstreamHost: func(req *Request) string { return req.Header.Get(gphttp.HeaderUpstreamHost) },
|
||||||
|
VarUpstreamPort: func(req *Request) string { return req.Header.Get(gphttp.HeaderUpstreamPort) },
|
||||||
VarUpstreamAddr: func(req *Request) string {
|
VarUpstreamAddr: func(req *Request) string {
|
||||||
upHost := req.Header.Get(gphttp.HeaderUpstreamHost)
|
upHost := req.Header.Get(gphttp.HeaderUpstreamHost)
|
||||||
upPort := req.Header.Get(gphttp.HeaderUpstreamPort)
|
upPort := req.Header.Get(gphttp.HeaderUpstreamPort)
|
||||||
|
|
Loading…
Add table
Reference in a new issue