feat: 更新代码
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
# Local History for Visual Studio Code
|
# Local History for Visual Studio Code
|
||||||
.history/
|
.history/
|
||||||
|
.idea/
|
||||||
|
|
||||||
# Run temp file and dir
|
# Run temp file and dir
|
||||||
crontask/log/
|
crontask/log/
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ func TcpdumpNeTask(w http.ResponseWriter, r *http.Request) {
|
|||||||
filePcapName := fmt.Sprintf("tmp_%s_%s_%d.pcap", body.NeType, body.NeId, time.Now().UnixMilli())
|
filePcapName := fmt.Sprintf("tmp_%s_%s_%d.pcap", body.NeType, body.NeId, time.Now().UnixMilli())
|
||||||
fileLogName := fmt.Sprintf("tmp_%s_%s_%d.log", body.NeType, body.NeId, time.Now().UnixMilli())
|
fileLogName := fmt.Sprintf("tmp_%s_%s_%d.log", body.NeType, body.NeId, time.Now().UnixMilli())
|
||||||
writeLog := fmt.Sprintf(" >> %s 2>&1 \ncat %s", fileLogName, fileLogName) // 执行信息写入日志文件,放置弹出code 127
|
writeLog := fmt.Sprintf(" >> %s 2>&1 \ncat %s", fileLogName, fileLogName) // 执行信息写入日志文件,放置弹出code 127
|
||||||
cmdStr := fmt.Sprintf("cd /tmp \n%stimeout %d tcpdump -i any %s -s0 -w %s", cmd.SudoHandleCmd(), body.Timeout, body.Cmd, filePcapName)
|
cmdStr := fmt.Sprintf("cd /tmp \nsudo timeout %d tcpdump -i any %s -s0 -w %s", body.Timeout, body.Cmd, filePcapName)
|
||||||
usernameNe := conf.Get("ne.user").(string) // 网元统一用户
|
usernameNe := conf.Get("ne.user").(string) // 网元统一用户
|
||||||
sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.Ip)
|
sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.Ip)
|
||||||
msg, err := cmd.ExecWithCheck("ssh", sshHost, cmdStr+writeLog)
|
msg, err := cmd.ExecWithCheck("ssh", sshHost, cmdStr+writeLog)
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import (
|
|||||||
"ems.agt/lib/midware"
|
"ems.agt/lib/midware"
|
||||||
"ems.agt/lib/services"
|
"ems.agt/lib/services"
|
||||||
"ems.agt/restagent/config"
|
"ems.agt/restagent/config"
|
||||||
|
"ems.agt/src/framework/middleware/collectlogs"
|
||||||
)
|
)
|
||||||
|
|
||||||
// UDM 用户信息接口添加到路由
|
// UDM 用户信息接口添加到路由
|
||||||
@@ -31,7 +32,7 @@ func Routers() []services.RouterItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rs := [...]services.RouterItem{
|
rs := [...]services.RouterItem{
|
||||||
// UDM签约用户
|
// UDM鉴权用户
|
||||||
{
|
{
|
||||||
Method: "GET",
|
Method: "GET",
|
||||||
Pattern: "/auths",
|
Pattern: "/auths",
|
||||||
@@ -42,7 +43,7 @@ func Routers() []services.RouterItem {
|
|||||||
Method: "POST",
|
Method: "POST",
|
||||||
Pattern: "/authSave/{neId}",
|
Pattern: "/authSave/{neId}",
|
||||||
Handler: apis.UdmAuthUserSave,
|
Handler: apis.UdmAuthUserSave,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "GET",
|
Method: "GET",
|
||||||
@@ -54,43 +55,43 @@ func Routers() []services.RouterItem {
|
|||||||
Method: "POST",
|
Method: "POST",
|
||||||
Pattern: "/auth/{neId}",
|
Pattern: "/auth/{neId}",
|
||||||
Handler: apis.UdmAuthUserAdd,
|
Handler: apis.UdmAuthUserAdd,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "POST",
|
Method: "POST",
|
||||||
Pattern: "/auth/{neId}/{num}",
|
Pattern: "/auth/{neId}/{num}",
|
||||||
Handler: apis.UdmAuthUserAdds,
|
Handler: apis.UdmAuthUserAdds,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "PUT",
|
Method: "PUT",
|
||||||
Pattern: "/auth/{neId}",
|
Pattern: "/auth/{neId}",
|
||||||
Handler: apis.UdmAuthUserEdit,
|
Handler: apis.UdmAuthUserEdit,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_UPDATE)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "DELETE",
|
Method: "DELETE",
|
||||||
Pattern: "/auth/{neId}/{imsi}",
|
Pattern: "/auth/{neId}/{imsi}",
|
||||||
Handler: apis.UdmAuthUserRemove,
|
Handler: apis.UdmAuthUserRemove,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "DELETE",
|
Method: "DELETE",
|
||||||
Pattern: "/auth/{neId}/{imsi}/{num}",
|
Pattern: "/auth/{neId}/{imsi}/{num}",
|
||||||
Handler: apis.UdmAuthUserRemoves,
|
Handler: apis.UdmAuthUserRemoves,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "POST",
|
Method: "POST",
|
||||||
Pattern: "/authExport",
|
Pattern: "/authExport",
|
||||||
Handler: apis.UdmAuthUserExport,
|
Handler: apis.UdmAuthUserExport,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_EXPORT)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "POST",
|
Method: "POST",
|
||||||
Pattern: "/authImport/{neId}",
|
Pattern: "/authImport/{neId}",
|
||||||
Handler: apis.UdmAuthUserImport,
|
Handler: apis.UdmAuthUserImport,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_IMPORT)),
|
||||||
},
|
},
|
||||||
// UDM签约用户
|
// UDM签约用户
|
||||||
{
|
{
|
||||||
@@ -103,7 +104,7 @@ func Routers() []services.RouterItem {
|
|||||||
Method: "POST",
|
Method: "POST",
|
||||||
Pattern: "/subSave/{neId}",
|
Pattern: "/subSave/{neId}",
|
||||||
Handler: apis.UdmSubUserSave,
|
Handler: apis.UdmSubUserSave,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM contracted users", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "GET",
|
Method: "GET",
|
||||||
@@ -115,55 +116,55 @@ func Routers() []services.RouterItem {
|
|||||||
Method: "POST",
|
Method: "POST",
|
||||||
Pattern: "/sub/{neId}",
|
Pattern: "/sub/{neId}",
|
||||||
Handler: apis.UdmSubUserAdd,
|
Handler: apis.UdmSubUserAdd,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM contracted users", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "POST",
|
Method: "POST",
|
||||||
Pattern: "/sub/{neId}/{num}",
|
Pattern: "/sub/{neId}/{num}",
|
||||||
Handler: apis.UdmSubUserAdds,
|
Handler: apis.UdmSubUserAdds,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM contracted users", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "PUT",
|
Method: "PUT",
|
||||||
Pattern: "/sub/{neId}",
|
Pattern: "/sub/{neId}",
|
||||||
Handler: apis.UdmSubUserEdit,
|
Handler: apis.UdmSubUserEdit,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM contracted users", collectlogs.BUSINESS_TYPE_UPDATE)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "PUT",
|
Method: "PUT",
|
||||||
Pattern: "/sub4gIP/{neId}",
|
Pattern: "/sub4gIP/{neId}",
|
||||||
Handler: apis.UdmSubUser4GIP,
|
Handler: apis.UdmSubUser4GIP,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM contracted users", collectlogs.BUSINESS_TYPE_UPDATE)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "PUT",
|
Method: "PUT",
|
||||||
Pattern: "/subSmData/{neId}",
|
Pattern: "/subSmData/{neId}",
|
||||||
Handler: apis.UdmSubUserSmData,
|
Handler: apis.UdmSubUserSmData,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM contracted users", collectlogs.BUSINESS_TYPE_UPDATE)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "DELETE",
|
Method: "DELETE",
|
||||||
Pattern: "/sub/{neId}/{imsi}",
|
Pattern: "/sub/{neId}/{imsi}",
|
||||||
Handler: apis.UdmSubUserRemove,
|
Handler: apis.UdmSubUserRemove,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM contracted users", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "DELETE",
|
Method: "DELETE",
|
||||||
Pattern: "/sub/{neId}/{imsi}/{num}",
|
Pattern: "/sub/{neId}/{imsi}/{num}",
|
||||||
Handler: apis.UdmSubUserRemoves,
|
Handler: apis.UdmSubUserRemoves,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM contracted users", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "POST",
|
Method: "POST",
|
||||||
Pattern: "/subExport",
|
Pattern: "/subExport",
|
||||||
Handler: apis.UdmSubUserExport,
|
Handler: apis.UdmSubUserExport,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM contracted users", collectlogs.BUSINESS_TYPE_EXPORT)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: "POST",
|
Method: "POST",
|
||||||
Pattern: "/subImport/{neId}",
|
Pattern: "/subImport/{neId}",
|
||||||
Handler: apis.UdmSubUserImport,
|
Handler: apis.UdmSubUserImport,
|
||||||
Middleware: midware.Authorize(nil),
|
Middleware: midware.LogOperate(collectlogs.OptionNew("UDM contracted users", collectlogs.BUSINESS_TYPE_IMPORT)),
|
||||||
},
|
},
|
||||||
// 添加更多的 Router 对象...
|
// 添加更多的 Router 对象...
|
||||||
}
|
}
|
||||||
|
|||||||
68
lib/midware/mml_log.go
Normal file
68
lib/midware/mml_log.go
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
package midware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"ems.agt/lib/core/datasource"
|
||||||
|
"ems.agt/lib/core/utils/ctx"
|
||||||
|
"ems.agt/lib/core/utils/date"
|
||||||
|
"ems.agt/lib/dborm"
|
||||||
|
"ems.agt/lib/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
// LogMML mml操作日志搜集
|
||||||
|
func LogMML(next http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// 读取请求体内容
|
||||||
|
body, err := io.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 解析json内参数
|
||||||
|
var bodyArgs map[string]any
|
||||||
|
_ = json.Unmarshal(bytes.Clone(body), &bodyArgs)
|
||||||
|
// 将请求体内容存储在临时缓冲区中
|
||||||
|
buffer := bytes.NewBuffer(body)
|
||||||
|
r.Body = io.NopCloser(buffer)
|
||||||
|
|
||||||
|
next.ServeHTTP(w, r)
|
||||||
|
|
||||||
|
// 收尾存入数据库的参数
|
||||||
|
mmlCmd := bodyArgs["mml"].([]any)[0]
|
||||||
|
ipAddr := strings.Split(r.RemoteAddr, ":")[0]
|
||||||
|
neType := ctx.Param(r, "elementTypeValue")
|
||||||
|
neId := ctx.GetQuery(r, "ne_id")
|
||||||
|
timeStr := date.ParseDateToStr(time.Now(), date.YYYY_MM_DD_HH_MM_SS)
|
||||||
|
|
||||||
|
// 响应内容长度和状态码作为结果
|
||||||
|
str := strings.TrimSuffix(fmt.Sprintf("%v", w), "}")
|
||||||
|
strArr := strings.Split(str, " ")
|
||||||
|
size := strArr[1]
|
||||||
|
status := strArr[2]
|
||||||
|
contentType := w.Header().Get("Content-Type")
|
||||||
|
resultStr := fmt.Sprintf(`{"status":"%s","size":"%s","content-type":"%s"}`, status, size, contentType)
|
||||||
|
|
||||||
|
// 用户名
|
||||||
|
username := "-"
|
||||||
|
accessToken := r.Header.Get("AccessToken")
|
||||||
|
if accessToken != "" {
|
||||||
|
// 验证令牌 == 这里直接查数据库session
|
||||||
|
se, _ := dborm.XormUpdateSessionShakeTime(accessToken)
|
||||||
|
username = se.AccountId
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行插入
|
||||||
|
sql := "insert into mml_log (user,ip,ne_type,ne_id,mml,result,log_time)values(?,?,?,?,?,?,?)"
|
||||||
|
_, sqlerr := datasource.ExecDB("", sql, []any{username, ipAddr, neType, neId, mmlCmd, resultStr, timeStr})
|
||||||
|
if sqlerr != nil {
|
||||||
|
log.Errorf("insert row : %v", err.Error())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
136
lib/midware/operate_log.go
Normal file
136
lib/midware/operate_log.go
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
package midware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"reflect"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"ems.agt/lib/core/utils/parse"
|
||||||
|
"ems.agt/lib/dborm"
|
||||||
|
"ems.agt/src/framework/constants/common"
|
||||||
|
"ems.agt/src/framework/middleware/collectlogs"
|
||||||
|
"ems.agt/src/framework/utils/ip2region"
|
||||||
|
"ems.agt/src/modules/system/model"
|
||||||
|
"ems.agt/src/modules/system/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 敏感属性字段进行掩码
|
||||||
|
var maskProperties []string = []string{
|
||||||
|
"password",
|
||||||
|
"oldPassword",
|
||||||
|
"newPassword",
|
||||||
|
"confirmPassword",
|
||||||
|
}
|
||||||
|
|
||||||
|
// LogOperate 操作日志搜集
|
||||||
|
func LogOperate(options collectlogs.Options) func(http.Handler) http.Handler {
|
||||||
|
return func(next http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
startTime := time.Now()
|
||||||
|
|
||||||
|
// 函数名
|
||||||
|
funcName := runtime.FuncForPC(reflect.ValueOf(next).Pointer()).Name()
|
||||||
|
lastDotIndex := strings.LastIndex(funcName, "/")
|
||||||
|
funcName = funcName[lastDotIndex+1:]
|
||||||
|
|
||||||
|
// 用户名
|
||||||
|
username := "-"
|
||||||
|
accessToken := r.Header.Get("AccessToken")
|
||||||
|
if accessToken != "" {
|
||||||
|
// 验证令牌 == 这里直接查数据库session
|
||||||
|
se, _ := dborm.XormUpdateSessionShakeTime(accessToken)
|
||||||
|
username = se.AccountId
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析ip地址
|
||||||
|
ip := strings.Split(r.RemoteAddr, ":")[0]
|
||||||
|
ipaddr := ip2region.ClientIP(ip)
|
||||||
|
location := ip2region.RealAddressByIp(ipaddr)
|
||||||
|
// 操作日志记录
|
||||||
|
operLog := model.SysLogOperate{
|
||||||
|
Title: options.Title,
|
||||||
|
BusinessType: options.BusinessType,
|
||||||
|
OperatorType: collectlogs.OPERATOR_TYPE_MANAGE,
|
||||||
|
Method: funcName,
|
||||||
|
OperURL: r.RequestURI,
|
||||||
|
RequestMethod: r.Method,
|
||||||
|
OperIP: ipaddr,
|
||||||
|
OperLocation: location,
|
||||||
|
OperName: username,
|
||||||
|
DeptName: "",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 是否需要保存request,参数和值
|
||||||
|
if options.IsSaveRequestData && (r.Method == "POST" || r.Method == "PUT") {
|
||||||
|
// 读取请求体内容
|
||||||
|
body, err := io.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 解析json内参数
|
||||||
|
var bodyArgs map[string]any
|
||||||
|
_ = json.Unmarshal(bytes.Clone(body), &bodyArgs)
|
||||||
|
// 将请求体内容存储在临时缓冲区中
|
||||||
|
buffer := bytes.NewBuffer(body)
|
||||||
|
r.Body = io.NopCloser(buffer)
|
||||||
|
|
||||||
|
params := bodyArgs
|
||||||
|
for k, v := range params {
|
||||||
|
// 敏感属性字段进行掩码
|
||||||
|
for _, s := range maskProperties {
|
||||||
|
if s == k {
|
||||||
|
params[k] = parse.SafeContent(v.(string))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jsonStr, _ := json.Marshal(params)
|
||||||
|
paramsStr := string(jsonStr)
|
||||||
|
if len(paramsStr) > 2000 {
|
||||||
|
paramsStr = paramsStr[:2000]
|
||||||
|
}
|
||||||
|
operLog.OperParam = paramsStr
|
||||||
|
}
|
||||||
|
|
||||||
|
next.ServeHTTP(w, r)
|
||||||
|
|
||||||
|
// 响应内容长度和状态码作为结果
|
||||||
|
str := strings.TrimSuffix(fmt.Sprintf("%v", w), "}")
|
||||||
|
strArr := strings.Split(str, " ")
|
||||||
|
size := strArr[1]
|
||||||
|
status := strArr[2]
|
||||||
|
|
||||||
|
// 响应状态
|
||||||
|
if status == "200" {
|
||||||
|
operLog.Status = common.STATUS_YES
|
||||||
|
} else {
|
||||||
|
operLog.Status = common.STATUS_NO
|
||||||
|
}
|
||||||
|
|
||||||
|
// 是否需要保存response,参数和值
|
||||||
|
if options.IsSaveResponseData {
|
||||||
|
contentDisposition := w.Header().Get("Content-Disposition")
|
||||||
|
contentType := w.Header().Get("Content-Type")
|
||||||
|
content := contentType + contentDisposition
|
||||||
|
msg := fmt.Sprintf(`{"status":"%s","size":"%s","content-type":"%s"}`, status, size, content)
|
||||||
|
operLog.OperMsg = msg
|
||||||
|
}
|
||||||
|
|
||||||
|
// 日志记录时间
|
||||||
|
duration := time.Since(startTime)
|
||||||
|
operLog.CostTime = duration.Milliseconds()
|
||||||
|
operLog.OperTime = time.Now().UnixMilli()
|
||||||
|
|
||||||
|
// 保存操作记录到数据库
|
||||||
|
service.NewSysLogOperateImpl.InsertSysLogOperate(operLog)
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -30,6 +30,7 @@ import (
|
|||||||
"ems.agt/features/ue"
|
"ems.agt/features/ue"
|
||||||
"ems.agt/lib/midware"
|
"ems.agt/lib/midware"
|
||||||
"ems.agt/lib/services"
|
"ems.agt/lib/services"
|
||||||
|
"ems.agt/src/framework/middleware/collectlogs"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
@@ -169,12 +170,12 @@ func init() {
|
|||||||
//ne service action handle
|
//ne service action handle
|
||||||
Register("POST", cm.UriNeInstance, cm.PostNeInstanceAction, nil)
|
Register("POST", cm.UriNeInstance, cm.PostNeInstanceAction, nil)
|
||||||
// Post MML command to NF
|
// Post MML command to NF
|
||||||
Register("POST", mml.UriMML, mml.PostMMLToNF, nil)
|
Register("POST", mml.UriMML, mml.PostMMLToNF, midware.LogMML)
|
||||||
Register("POST", mml.UriMMLDiscard, mml.PostMMLToNF, nil)
|
Register("POST", mml.UriMMLDiscard, mml.PostMMLToNF, nil)
|
||||||
Register("POST", mml.UriOmMmlExt, mml.PostMMLToOMC, nil)
|
Register("POST", mml.UriOmMmlExt, mml.PostMMLToOMC, midware.LogMML)
|
||||||
|
|
||||||
Register("POST", mml.CustomUriMML, mml.PostMMLToNF, nil)
|
Register("POST", mml.CustomUriMML, mml.PostMMLToNF, midware.LogMML)
|
||||||
Register("POST", mml.CustomUriOmMmlExt, mml.PostMMLToOMC, nil)
|
Register("POST", mml.CustomUriOmMmlExt, mml.PostMMLToOMC, midware.LogMML)
|
||||||
// Northbound Get NRM
|
// Northbound Get NRM
|
||||||
Register("GET", nbi.GetNRMUri, nbi.NBIGetNRMFromNF, nil)
|
Register("GET", nbi.GetNRMUri, nbi.NBIGetNRMFromNF, nil)
|
||||||
|
|
||||||
@@ -218,25 +219,25 @@ func init() {
|
|||||||
Register("POST", cm.CustomUriLicense, cm.UploadLicenseFileData, nil)
|
Register("POST", cm.CustomUriLicense, cm.UploadLicenseFileData, nil)
|
||||||
Register("POST", cm.CustomUriLicenseExt, cm.UploadLicenseFileData, nil)
|
Register("POST", cm.CustomUriLicenseExt, cm.UploadLicenseFileData, nil)
|
||||||
|
|
||||||
// Trace management
|
// Trace management 跟踪任务
|
||||||
Register("POST", trace.UriTraceTask, trace.PostTraceTaskToNF, nil)
|
Register("POST", trace.UriTraceTask, trace.PostTraceTaskToNF, midware.LogOperate(collectlogs.OptionNew("Trace Task", collectlogs.BUSINESS_TYPE_INSERT)))
|
||||||
Register("PUT", trace.UriTraceTask, trace.PutTraceTaskToNF, nil)
|
Register("PUT", trace.UriTraceTask, trace.PutTraceTaskToNF, midware.LogOperate(collectlogs.OptionNew("Trace Task", collectlogs.BUSINESS_TYPE_UPDATE)))
|
||||||
Register("DELETE", trace.UriTraceTask, trace.DeleteTraceTaskToNF, nil)
|
Register("DELETE", trace.UriTraceTask, trace.DeleteTraceTaskToNF, midware.LogOperate(collectlogs.OptionNew("Trace Task", collectlogs.BUSINESS_TYPE_DELETE)))
|
||||||
Register("GET", trace.UriTraceDecMsg, trace.ParseRawMsg2Html, nil)
|
Register("GET", trace.UriTraceDecMsg, trace.ParseRawMsg2Html, nil)
|
||||||
|
|
||||||
Register("POST", trace.CustomUriTraceTask, trace.PostTraceTaskToNF, nil)
|
Register("POST", trace.CustomUriTraceTask, trace.PostTraceTaskToNF, nil)
|
||||||
Register("PUT", trace.CustomUriTraceTask, trace.PutTraceTaskToNF, nil)
|
Register("PUT", trace.CustomUriTraceTask, trace.PutTraceTaskToNF, nil)
|
||||||
Register("DELETE", trace.CustomUriTraceTask, trace.DeleteTraceTaskToNF, nil)
|
Register("DELETE", trace.CustomUriTraceTask, trace.DeleteTraceTaskToNF, nil)
|
||||||
|
|
||||||
// 网元发送执行 pcap抓包
|
// 网元发送执行 pcap抓包任务
|
||||||
Register("POST", trace.UriTcpdumpTask, trace.TcpdumpNeTask, midware.Authorize(nil))
|
Register("POST", trace.UriTcpdumpTask, trace.TcpdumpNeTask, midware.LogOperate(collectlogs.OptionNew("Packet capturing task", collectlogs.BUSINESS_TYPE_INSERT)))
|
||||||
Register("POST", trace.CustomUriTcpdumpTask, trace.TcpdumpNeTask, midware.Authorize(nil))
|
Register("POST", trace.CustomUriTcpdumpTask, trace.TcpdumpNeTask, midware.LogOperate(collectlogs.OptionNew("Packet capturing task", collectlogs.BUSINESS_TYPE_INSERT)))
|
||||||
// 网元发送执行 抓包下载pcap文件
|
// 网元发送执行 抓包下载pcap文件
|
||||||
Register("POST", trace.UriTcpdumpPcapDownload, trace.TcpdumpPcapDownload, midware.Authorize(nil))
|
Register("POST", trace.UriTcpdumpPcapDownload, trace.TcpdumpPcapDownload, midware.LogOperate(collectlogs.OptionNew("Packet capturing task", collectlogs.BUSINESS_TYPE_EXPORT)))
|
||||||
Register("POST", trace.CustomUriTcpdumpPcapDownload, trace.TcpdumpPcapDownload, midware.Authorize(nil))
|
Register("POST", trace.CustomUriTcpdumpPcapDownload, trace.TcpdumpPcapDownload, midware.LogOperate(collectlogs.OptionNew("Packet capturing task", collectlogs.BUSINESS_TYPE_EXPORT)))
|
||||||
// 网元发送执行UPF pcap抓包
|
// 网元发送执行UPF pcap抓包
|
||||||
Register("POST", trace.UriTcpdumpNeUPFTask, trace.TcpdumpNeUPFTask, nil)
|
Register("POST", trace.UriTcpdumpNeUPFTask, trace.TcpdumpNeUPFTask, midware.LogOperate(collectlogs.OptionNew("Packet capturing task", collectlogs.BUSINESS_TYPE_INSERT)))
|
||||||
Register("POST", trace.CustomUriTcpdumpNeUPFTask, trace.TcpdumpNeUPFTask, nil)
|
Register("POST", trace.CustomUriTcpdumpNeUPFTask, trace.TcpdumpNeUPFTask, midware.LogOperate(collectlogs.OptionNew("Packet capturing task", collectlogs.BUSINESS_TYPE_INSERT)))
|
||||||
|
|
||||||
// file management
|
// file management
|
||||||
Register("POST", file.UriFile, file.UploadFile, nil)
|
Register("POST", file.UriFile, file.UploadFile, nil)
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ logger:
|
|||||||
# ip: 0.0.0.0 or ::0, support IPv4/v6
|
# ip: 0.0.0.0 or ::0, support IPv4/v6
|
||||||
rest:
|
rest:
|
||||||
- ipv4: 0.0.0.0
|
- ipv4: 0.0.0.0
|
||||||
ipv6: fe80::f6bb:7d5f:bcb2:763b%7
|
ipv6:
|
||||||
port: 3030
|
port: 3030
|
||||||
- ipv4: 0.0.0.0
|
- ipv4: 0.0.0.0
|
||||||
ipv6: fe80::f6bb:7d5f:bcb2:763b%7
|
ipv6:
|
||||||
port: 6060
|
port: 6060
|
||||||
|
|
||||||
database:
|
database:
|
||||||
@@ -33,13 +33,13 @@ redis:
|
|||||||
# OMC系统使用库
|
# OMC系统使用库
|
||||||
default:
|
default:
|
||||||
port: 6379 # Redis port
|
port: 6379 # Redis port
|
||||||
host: "192.168.0.229" # Redis host
|
host: "192.168.2.166" # Redis host
|
||||||
password: ""
|
password: ""
|
||||||
db: 10 # Redis db_num
|
db: 10 # Redis db_num
|
||||||
# UDM网元用户库
|
# UDM网元用户库
|
||||||
udmuser:
|
udmuser:
|
||||||
port: 6379 # Redis port
|
port: 6379 # Redis port
|
||||||
host: "192.168.0.229"
|
host: "192.168.2.166"
|
||||||
password: ""
|
password: ""
|
||||||
db: 0 # Redis db_num
|
db: 0 # Redis db_num
|
||||||
# 多个数据源时可以用这个指定默认的数据源
|
# 多个数据源时可以用这个指定默认的数据源
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ func ErrorCatch() gin.HandlerFunc {
|
|||||||
defer func() {
|
defer func() {
|
||||||
// 在这里处理 Panic 异常,例如记录日志或返回错误信息给客户端
|
// 在这里处理 Panic 异常,例如记录日志或返回错误信息给客户端
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
logger.Errorf("发生了 Panic 异常: %v", err)
|
logger.Errorf("Panic 异常: %s => %v", c.Request.URL, err)
|
||||||
|
|
||||||
// 返回错误响应给客户端
|
// 返回错误响应给客户端
|
||||||
if config.Env() == "prod" {
|
if config.Env() == "prod" {
|
||||||
|
|||||||
@@ -12,18 +12,19 @@ import (
|
|||||||
|
|
||||||
// SessionToken 设置登录会话-兼容旧登录方式
|
// SessionToken 设置登录会话-兼容旧登录方式
|
||||||
func SessionToken(username, sourceAddr string) bool {
|
func SessionToken(username, sourceAddr string) bool {
|
||||||
token, _ := redis.Get("", "session_token")
|
// token, _ := redis.Get("", "session_token")
|
||||||
if token != "" {
|
// if token != "" {
|
||||||
se, err := dborm.XormUpdateSessionShakeTime(token)
|
// se, err := dborm.XormUpdateSessionShakeTime(token)
|
||||||
if se.AccountId != username || err != nil {
|
// if se.AccountId != username || err != nil {
|
||||||
// 过期时间单位秒 配置1800是半小时
|
// // 过期时间单位秒 配置1800是半小时
|
||||||
expireTime := time.Duration(int64(libConfig.GetExpiresFromConfig())) * time.Second
|
// expireTime := time.Duration(int64(libConfig.GetExpiresFromConfig())) * time.Second
|
||||||
redis.SetByExpire("", "session_token", token, expireTime)
|
// redis.SetByExpire("", "session_token", token, expireTime)
|
||||||
return true
|
// return true
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
// 不管原先的登录情况,直接插入写入覆盖redis中session
|
||||||
token = oauth.GenRandToken("omc") // Generate new token to session ID
|
//
|
||||||
|
token := oauth.GenRandToken("omc") // Generate new token to session ID
|
||||||
affected, err := dborm.XormInsertSession(username, sourceAddr, token, libConfig.GetExpiresFromConfig(), libConfig.GetYamlConfig().Auth.Session)
|
affected, err := dborm.XormInsertSession(username, sourceAddr, token, libConfig.GetExpiresFromConfig(), libConfig.GetYamlConfig().Auth.Session)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("SessionToken XormInsertSession err %v", err)
|
logger.Errorf("SessionToken XormInsertSession err %v", err)
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package session
|
package session
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"ems.agt/src/framework/redis"
|
"time"
|
||||||
|
|
||||||
|
libConfig "ems.agt/restagent/config"
|
||||||
|
"ems.agt/src/framework/redis"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -11,7 +13,10 @@ func SessionHeader() gin.HandlerFunc {
|
|||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
// 读取登录生成的会话token
|
// 读取登录生成的会话token
|
||||||
token, err := redis.Get("", "session_token")
|
token, err := redis.Get("", "session_token")
|
||||||
if err == nil {
|
if token != "" || err == nil {
|
||||||
|
// 过期时间单位秒 配置1800是半小时
|
||||||
|
expireTime := time.Duration(int64(libConfig.GetExpiresFromConfig())) * time.Second
|
||||||
|
redis.SetByExpire("", "session_token", token, expireTime)
|
||||||
c.Request.Header.Set("Accesstoken", token)
|
c.Request.Header.Set("Accesstoken", token)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ func (s *AccountController) Logout(c *gin.Context) {
|
|||||||
os, browser := ctxUtils.UaOsBrowser(c)
|
os, browser := ctxUtils.UaOsBrowser(c)
|
||||||
// 创建系统访问记录
|
// 创建系统访问记录
|
||||||
s.sysLogLoginService.NewSysLogLogin(
|
s.sysLogLoginService.NewSysLogLogin(
|
||||||
userName, commonConstants.STATUS_NO, "退出成功",
|
userName, commonConstants.STATUS_YES, "退出成功",
|
||||||
ipaddr, location, os, browser,
|
ipaddr, location, os, browser,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ func (s *SysMenuController) Add(c *gin.Context) {
|
|||||||
|
|
||||||
// 目录和菜单检查地址唯一
|
// 目录和菜单检查地址唯一
|
||||||
if menu.TYPE_DIR == body.MenuType || menu.TYPE_MENU == body.MenuType {
|
if menu.TYPE_DIR == body.MenuType || menu.TYPE_MENU == body.MenuType {
|
||||||
uniqueNenuPath := s.sysMenuService.CheckUniqueMenuPath(body.Path, "")
|
uniqueNenuPath := s.sysMenuService.CheckUniqueMenuPath(body.Path, body.ParentID, "")
|
||||||
if !uniqueNenuPath {
|
if !uniqueNenuPath {
|
||||||
msg := fmt.Sprintf("菜单新增【%s】失败,菜单路由地址已存在", body.MenuName)
|
msg := fmt.Sprintf("菜单新增【%s】失败,菜单路由地址已存在", body.MenuName)
|
||||||
c.JSON(200, result.ErrMsg(msg))
|
c.JSON(200, result.ErrMsg(msg))
|
||||||
@@ -151,7 +151,7 @@ func (s *SysMenuController) Edit(c *gin.Context) {
|
|||||||
|
|
||||||
// 目录和菜单检查地址唯一
|
// 目录和菜单检查地址唯一
|
||||||
if menu.TYPE_DIR == body.MenuType || menu.TYPE_MENU == body.MenuType {
|
if menu.TYPE_DIR == body.MenuType || menu.TYPE_MENU == body.MenuType {
|
||||||
uniqueNenuPath := s.sysMenuService.CheckUniqueMenuPath(body.Path, body.MenuID)
|
uniqueNenuPath := s.sysMenuService.CheckUniqueMenuPath(body.Path, body.ParentID, body.MenuID)
|
||||||
if !uniqueNenuPath {
|
if !uniqueNenuPath {
|
||||||
msg := fmt.Sprintf("菜单修改【%s】失败,菜单路由地址已存在", body.MenuName)
|
msg := fmt.Sprintf("菜单修改【%s】失败,菜单路由地址已存在", body.MenuName)
|
||||||
c.JSON(200, result.ErrMsg(msg))
|
c.JSON(200, result.ErrMsg(msg))
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ type ISysMenu interface {
|
|||||||
CheckUniqueMenuName(menuName, parentId, menuId string) bool
|
CheckUniqueMenuName(menuName, parentId, menuId string) bool
|
||||||
|
|
||||||
// CheckUniqueMenuPath 校验路由地址是否唯一(针对目录和菜单)
|
// CheckUniqueMenuPath 校验路由地址是否唯一(针对目录和菜单)
|
||||||
CheckUniqueMenuPath(path, menuId string) bool
|
CheckUniqueMenuPath(path, parentId, menuId string) bool
|
||||||
|
|
||||||
// BuildRouteMenus 构建前端路由所需要的菜单
|
// BuildRouteMenus 构建前端路由所需要的菜单
|
||||||
BuildRouteMenus(sysMenus []model.SysMenu, prefix string) []vo.Router
|
BuildRouteMenus(sysMenus []model.SysMenu, prefix string) []vo.Router
|
||||||
|
|||||||
@@ -124,9 +124,10 @@ func (r *SysMenuImpl) CheckUniqueMenuName(menuName, parentId, menuId string) boo
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CheckUniqueMenuPath 校验路由地址是否唯一(针对目录和菜单)
|
// CheckUniqueMenuPath 校验路由地址是否唯一(针对目录和菜单)
|
||||||
func (r *SysMenuImpl) CheckUniqueMenuPath(path, menuId string) bool {
|
func (r *SysMenuImpl) CheckUniqueMenuPath(path, parentId, menuId string) bool {
|
||||||
uniqueId := r.sysMenuRepository.CheckUniqueMenu(model.SysMenu{
|
uniqueId := r.sysMenuRepository.CheckUniqueMenu(model.SysMenu{
|
||||||
Path: path,
|
Path: path,
|
||||||
|
ParentID: parentId,
|
||||||
})
|
})
|
||||||
if uniqueId == menuId {
|
if uniqueId == menuId {
|
||||||
return true
|
return true
|
||||||
|
|||||||
Reference in New Issue
Block a user