GoDoxy/internal/net/gphttp/reverseproxy/context.go
yusing 75ee0e63bd fix(middleware): fix route bypass matching
- replace upstream headers approach with context value
2025-05-08 17:49:36 +08:00

61 lines
1.2 KiB
Go

package reverseproxy
import (
"context"
"net/http"
)
var reverseProxyContextKey = struct{}{}
func (rp *ReverseProxy) WithContextValue(r *http.Request) *http.Request {
return r.WithContext(context.WithValue(r.Context(), reverseProxyContextKey, rp))
}
func TryGetReverseProxy(r *http.Request) *ReverseProxy {
if rp, ok := r.Context().Value(reverseProxyContextKey).(*ReverseProxy); ok {
return rp
}
return nil
}
func TryGetUpstreamName(r *http.Request) string {
if rp := TryGetReverseProxy(r); rp != nil {
return rp.TargetName
}
return ""
}
func TryGetUpstreamScheme(r *http.Request) string {
if rp := TryGetReverseProxy(r); rp != nil {
return rp.TargetURL.Scheme
}
return ""
}
func TryGetUpstreamHost(r *http.Request) string {
if rp := TryGetReverseProxy(r); rp != nil {
return rp.TargetURL.Hostname()
}
return ""
}
func TryGetUpstreamPort(r *http.Request) string {
if rp := TryGetReverseProxy(r); rp != nil {
return rp.TargetURL.Port()
}
return ""
}
func TryGetUpstreamAddr(r *http.Request) string {
if rp := TryGetReverseProxy(r); rp != nil {
return rp.TargetURL.Host
}
return ""
}
func TryGetUpstreamURL(r *http.Request) string {
if rp := TryGetReverseProxy(r); rp != nil {
return rp.TargetURL.String()
}
return ""
}