diff --git a/.vscode/launch.json b/.vscode/launch.json index 8f7c445..60a0819 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,14 +10,15 @@ "request": "launch", "mode": "debug", "program": "./restagent/restagent.go", - "console": "integratedTerminal" + "console": "integratedTerminal", + "args": ["--env", "local"] // 走开发配置 }, { "name": "DEBUG restagent", "type": "go", "request": "launch", "mode": "debug", - "program": "d:/local.git/ems.agt/restagent/restagent.go", + "program": "d:/local.git/ems.agt/restagent/", "console": "integratedTerminal" }, { @@ -36,6 +37,14 @@ "program": "d:/local.git/ems.agt/tools/loadpconf", "args": ["-p","../../config/param/upf_param_config.yaml"], "console": "integratedTerminal" - } + }, + { + "name": "debug crontask", + "type": "go", + "request": "launch", + "mode": "debug", + "program": "d:/local.git/ems.agt/crontask", + "console": "integratedTerminal" + } ] } \ No newline at end of file diff --git a/features/dbrest/dbrest.go b/features/dbrest/dbrest.go index c27ff51..d467979 100644 --- a/features/dbrest/dbrest.go +++ b/features/dbrest/dbrest.go @@ -44,8 +44,9 @@ var ( XormCommonUri = config.DefaultUriPrefix + "/databaseManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for internal XormDatabaseUri = config.DefaultUriPrefix + "/database/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for crontask - XormExtDataUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external - XormDataSQLUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external + XormDataRestUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}" + XormExtDataUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external + XormDataSQLUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external CustomXormCommonUri = config.UriPrefix + "/databaseManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for internal CustomXormExtDataUri = config.UriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external diff --git a/features/mml/mml.go b/features/mml/mml.go index 5947d5a..99dbdc7 100644 --- a/features/mml/mml.go +++ b/features/mml/mml.go @@ -6,6 +6,7 @@ import ( "io" "net" "net/http" + "regexp" "strings" "time" @@ -137,28 +138,18 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) { mmlRequest := new(MMLRequest) _ = json.Unmarshal(body, mmlRequest) - n, err = conn.Read(buf[0:]) - if err != nil { - log.Error("Failed to read:", err) - mmlResult = append(mmlResult, err.Error()) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - log.Debug(string(buf[0:n])) - - // loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) - // _, err = conn.Write([]byte(loginStr)) + // n, err = conn.Read(buf[0:]) // if err != nil { - // log.Error("Failed to write:", err) + // log.Error("Failed to read:", err) // mmlResult = append(mmlResult, err.Error()) // response := Response{mmlResult} // services.ResponseWithJson(w, http.StatusOK, response) // return // } - // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) + // log.Debug(string(buf[0:n])) - n, err = conn.Write([]byte(config.GetYamlConfig().MML.User + "\n")) + loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) + _, err = conn.Write([]byte(loginStr)) if err != nil { log.Error("Failed to write:", err) mmlResult = append(mmlResult, err.Error()) @@ -166,9 +157,19 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) { services.ResponseWithJson(w, http.StatusOK, response) return } - log.Debug(string(buf[0:n])) time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) + // n, err = conn.Write([]byte(config.GetYamlConfig().MML.User + "\n")) + // if err != nil { + // log.Error("Failed to write:", err) + // mmlResult = append(mmlResult, err.Error()) + // response := Response{mmlResult} + // services.ResponseWithJson(w, http.StatusOK, response) + // return + // } + // log.Debug(string(buf[0:n])) + // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) + // n, err = conn.Read(buf[0:]) // if err != nil { // log.Error("Failed to read:", err) @@ -179,17 +180,17 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) { // } // log.Debug(string(buf[0:n])) - n, err = conn.Write([]byte(config.GetYamlConfig().MML.Password + "\n")) - if err != nil { - log.Error("Failed to write:", err) - mmlResult = append(mmlResult, err.Error()) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - log.Debug(string(buf[0:n])) + // n, err = conn.Write([]byte(config.GetYamlConfig().MML.Password + "\n")) + // if err != nil { + // log.Error("Failed to write:", err) + // mmlResult = append(mmlResult, err.Error()) + // response := Response{mmlResult} + // services.ResponseWithJson(w, http.StatusOK, response) + // return + // } + // log.Debug(string(buf[0:n])) - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) + // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) // n, err = conn.Read(buf[0:]) // if err != nil { @@ -214,19 +215,28 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) { } time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - // n, err = conn.Read(buf[0:]) - // if err != nil { - // log.Error("Failed to read:", err) - // mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - // log.Trace(string(buf[0 : n-len(neType)-2])) - // mmlResult = append(mmlResult, string(buf[0:n-len(neType)-2])) + n, err = conn.Read(buf[0:]) + if err != nil { + log.Error("Failed to read:", err) + mmlResult = append(mmlResult, err.Error()) + response := Response{mmlResult} + services.ResponseWithJson(w, http.StatusOK, response) + return + } + log.Trace(string(buf[0 : n-len(neType)-2])) + + re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符 + //re2 := regexp.MustCompile(`\x00`) // 匹配空字符 + re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符 + //re := regexp.MustCompile(`[\x00-\x1F\x7F]`) + // upf telnet buffer只能读取一次,需要去掉前面的多余字符 + result := re1.ReplaceAllString(string(buf[config.GetYamlConfig().MML.UpfHeaderLength:n-len(neType)-2]), "") + result = re2.ReplaceAllString(result, "") + mmlResult = append(mmlResult, result) + //mmlResult = append(mmlResult, string(buf[0:n-len(neType)-2])) // can't read buffer from upf telnet server, so return ok always - mmlResult = append(mmlResult, "COMMAND OK\n") + // mmlResult = append(mmlResult, "COMMAND OK\n") } default: loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) @@ -283,7 +293,13 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) { return } log.Trace(string(buf[0 : n-len(neType)-2])) - mmlResult = append(mmlResult, string(buf[0:n-len(neType)-2])) + re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符 + //re2 := regexp.MustCompile(`\x00`) // 匹配空字符 + re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符 + //re := regexp.MustCompile(`[\x00-\x1F\x7F]`) + result := re1.ReplaceAllString(string(buf[0:n-len(neType)-2]), "") + result = re2.ReplaceAllString(result, "") + mmlResult = append(mmlResult, result) } } } diff --git a/features/ue/ue.go b/features/ue/ue.go index 2be1c86..9db7e22 100644 --- a/features/ue/ue.go +++ b/features/ue/ue.go @@ -3,6 +3,7 @@ package ue import ( "encoding/json" "fmt" + "io" "net/http" "time" @@ -71,13 +72,17 @@ type N3iwfUEData struct { } var ( - UriNBInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" - UriUEInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" - UriUENum = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" + UriNBInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" + UriUEInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" + UriUENum = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" + UriPCFUser = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo" + UriPCFUserM = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/{number}" - CustomUriNBInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" - CustomUriUEInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" - CustomUriUENum = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" + CustomUriNBInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" + CustomUriUEInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" + CustomUriUENum = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" + CustomUriPCFUser = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo" + CustomUriPCFUserM = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/{number}" ) var client = resty.New() @@ -153,7 +158,216 @@ func GetUEInfoFromNF(w http.ResponseWriter, r *http.Request) { services.ResponseInternalServerError500ProcessError(w, err) return } else { - var response services.DataResponse + var response services.MapResponse + _ = json.Unmarshal(resp.Body(), &response) + services.ResponseWithJson(w, resp.StatusCode(), response) + return + } +} + +// Get UEInfo from NF/NFs +func PostPCFUserInfo(w http.ResponseWriter, r *http.Request) { + log.Info("PostPCFUserInfo processing... ") + + // vars := mux.Vars(r) + // neType := vars["elementTypeValue"] + // if neType == "" { + // services.ResponseNotFound404UriNotExist(w, r) + // return + // } + //neTypeLower := strings.ToLower(neType) + neType := "PCF" + var neId string + neIds := services.GetParamsArrByName("neId", r) + if len(neIds) == 1 { + neId = neIds[0] + } else { + services.ResponseNotFound404UriNotExist(w, r) + return + } + + // token, err := services.CheckFrontValidRequest(w, r) + // if err != nil { + // log.Error("Request error:", err) + // return + // } + // log.Debug("token:", token) + + neInfo, err := dborm.XormGetNeInfo(neType, neId) + if err != nil { + log.Error("Failed to XormGetNeInfo:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else if neInfo == nil { + err := global.ErrCMNotFoundTargetNE + log.Error(global.ErrCMNotFoundTargetNE) + services.ResponseInternalServerError500ProcessError(w, err) + return + } + log.Trace("neInfo:", neInfo) + + hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) + requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) + + log.Debug("requestURI2NF:", requestURI2NF) + + body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 + if err != nil { + log.Error("io.ReadAll is failed:", err) + services.ResponseNotFound404UriNotExist(w, r) + return + } + resp, err := client.R(). + EnableTrace(). + SetHeaders(map[string]string{tokenConst.HEADER_KEY: r.Header.Get(tokenConst.HEADER_KEY)}). + //SetHeaders(map[string]string{"accessToken": token}). + SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). + SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + SetBody(body). + Post(requestURI2NF) + if err != nil { + log.Error("Failed to post:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else { + var response services.MapResponse + _ = json.Unmarshal(resp.Body(), &response) + services.ResponseWithJson(w, resp.StatusCode(), response) + return + } +} + +// Get UEInfo from NF/NFs +func PutPCFUserInfo(w http.ResponseWriter, r *http.Request) { + log.Info("PutPCFUserInfo processing... ") + + // vars := mux.Vars(r) + // neType := vars["elementTypeValue"] + // if neType == "" { + // services.ResponseNotFound404UriNotExist(w, r) + // return + // } + //neTypeLower := strings.ToLower(neType) + neType := "PCF" + var neId string + neIds := services.GetParamsArrByName("neId", r) + if len(neIds) == 1 { + neId = neIds[0] + } else { + services.ResponseNotFound404UriNotExist(w, r) + return + } + + // token, err := services.CheckFrontValidRequest(w, r) + // if err != nil { + // log.Error("Request error:", err) + // return + // } + // log.Debug("token:", token) + + neInfo, err := dborm.XormGetNeInfo(neType, neId) + if err != nil { + log.Error("Failed to XormGetNeInfo:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else if neInfo == nil { + err := global.ErrCMNotFoundTargetNE + log.Error(global.ErrCMNotFoundTargetNE) + services.ResponseInternalServerError500ProcessError(w, err) + return + } + log.Trace("neInfo:", neInfo) + + hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) + requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) + + log.Debug("requestURI2NF:", requestURI2NF) + + body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 + if err != nil { + log.Error("io.ReadAll is failed:", err) + services.ResponseNotFound404UriNotExist(w, r) + return + } + resp, err := client.R(). + EnableTrace(). + SetHeaders(map[string]string{tokenConst.HEADER_KEY: r.Header.Get(tokenConst.HEADER_KEY)}). + //SetHeaders(map[string]string{"accessToken": token}). + SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). + SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + SetBody(body). + Put(requestURI2NF) + if err != nil { + log.Error("Failed to put:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else { + var response services.MapResponse + _ = json.Unmarshal(resp.Body(), &response) + services.ResponseWithJson(w, resp.StatusCode(), response) + return + } +} + +// Get UEInfo from NF/NFs +func DeletePCFUserInfo(w http.ResponseWriter, r *http.Request) { + log.Info("DeletePCFUserInfo processing... ") + + // vars := mux.Vars(r) + // neType := vars["elementTypeValue"] + // if neType == "" { + // services.ResponseNotFound404UriNotExist(w, r) + // return + // } + //neTypeLower := strings.ToLower(neType) + neType := "PCF" + var neId string + neIds := services.GetParamsArrByName("neId", r) + if len(neIds) == 1 { + neId = neIds[0] + } else { + services.ResponseNotFound404UriNotExist(w, r) + return + } + + // token, err := services.CheckFrontValidRequest(w, r) + // if err != nil { + // log.Error("Request error:", err) + // return + // } + // log.Debug("token:", token) + + neInfo, err := dborm.XormGetNeInfo(neType, neId) + if err != nil { + log.Error("Failed to XormGetNeInfo:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else if neInfo == nil { + err := global.ErrCMNotFoundTargetNE + log.Error(global.ErrCMNotFoundTargetNE) + services.ResponseInternalServerError500ProcessError(w, err) + return + } + log.Trace("neInfo:", neInfo) + + hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) + requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) + + log.Debug("requestURI2NF:", requestURI2NF) + + resp, err := client.R(). + EnableTrace(). + SetHeaders(map[string]string{tokenConst.HEADER_KEY: r.Header.Get(tokenConst.HEADER_KEY)}). + //SetHeaders(map[string]string{"accessToken": token}). + SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). + SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + Delete(requestURI2NF) + if err != nil { + log.Error("Failed to delete:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else { + var response services.MapResponse _ = json.Unmarshal(resp.Body(), &response) services.ResponseWithJson(w, resp.StatusCode(), response) return @@ -217,7 +431,7 @@ func GetUENumFromNF(w http.ResponseWriter, r *http.Request) { services.ResponseInternalServerError500ProcessError(w, err) return } else { - var response services.DataResponse + var response services.MapResponse _ = json.Unmarshal(resp.Body(), &response) services.ResponseWithJson(w, resp.StatusCode(), response) return @@ -281,7 +495,7 @@ func GetNBInfoFromNF(w http.ResponseWriter, r *http.Request) { services.ResponseInternalServerError500ProcessError(w, err) return } else { - var response services.DataResponse + var response services.MapResponse _ = json.Unmarshal(resp.Body(), &response) services.ResponseWithJson(w, resp.StatusCode(), response) return diff --git a/lib/routes/routes.go b/lib/routes/routes.go index 886fb54..c4b9cf0 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -99,6 +99,11 @@ func init() { Register("PUT", dbrest.CustomXormCommonUri, dbrest.DatabaseUpdateData, nil) Register("DELETE", dbrest.CustomXormCommonUri, dbrest.DatabaseDeleteData, nil) + Register("GET", dbrest.XormDataRestUri, dbrest.ExtDatabaseGetData, nil) + Register("POST", dbrest.XormDataRestUri, dbrest.ExtDatabaseInsertData, nil) + Register("PUT", dbrest.XormDataRestUri, dbrest.ExtDatabaseUpdateData, nil) + Register("DELETE", dbrest.XormDataRestUri, dbrest.ExtDatabaseDeleteData, nil) + Register("GET", dbrest.XormExtDataUri, dbrest.ExtDatabaseGetData, nil) Register("POST", dbrest.XormExtDataUri, dbrest.ExtDatabaseInsertData, nil) Register("PUT", dbrest.XormExtDataUri, dbrest.ExtDatabaseUpdateData, nil) @@ -247,11 +252,29 @@ func init() { // AAAA Register("GET", aaaa.CustomUriAAAASSO, aaaa.GetSSOFromAAAA, nil) - // UEInfo + // UEInfo: SMF Register("GET", ue.UriUEInfo, ue.GetUEInfoFromNF, nil) Register("GET", ue.CustomUriUEInfo, ue.GetUEInfoFromNF, nil) - // UEInfo + // UEInfo: PCF + Register("GET", ue.UriPCFUser, ue.GetUEInfoFromNF, nil) + Register("GET", ue.CustomUriPCFUser, ue.GetUEInfoFromNF, nil) + Register("POST", ue.UriPCFUser, ue.PostPCFUserInfo, nil) + Register("POST", ue.CustomUriPCFUser, ue.PostPCFUserInfo, nil) + Register("PUT", ue.UriPCFUser, ue.PutPCFUserInfo, nil) + Register("PUT", ue.CustomUriPCFUser, ue.PutPCFUserInfo, nil) + Register("DELETE", ue.UriPCFUser, ue.DeletePCFUserInfo, nil) + Register("DELETE", ue.CustomUriPCFUser, ue.DeletePCFUserInfo, nil) + + // PCFUEInfo: batch add/modify/delete + Register("POST", ue.UriPCFUserM, ue.PostPCFUserInfo, nil) + Register("POST", ue.CustomUriPCFUserM, ue.PostPCFUserInfo, nil) + Register("PUT", ue.UriPCFUserM, ue.PutPCFUserInfo, nil) + Register("PUT", ue.CustomUriPCFUserM, ue.PutPCFUserInfo, nil) + Register("DELETE", ue.UriPCFUserM, ue.DeletePCFUserInfo, nil) + Register("DELETE", ue.CustomUriPCFUserM, ue.DeletePCFUserInfo, nil) + + // UE Number Register("GET", ue.UriUENum, ue.GetUENumFromNF, nil) Register("GET", ue.CustomUriUENum, ue.GetUENumFromNF, nil) diff --git a/lib/services/services.go b/lib/services/services.go index 4024e90..a5deefa 100644 --- a/lib/services/services.go +++ b/lib/services/services.go @@ -38,6 +38,8 @@ type DataResponse struct { Data interface{} `json:"data"` } +type MapResponse map[string]any + type NullResponse struct { nil interface{} } diff --git a/restagent/config/config.go b/restagent/config/config.go index 91711ed..c4281b7 100644 --- a/restagent/config/config.go +++ b/restagent/config/config.go @@ -100,12 +100,13 @@ type YamlConfig struct { } `yaml:"alarm"` MML struct { - Port int `yaml:"port"` - Sleep int64 `yaml:"sleep"` - User string `yaml:"user"` - Password string `ymal:"password"` - MmlHome string `yaml:"mmlHome"` - Upload string `yaml:"upload"` + Port int `yaml:"port"` + Sleep int64 `yaml:"sleep"` + User string `yaml:"user"` + Password string `ymal:"password"` + MmlHome string `yaml:"mmlHome"` + Upload string `yaml:"upload"` + UpfHeaderLength int `yaml:"upfHeaderLength"` } `yaml:"mml"` NE struct { diff --git a/restagent/etc/restconf.yaml b/restagent/etc/restconf.yaml index dd08a52..8bfb473 100644 --- a/restagent/etc/restconf.yaml +++ b/restagent/etc/restconf.yaml @@ -16,7 +16,7 @@ rest: port: 3040 - ipv4: 0.0.0.0 ipv6: - port: 4443 + port: 3443 scheme: https caFile: ./etc/certs/rootca.crt certFile: ./etc/certs/tsa-omc.crt @@ -28,7 +28,7 @@ webServer: listen: - addr: :80 schema: http - - addr: :8443 + - addr: :443 scheme: https caFile: ./etc/certs/rootca.crt certFile: ./etc/certs/tsa-omc.crt @@ -64,6 +64,7 @@ redis: # 多个数据源时可以用这个指定默认的数据源 defaultDataSourceName: "default" +# upfHeaderLength: spare upf buffer, must destroy mml: port: 4100 sleep: 200 @@ -71,6 +72,7 @@ mml: password: admin mmlHome: ./mmlhome upload: /home/agtuser + upfHeaderLength: 2335 # NE config ne: @@ -80,8 +82,9 @@ ne: omcdir: /usr/local/omc scpdir: /tmp licensedir: /usr/local/etc/{neType}/license - # backup etc list of IMS + # backup etc list of IMS,no space etcListIMS: '{*.yaml,mmtel,vars.cfg}' + etcListDefault: '{*.yaml,*.conf,*.cfg}' # chk2ne: true/false, if put OmcNeConfig parameters to NE omc: diff --git a/src/framework/config/config/config.default.yaml b/src/framework/config/config/config.default.yaml index 8624438..db223dd 100644 --- a/src/framework/config/config/config.default.yaml +++ b/src/framework/config/config/config.default.yaml @@ -112,7 +112,7 @@ security: refererWhiteList: - "127.0.0.1:3030" xframe: - enable: true + enable: false value: "SAMEORIGIN" csp: enable: true diff --git a/src/modules/common/controller/account.go b/src/modules/common/controller/account.go index 15eeeef..b5730c7 100644 --- a/src/modules/common/controller/account.go +++ b/src/modules/common/controller/account.go @@ -54,12 +54,11 @@ func (s *AccountController) Login(c *gin.Context) { ) // 根据错误信息,创建系统访问记录 if err != nil { - msg := i18n.TKey(language, err.Error()) s.sysLogLoginService.CreateSysLogLogin( - loginBody.Username, commonConstants.STATUS_NO, msg+loginBody.Code, + loginBody.Username, commonConstants.STATUS_NO, err.Error(), ipaddr, location, os, browser, ) - c.JSON(200, result.ErrMsg(msg)) + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) return } @@ -78,9 +77,8 @@ func (s *AccountController) Login(c *gin.Context) { } else { s.accountService.UpdateLoginDateAndIP(&loginUser) // 登录成功 - msg := i18n.TKey(language, "app.common.loginSuccess") s.sysLogLoginService.CreateSysLogLogin( - loginBody.Username, commonConstants.STATUS_YES, msg, + loginBody.Username, commonConstants.STATUS_YES, "app.common.loginSuccess", ipaddr, location, os, browser, ) } @@ -152,7 +150,6 @@ func (s *AccountController) Router(c *gin.Context) { // POST /logout func (s *AccountController) Logout(c *gin.Context) { language := ctx.AcceptLanguage(c) - msg := i18n.TKey(language, "app.common.logoutSuccess") tokenStr := ctx.Authorization(c) if tokenStr != "" { // 存在token时记录退出信息 @@ -165,11 +162,11 @@ func (s *AccountController) Logout(c *gin.Context) { // 创建系统访问记录 退出成功 s.sysLogLoginService.CreateSysLogLogin( - userName, commonConstants.STATUS_YES, msg, + userName, commonConstants.STATUS_YES, "app.common.logoutSuccess", ipaddr, location, os, browser, ) } } - c.JSON(200, result.OkMsg(msg)) + c.JSON(200, result.OkMsg(i18n.TKey(language, "app.common.logoutSuccess"))) } diff --git a/src/modules/common/controller/register.go b/src/modules/common/controller/register.go index 484a47f..85fa828 100644 --- a/src/modules/common/controller/register.go +++ b/src/modules/common/controller/register.go @@ -68,9 +68,8 @@ func (s *RegisterController) Register(c *gin.Context) { ) // 根据错误信息,创建系统访问记录 if err != nil { - msg := err.Error() + " " + registerBody.Code s.sysLogLoginService.CreateSysLogLogin( - registerBody.Username, commonConstants.STATUS_NO, msg, + registerBody.Username, commonConstants.STATUS_NO, err.Error(), ipaddr, location, os, browser, ) c.JSON(200, result.ErrMsg(err.Error())) diff --git a/src/modules/network_element/service/udm_auth.impl.go b/src/modules/network_element/service/udm_auth.impl.go index ed7cc4a..75a051a 100644 --- a/src/modules/network_element/service/udm_auth.impl.go +++ b/src/modules/network_element/service/udm_auth.impl.go @@ -113,6 +113,9 @@ func (r *UDMAuthImpl) InsertCSV(neID string, data []map[string]string) int64 { prefixes := make(map[string]struct{}) for _, v := range data { imsi := v["imsi"] + if len(imsi) < 5 { + continue + } prefix := imsi[:len(imsi)-4] prefixes[prefix] = struct{}{} } @@ -133,6 +136,9 @@ func (r *UDMAuthImpl) InsertTxt(neID string, data [][]string) int64 { prefixes := make(map[string]struct{}) for _, v := range data { imsi := v[0] + if len(imsi) < 5 { + continue + } prefix := imsi[:len(imsi)-4] prefixes[prefix] = struct{}{} } diff --git a/src/modules/network_element/service/udm_sub.impl.go b/src/modules/network_element/service/udm_sub.impl.go index 617a0a3..45fc5cd 100644 --- a/src/modules/network_element/service/udm_sub.impl.go +++ b/src/modules/network_element/service/udm_sub.impl.go @@ -129,6 +129,9 @@ func (r *UDMSubImpl) InsertCSV(neID string, data []map[string]string) int64 { prefixes := make(map[string]struct{}) for _, v := range data { imsi := v["imsi"] + if len(imsi) < 5 { + continue + } prefix := imsi[:len(imsi)-4] prefixes[prefix] = struct{}{} } @@ -149,6 +152,9 @@ func (r *UDMSubImpl) InsertTxt(neID string, data [][]string) int64 { prefixes := make(map[string]struct{}) for _, v := range data { imsi := v[0] + if len(imsi) < 5 { + continue + } prefix := imsi[:len(imsi)-4] prefixes[prefix] = struct{}{} } diff --git a/src/modules/system/controller/sys_log_login.go b/src/modules/system/controller/sys_log_login.go index 4494103..294bb9c 100644 --- a/src/modules/system/controller/sys_log_login.go +++ b/src/modules/system/controller/sys_log_login.go @@ -50,6 +50,7 @@ func (s *SysLogLoginController) List(c *gin.Context) { (*arr)[i].LoginLocation = i18n.TKey(language, (*arr)[i].LoginLocation) (*arr)[i].OS = i18n.TKey(language, (*arr)[i].OS) (*arr)[i].Browser = i18n.TKey(language, (*arr)[i].Browser) + (*arr)[i].Msg = i18n.TKey(language, (*arr)[i].Msg) } } converI18n(language, &rows) @@ -135,6 +136,7 @@ func (s *SysLogLoginController) Export(c *gin.Context) { (*arr)[i].LoginLocation = i18n.TKey(language, (*arr)[i].LoginLocation) (*arr)[i].OS = i18n.TKey(language, (*arr)[i].OS) (*arr)[i].Browser = i18n.TKey(language, (*arr)[i].Browser) + (*arr)[i].Msg = i18n.TKey(language, (*arr)[i].Msg) } } converI18n(language, &rows)