1
0

marge: 合并代码

This commit is contained in:
TsMask
2023-11-30 17:24:43 +08:00
parent 3df3b5b5f7
commit 3c56f1ae36
14 changed files with 353 additions and 74 deletions

13
.vscode/launch.json vendored
View File

@@ -10,14 +10,15 @@
"request": "launch", "request": "launch",
"mode": "debug", "mode": "debug",
"program": "./restagent/restagent.go", "program": "./restagent/restagent.go",
"console": "integratedTerminal" "console": "integratedTerminal",
"args": ["--env", "local"] // 走开发配置
}, },
{ {
"name": "DEBUG restagent", "name": "DEBUG restagent",
"type": "go", "type": "go",
"request": "launch", "request": "launch",
"mode": "debug", "mode": "debug",
"program": "d:/local.git/ems.agt/restagent/restagent.go", "program": "d:/local.git/ems.agt/restagent/",
"console": "integratedTerminal" "console": "integratedTerminal"
}, },
{ {
@@ -36,6 +37,14 @@
"program": "d:/local.git/ems.agt/tools/loadpconf", "program": "d:/local.git/ems.agt/tools/loadpconf",
"args": ["-p","../../config/param/upf_param_config.yaml"], "args": ["-p","../../config/param/upf_param_config.yaml"],
"console": "integratedTerminal" "console": "integratedTerminal"
},
{
"name": "debug crontask",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "d:/local.git/ems.agt/crontask",
"console": "integratedTerminal"
} }
] ]
} }

View File

@@ -44,6 +44,7 @@ var (
XormCommonUri = config.DefaultUriPrefix + "/databaseManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for internal XormCommonUri = config.DefaultUriPrefix + "/databaseManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for internal
XormDatabaseUri = config.DefaultUriPrefix + "/database/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for crontask XormDatabaseUri = config.DefaultUriPrefix + "/database/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for crontask
XormDataRestUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}"
XormExtDataUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external XormExtDataUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external
XormDataSQLUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external XormDataSQLUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external

View File

@@ -6,6 +6,7 @@ import (
"io" "io"
"net" "net"
"net/http" "net/http"
"regexp"
"strings" "strings"
"time" "time"
@@ -137,28 +138,18 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
mmlRequest := new(MMLRequest) mmlRequest := new(MMLRequest)
_ = json.Unmarshal(body, mmlRequest) _ = json.Unmarshal(body, mmlRequest)
n, err = conn.Read(buf[0:]) // 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))
// if err != nil { // if err != nil {
// log.Error("Failed to write:", err) // log.Error("Failed to read:", err)
// mmlResult = append(mmlResult, err.Error()) // mmlResult = append(mmlResult, err.Error())
// response := Response{mmlResult} // response := Response{mmlResult}
// services.ResponseWithJson(w, http.StatusOK, response) // services.ResponseWithJson(w, http.StatusOK, response)
// return // 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 { if err != nil {
log.Error("Failed to write:", err) log.Error("Failed to write:", err)
mmlResult = append(mmlResult, err.Error()) mmlResult = append(mmlResult, err.Error())
@@ -166,9 +157,19 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
services.ResponseWithJson(w, http.StatusOK, response) services.ResponseWithJson(w, http.StatusOK, response)
return 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.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:]) // n, err = conn.Read(buf[0:])
// if err != nil { // if err != nil {
// log.Error("Failed to read:", err) // log.Error("Failed to read:", err)
@@ -179,17 +180,17 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
// } // }
// log.Debug(string(buf[0:n])) // log.Debug(string(buf[0:n]))
n, err = conn.Write([]byte(config.GetYamlConfig().MML.Password + "\n")) // n, err = conn.Write([]byte(config.GetYamlConfig().MML.Password + "\n"))
if err != nil { // if err != nil {
log.Error("Failed to write:", err) // log.Error("Failed to write:", err)
mmlResult = append(mmlResult, err.Error()) // mmlResult = append(mmlResult, err.Error())
response := Response{mmlResult} // response := Response{mmlResult}
services.ResponseWithJson(w, http.StatusOK, response) // services.ResponseWithJson(w, http.StatusOK, response)
return // return
} // }
log.Debug(string(buf[0:n])) // 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:]) // n, err = conn.Read(buf[0:])
// if err != nil { // if err != nil {
@@ -214,19 +215,28 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
} }
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
// n, err = conn.Read(buf[0:]) n, err = conn.Read(buf[0:])
// if err != nil { if err != nil {
// log.Error("Failed to read:", err) log.Error("Failed to read:", err)
// mmlResult = append(mmlResult, err.Error()) mmlResult = append(mmlResult, err.Error())
// response := Response{mmlResult} response := Response{mmlResult}
// services.ResponseWithJson(w, http.StatusOK, response) services.ResponseWithJson(w, http.StatusOK, response)
// return return
// } }
// log.Trace(string(buf[0 : n-len(neType)-2])) 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]`)
// 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 // 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: default:
loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) 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 return
} }
log.Trace(string(buf[0 : n-len(neType)-2])) 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)
} }
} }
} }

View File

@@ -3,6 +3,7 @@ package ue
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io"
"net/http" "net/http"
"time" "time"
@@ -74,10 +75,14 @@ var (
UriNBInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" UriNBInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo"
UriUEInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" UriUEInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo"
UriUENum = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" 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" CustomUriNBInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo"
CustomUriUEInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" CustomUriUEInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo"
CustomUriUENum = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" 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() var client = resty.New()
@@ -153,7 +158,216 @@ func GetUEInfoFromNF(w http.ResponseWriter, r *http.Request) {
services.ResponseInternalServerError500ProcessError(w, err) services.ResponseInternalServerError500ProcessError(w, err)
return return
} else { } 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) _ = json.Unmarshal(resp.Body(), &response)
services.ResponseWithJson(w, resp.StatusCode(), response) services.ResponseWithJson(w, resp.StatusCode(), response)
return return
@@ -217,7 +431,7 @@ func GetUENumFromNF(w http.ResponseWriter, r *http.Request) {
services.ResponseInternalServerError500ProcessError(w, err) services.ResponseInternalServerError500ProcessError(w, err)
return return
} else { } else {
var response services.DataResponse var response services.MapResponse
_ = json.Unmarshal(resp.Body(), &response) _ = json.Unmarshal(resp.Body(), &response)
services.ResponseWithJson(w, resp.StatusCode(), response) services.ResponseWithJson(w, resp.StatusCode(), response)
return return
@@ -281,7 +495,7 @@ func GetNBInfoFromNF(w http.ResponseWriter, r *http.Request) {
services.ResponseInternalServerError500ProcessError(w, err) services.ResponseInternalServerError500ProcessError(w, err)
return return
} else { } else {
var response services.DataResponse var response services.MapResponse
_ = json.Unmarshal(resp.Body(), &response) _ = json.Unmarshal(resp.Body(), &response)
services.ResponseWithJson(w, resp.StatusCode(), response) services.ResponseWithJson(w, resp.StatusCode(), response)
return return

View File

@@ -99,6 +99,11 @@ func init() {
Register("PUT", dbrest.CustomXormCommonUri, dbrest.DatabaseUpdateData, nil) Register("PUT", dbrest.CustomXormCommonUri, dbrest.DatabaseUpdateData, nil)
Register("DELETE", dbrest.CustomXormCommonUri, dbrest.DatabaseDeleteData, 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("GET", dbrest.XormExtDataUri, dbrest.ExtDatabaseGetData, nil)
Register("POST", dbrest.XormExtDataUri, dbrest.ExtDatabaseInsertData, nil) Register("POST", dbrest.XormExtDataUri, dbrest.ExtDatabaseInsertData, nil)
Register("PUT", dbrest.XormExtDataUri, dbrest.ExtDatabaseUpdateData, nil) Register("PUT", dbrest.XormExtDataUri, dbrest.ExtDatabaseUpdateData, nil)
@@ -247,11 +252,29 @@ func init() {
// AAAA // AAAA
Register("GET", aaaa.CustomUriAAAASSO, aaaa.GetSSOFromAAAA, nil) Register("GET", aaaa.CustomUriAAAASSO, aaaa.GetSSOFromAAAA, nil)
// UEInfo // UEInfo: SMF
Register("GET", ue.UriUEInfo, ue.GetUEInfoFromNF, nil) Register("GET", ue.UriUEInfo, ue.GetUEInfoFromNF, nil)
Register("GET", ue.CustomUriUEInfo, 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.UriUENum, ue.GetUENumFromNF, nil)
Register("GET", ue.CustomUriUENum, ue.GetUENumFromNF, nil) Register("GET", ue.CustomUriUENum, ue.GetUENumFromNF, nil)

View File

@@ -38,6 +38,8 @@ type DataResponse struct {
Data interface{} `json:"data"` Data interface{} `json:"data"`
} }
type MapResponse map[string]any
type NullResponse struct { type NullResponse struct {
nil interface{} nil interface{}
} }

View File

@@ -106,6 +106,7 @@ type YamlConfig struct {
Password string `ymal:"password"` Password string `ymal:"password"`
MmlHome string `yaml:"mmlHome"` MmlHome string `yaml:"mmlHome"`
Upload string `yaml:"upload"` Upload string `yaml:"upload"`
UpfHeaderLength int `yaml:"upfHeaderLength"`
} `yaml:"mml"` } `yaml:"mml"`
NE struct { NE struct {

View File

@@ -16,7 +16,7 @@ rest:
port: 3040 port: 3040
- ipv4: 0.0.0.0 - ipv4: 0.0.0.0
ipv6: ipv6:
port: 4443 port: 3443
scheme: https scheme: https
caFile: ./etc/certs/rootca.crt caFile: ./etc/certs/rootca.crt
certFile: ./etc/certs/tsa-omc.crt certFile: ./etc/certs/tsa-omc.crt
@@ -28,7 +28,7 @@ webServer:
listen: listen:
- addr: :80 - addr: :80
schema: http schema: http
- addr: :8443 - addr: :443
scheme: https scheme: https
caFile: ./etc/certs/rootca.crt caFile: ./etc/certs/rootca.crt
certFile: ./etc/certs/tsa-omc.crt certFile: ./etc/certs/tsa-omc.crt
@@ -64,6 +64,7 @@ redis:
# 多个数据源时可以用这个指定默认的数据源 # 多个数据源时可以用这个指定默认的数据源
defaultDataSourceName: "default" defaultDataSourceName: "default"
# upfHeaderLength: spare upf buffer, must destroy
mml: mml:
port: 4100 port: 4100
sleep: 200 sleep: 200
@@ -71,6 +72,7 @@ mml:
password: admin password: admin
mmlHome: ./mmlhome mmlHome: ./mmlhome
upload: /home/agtuser upload: /home/agtuser
upfHeaderLength: 2335
# NE config # NE config
ne: ne:
@@ -80,8 +82,9 @@ ne:
omcdir: /usr/local/omc omcdir: /usr/local/omc
scpdir: /tmp scpdir: /tmp
licensedir: /usr/local/etc/{neType}/license licensedir: /usr/local/etc/{neType}/license
# backup etc list of IMS # backup etc list of IMS,no space
etcListIMS: '{*.yaml,mmtel,vars.cfg}' etcListIMS: '{*.yaml,mmtel,vars.cfg}'
etcListDefault: '{*.yaml,*.conf,*.cfg}'
# chk2ne: true/false, if put OmcNeConfig parameters to NE # chk2ne: true/false, if put OmcNeConfig parameters to NE
omc: omc:

View File

@@ -112,7 +112,7 @@ security:
refererWhiteList: refererWhiteList:
- "127.0.0.1:3030" - "127.0.0.1:3030"
xframe: xframe:
enable: true enable: false
value: "SAMEORIGIN" value: "SAMEORIGIN"
csp: csp:
enable: true enable: true

View File

@@ -54,12 +54,11 @@ func (s *AccountController) Login(c *gin.Context) {
) )
// 根据错误信息,创建系统访问记录 // 根据错误信息,创建系统访问记录
if err != nil { if err != nil {
msg := i18n.TKey(language, err.Error())
s.sysLogLoginService.CreateSysLogLogin( s.sysLogLoginService.CreateSysLogLogin(
loginBody.Username, commonConstants.STATUS_NO, msg+loginBody.Code, loginBody.Username, commonConstants.STATUS_NO, err.Error(),
ipaddr, location, os, browser, ipaddr, location, os, browser,
) )
c.JSON(200, result.ErrMsg(msg)) c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error())))
return return
} }
@@ -78,9 +77,8 @@ func (s *AccountController) Login(c *gin.Context) {
} else { } else {
s.accountService.UpdateLoginDateAndIP(&loginUser) s.accountService.UpdateLoginDateAndIP(&loginUser)
// 登录成功 // 登录成功
msg := i18n.TKey(language, "app.common.loginSuccess")
s.sysLogLoginService.CreateSysLogLogin( s.sysLogLoginService.CreateSysLogLogin(
loginBody.Username, commonConstants.STATUS_YES, msg, loginBody.Username, commonConstants.STATUS_YES, "app.common.loginSuccess",
ipaddr, location, os, browser, ipaddr, location, os, browser,
) )
} }
@@ -152,7 +150,6 @@ func (s *AccountController) Router(c *gin.Context) {
// POST /logout // POST /logout
func (s *AccountController) Logout(c *gin.Context) { func (s *AccountController) Logout(c *gin.Context) {
language := ctx.AcceptLanguage(c) language := ctx.AcceptLanguage(c)
msg := i18n.TKey(language, "app.common.logoutSuccess")
tokenStr := ctx.Authorization(c) tokenStr := ctx.Authorization(c)
if tokenStr != "" { if tokenStr != "" {
// 存在token时记录退出信息 // 存在token时记录退出信息
@@ -165,11 +162,11 @@ func (s *AccountController) Logout(c *gin.Context) {
// 创建系统访问记录 退出成功 // 创建系统访问记录 退出成功
s.sysLogLoginService.CreateSysLogLogin( s.sysLogLoginService.CreateSysLogLogin(
userName, commonConstants.STATUS_YES, msg, userName, commonConstants.STATUS_YES, "app.common.logoutSuccess",
ipaddr, location, os, browser, ipaddr, location, os, browser,
) )
} }
} }
c.JSON(200, result.OkMsg(msg)) c.JSON(200, result.OkMsg(i18n.TKey(language, "app.common.logoutSuccess")))
} }

View File

@@ -68,9 +68,8 @@ func (s *RegisterController) Register(c *gin.Context) {
) )
// 根据错误信息,创建系统访问记录 // 根据错误信息,创建系统访问记录
if err != nil { if err != nil {
msg := err.Error() + " " + registerBody.Code
s.sysLogLoginService.CreateSysLogLogin( s.sysLogLoginService.CreateSysLogLogin(
registerBody.Username, commonConstants.STATUS_NO, msg, registerBody.Username, commonConstants.STATUS_NO, err.Error(),
ipaddr, location, os, browser, ipaddr, location, os, browser,
) )
c.JSON(200, result.ErrMsg(err.Error())) c.JSON(200, result.ErrMsg(err.Error()))

View File

@@ -113,6 +113,9 @@ func (r *UDMAuthImpl) InsertCSV(neID string, data []map[string]string) int64 {
prefixes := make(map[string]struct{}) prefixes := make(map[string]struct{})
for _, v := range data { for _, v := range data {
imsi := v["imsi"] imsi := v["imsi"]
if len(imsi) < 5 {
continue
}
prefix := imsi[:len(imsi)-4] prefix := imsi[:len(imsi)-4]
prefixes[prefix] = struct{}{} prefixes[prefix] = struct{}{}
} }
@@ -133,6 +136,9 @@ func (r *UDMAuthImpl) InsertTxt(neID string, data [][]string) int64 {
prefixes := make(map[string]struct{}) prefixes := make(map[string]struct{})
for _, v := range data { for _, v := range data {
imsi := v[0] imsi := v[0]
if len(imsi) < 5 {
continue
}
prefix := imsi[:len(imsi)-4] prefix := imsi[:len(imsi)-4]
prefixes[prefix] = struct{}{} prefixes[prefix] = struct{}{}
} }

View File

@@ -129,6 +129,9 @@ func (r *UDMSubImpl) InsertCSV(neID string, data []map[string]string) int64 {
prefixes := make(map[string]struct{}) prefixes := make(map[string]struct{})
for _, v := range data { for _, v := range data {
imsi := v["imsi"] imsi := v["imsi"]
if len(imsi) < 5 {
continue
}
prefix := imsi[:len(imsi)-4] prefix := imsi[:len(imsi)-4]
prefixes[prefix] = struct{}{} prefixes[prefix] = struct{}{}
} }
@@ -149,6 +152,9 @@ func (r *UDMSubImpl) InsertTxt(neID string, data [][]string) int64 {
prefixes := make(map[string]struct{}) prefixes := make(map[string]struct{})
for _, v := range data { for _, v := range data {
imsi := v[0] imsi := v[0]
if len(imsi) < 5 {
continue
}
prefix := imsi[:len(imsi)-4] prefix := imsi[:len(imsi)-4]
prefixes[prefix] = struct{}{} prefixes[prefix] = struct{}{}
} }

View File

@@ -50,6 +50,7 @@ func (s *SysLogLoginController) List(c *gin.Context) {
(*arr)[i].LoginLocation = i18n.TKey(language, (*arr)[i].LoginLocation) (*arr)[i].LoginLocation = i18n.TKey(language, (*arr)[i].LoginLocation)
(*arr)[i].OS = i18n.TKey(language, (*arr)[i].OS) (*arr)[i].OS = i18n.TKey(language, (*arr)[i].OS)
(*arr)[i].Browser = i18n.TKey(language, (*arr)[i].Browser) (*arr)[i].Browser = i18n.TKey(language, (*arr)[i].Browser)
(*arr)[i].Msg = i18n.TKey(language, (*arr)[i].Msg)
} }
} }
converI18n(language, &rows) 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].LoginLocation = i18n.TKey(language, (*arr)[i].LoginLocation)
(*arr)[i].OS = i18n.TKey(language, (*arr)[i].OS) (*arr)[i].OS = i18n.TKey(language, (*arr)[i].OS)
(*arr)[i].Browser = i18n.TKey(language, (*arr)[i].Browser) (*arr)[i].Browser = i18n.TKey(language, (*arr)[i].Browser)
(*arr)[i].Msg = i18n.TKey(language, (*arr)[i].Msg)
} }
} }
converI18n(language, &rows) converI18n(language, &rows)