golang-filter use go 1.22

This commit is contained in:
johnlanni
2025-04-28 19:21:09 +08:00
parent 03b4144cff
commit e12feb9f57
5 changed files with 36 additions and 14 deletions

View File

@@ -24,7 +24,11 @@ func NewRequestURL(header api.RequestHeaderMap) *RequestURL {
path, _ := header.Get(":path")
internalIP, _ := header.Get("x-envoy-internal")
baseURL := fmt.Sprintf("%s://%s", scheme, host)
parsedURL, _ := url.Parse(path)
parsedURL, err := url.Parse(path)
if err != nil {
api.LogWarnf("url parse path:%s failed:%s", path, err)
return nil
}
api.LogDebugf("RequestURL: method=%s, scheme=%s, host=%s, path=%s", method, scheme, host, path)
return &RequestURL{Method: method, Scheme: scheme, Host: host, Path: path, BaseURL: baseURL, ParsedURL: parsedURL, InternalIP: internalIP == "true"}
}

View File

@@ -28,10 +28,10 @@ type filter struct {
config *config
stopChan chan struct{}
req *http.Request
serverName string
proxyURL *url.URL
skip bool
req *http.Request
serverName string
proxyURL *url.URL
neepProcess bool
userLevelConfig bool
mcpConfigHandler *handler.MCPConfigHandler
@@ -43,14 +43,17 @@ type filter struct {
// The endStream is true if the request doesn't have body
func (f *filter) DecodeHeaders(header api.RequestHeaderMap, endStream bool) api.StatusType {
url := common.NewRequestURL(header)
if url == nil {
return api.Continue
}
f.path = url.ParsedURL.Path
// Check if request matches any rule in match_list
if !common.IsMatch(f.config.matchList, url.Host, f.path) {
f.skip = true
api.LogDebugf("Request does not match any rule in match_list: %s", url.ParsedURL.String())
return api.Continue
}
f.neepProcess = true
f.req = &http.Request{
Method: url.Method,
@@ -116,7 +119,7 @@ func (f *filter) DecodeHeaders(header api.RequestHeaderMap, endStream bool) api.
// DecodeData might be called multiple times during handling the request body.
// The endStream is true when handling the last piece of the body.
func (f *filter) DecodeData(buffer api.BufferInstance, endStream bool) api.StatusType {
if f.skip {
if !f.neepProcess {
return api.Continue
}
if !endStream {
@@ -158,7 +161,7 @@ func (f *filter) DecodeData(buffer api.BufferInstance, endStream bool) api.Statu
// Callbacks which are called in response path
// The endStream is true if the response doesn't have body
func (f *filter) EncodeHeaders(header api.ResponseHeaderMap, endStream bool) api.StatusType {
if f.skip {
if !f.neepProcess {
return api.Continue
}
if f.serverName != "" {
@@ -179,7 +182,7 @@ func (f *filter) EncodeHeaders(header api.ResponseHeaderMap, endStream bool) api
// EncodeData might be called multiple times during handling the response body.
// The endStream is true when handling the last piece of the body.
func (f *filter) EncodeData(buffer api.BufferInstance, endStream bool) api.StatusType {
if f.skip {
if !f.neepProcess {
return api.Continue
}
if !endStream {