|
@@ -28,6 +28,7 @@ type wafLogDataCleanService struct {
|
|
|
type BackendInfo struct {
|
|
|
Addr string `json:"addr,omitempty"` // 后端地址
|
|
|
CustomHost string `json:"customHost,omitempty"` // 自定义Host头
|
|
|
+ IsHttps int `json:"isHttps,omitempty"` // 是否为HTTPS
|
|
|
}
|
|
|
|
|
|
// CleanedExtraData 使用动态结构存储解析后的数据
|
|
@@ -58,12 +59,6 @@ type CleanedExtraData struct {
|
|
|
RawData map[string]interface{} `json:"rawData,omitempty"`
|
|
|
}
|
|
|
|
|
|
-// backendInfo 用于解析 "web" 类型中 backendList JSON 字符串的内部结构
|
|
|
-type backendInfo struct {
|
|
|
- Addr string `json:"addr"`
|
|
|
- CustomHost string `json:"customHost"`
|
|
|
-}
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
@@ -178,11 +173,7 @@ func (s *wafLogDataCleanService) extractBackendListWithGjson(jsonStr, apiName st
|
|
|
switch {
|
|
|
case backendResult.IsArray():
|
|
|
s.processArrayBackends(backendResult, result)
|
|
|
- case backendResult.IsObject():
|
|
|
- s.processObjectBackends(backendResult, result)
|
|
|
- default:
|
|
|
- // 字符串类型,可能是JSON字符串或单个地址
|
|
|
- s.processStringBackends(backendResult.String(), result)
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// 找到有效数据就退出
|
|
@@ -198,21 +189,30 @@ func (s *wafLogDataCleanService) processArrayBackends(backendResult gjson.Result
|
|
|
if value.IsObject() {
|
|
|
// 创建BackendInfo结构
|
|
|
backend := BackendInfo{}
|
|
|
-
|
|
|
+
|
|
|
+ isHttps := gjson.Get(value.Raw, "isHttps").Int()
|
|
|
+
|
|
|
// 尝试提取地址字段
|
|
|
addr := s.getFirstValidPath(value.Raw, []string{"addr", "address", "host", "server", "endpoint", "url"})
|
|
|
+
|
|
|
+ if isHttps == 1 {
|
|
|
+ addr = "https://" + addr
|
|
|
+ }else {
|
|
|
+ addr = "http://" + addr
|
|
|
+ }
|
|
|
+
|
|
|
if addr != "" {
|
|
|
backend.Addr = addr
|
|
|
result.AddrBackendList = append(result.AddrBackendList, addr)
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 提取customHost
|
|
|
if customHost := gjson.Get(value.Raw, "customHost").String(); customHost != "" {
|
|
|
backend.CustomHost = customHost
|
|
|
result.CustomHostList = append(result.CustomHostList, customHost)
|
|
|
result.CustomHost = append(result.CustomHost, customHost)
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 只有当有有效数据时才添加到BackendList
|
|
|
if backend.Addr != "" || backend.CustomHost != "" {
|
|
|
result.BackendList = append(result.BackendList, backend)
|
|
@@ -228,51 +228,6 @@ func (s *wafLogDataCleanService) processArrayBackends(backendResult gjson.Result
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-// processObjectBackends 处理对象格式的后端列表
|
|
|
-func (s *wafLogDataCleanService) processObjectBackends(backendResult gjson.Result, result *CleanedExtraData) {
|
|
|
- // 创建BackendInfo结构
|
|
|
- backend := BackendInfo{}
|
|
|
-
|
|
|
- addr := s.getFirstValidPath(backendResult.Raw, []string{"addr", "address", "host", "server", "endpoint", "url"})
|
|
|
- if addr != "" {
|
|
|
- backend.Addr = addr
|
|
|
- result.AddrBackendList = append(result.AddrBackendList, addr)
|
|
|
- }
|
|
|
-
|
|
|
- if customHost := gjson.Get(backendResult.Raw, "customHost").String(); customHost != "" {
|
|
|
- backend.CustomHost = customHost
|
|
|
- result.CustomHostList = append(result.CustomHostList, customHost)
|
|
|
- result.CustomHost = append(result.CustomHost, customHost)
|
|
|
- }
|
|
|
-
|
|
|
- // 只有当有有效数据时才添加到BackendList
|
|
|
- if backend.Addr != "" || backend.CustomHost != "" {
|
|
|
- result.BackendList = append(result.BackendList, backend)
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// processStringBackends 处理字符串格式的后端列表
|
|
|
-func (s *wafLogDataCleanService) processStringBackends(backendStr string, result *CleanedExtraData) {
|
|
|
- if backendStr == "" {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- // 尝试作为JSON解析
|
|
|
- if gjson.Valid(backendStr) {
|
|
|
- parsed := gjson.Parse(backendStr)
|
|
|
- if parsed.IsArray() {
|
|
|
- s.processArrayBackends(parsed, result)
|
|
|
- return
|
|
|
- } else if parsed.IsObject() {
|
|
|
- s.processObjectBackends(parsed, result)
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 作为单个地址处理
|
|
|
- result.AddrBackendList = append(result.AddrBackendList, backendStr)
|
|
|
- result.BackendList = append(result.BackendList, BackendInfo{Addr: backendStr})
|
|
|
-}
|
|
|
|
|
|
// extractDynamicFields 提取所有动态字段到DynamicFields中
|
|
|
func (s *wafLogDataCleanService) extractDynamicFields(jsonStr string, result *CleanedExtraData) {
|