feat: 合并代码
This commit is contained in:
@@ -302,6 +302,7 @@ func LoginOMC(w http.ResponseWriter, r *http.Request) {
|
|||||||
if user != nil {
|
if user != nil {
|
||||||
// 缓存用户信息
|
// 缓存用户信息
|
||||||
account.CacheLoginUser(user)
|
account.CacheLoginUser(user)
|
||||||
|
redis.SetByExpire("", "session_token", token, time.Second*1800)
|
||||||
ctx.JSON(w, 200, result.OkData(map[string]any{
|
ctx.JSON(w, 200, result.OkData(map[string]any{
|
||||||
"accessToken": token,
|
"accessToken": token,
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -130,15 +130,15 @@ func TcpdumpNeUPFTask(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 开始
|
// 开始telnet
|
||||||
if body.RunType == "start" {
|
if body.RunType == "start_telnet" {
|
||||||
// 创建TCP连接
|
// 创建TCP连接
|
||||||
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", neInfo.Ip, 5002))
|
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", neInfo.Ip, 5002))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
conn.Close()
|
|
||||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId)
|
filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId)
|
||||||
cmdStr := fmt.Sprintf("pcap dispatch trace on max 100000 file %s", filePcapName)
|
cmdStr := fmt.Sprintf("pcap dispatch trace on max 100000 file %s", filePcapName)
|
||||||
@@ -169,15 +169,15 @@ func TcpdumpNeUPFTask(w http.ResponseWriter, r *http.Request) {
|
|||||||
conn.Close()
|
conn.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 停止
|
// 停止telnet
|
||||||
if body.RunType == "stop" {
|
if body.RunType == "stop_telnet" {
|
||||||
// 创建TCP连接
|
// 创建TCP连接
|
||||||
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", neInfo.Ip, 5002))
|
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", neInfo.Ip, 5002))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
conn.Close()
|
|
||||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId)
|
filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId)
|
||||||
cmdStr := "pcap dispatch trace off"
|
cmdStr := "pcap dispatch trace off"
|
||||||
@@ -268,5 +268,72 @@ func TcpdumpNeUPFTask(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 开始-脚本字符串
|
||||||
|
if body.RunType == "start_str" {
|
||||||
|
fileLogName := fmt.Sprintf("tmp_%s_%s.log", body.NeType, body.NeId)
|
||||||
|
filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId)
|
||||||
|
scriptStr := "#!/bin/expect\nset capcmd [lindex $argv 0]\nspawn telnet localhost 5002\nexpect \"upfd1# \"\nsend \"$capcmd\\n\"\nexpect \"upfd1# \"\nsend \"quit\\n\"\nexpect \"eof\""
|
||||||
|
writeLog := fmt.Sprintf(" > %s 2>&1 \ncat %s", fileLogName, fileLogName) // 执行信息写入日志文件输出,避免弹出code 127
|
||||||
|
|
||||||
|
capCmdStr := fmt.Sprintf("%s file %s", body.Cmd, filePcapName)
|
||||||
|
|
||||||
|
cmdStr := fmt.Sprintf("cd /tmp\n\necho '%s' > cap.sh\n\nchmod +x cap.sh\n\n./cap.sh '%s'%s", scriptStr, capCmdStr, writeLog)
|
||||||
|
usernameNe := conf.Get("ne.user").(string) // 网元统一用户
|
||||||
|
sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.Ip)
|
||||||
|
msg, err := cmd.ExecWithCheck("ssh", sshHost, cmdStr)
|
||||||
|
if err != nil {
|
||||||
|
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||||
|
} else {
|
||||||
|
s := strings.Index(msg, "pcap dispatch trace:")
|
||||||
|
if s != -1 {
|
||||||
|
e := strings.Index(msg, "\r\nupfd1#")
|
||||||
|
msg = msg[s:e]
|
||||||
|
} else {
|
||||||
|
msg = "Executed, please stop before proceeding"
|
||||||
|
}
|
||||||
|
ctx.JSON(w, 200, result.OkData(map[string]any{
|
||||||
|
"cmd": capCmdStr,
|
||||||
|
"msg": msg,
|
||||||
|
"fileName": filePcapName,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 停止-脚本字符串
|
||||||
|
if body.RunType == "stop_str" {
|
||||||
|
fileLogName := fmt.Sprintf("tmp_%s_%s.log", body.NeType, body.NeId)
|
||||||
|
filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId)
|
||||||
|
scriptStr := "#!/bin/expect\nset capcmd [lindex $argv 0]\nspawn telnet localhost 5002\nexpect \"upfd1# \"\nsend \"$capcmd\\n\"\nexpect \"upfd1# \"\nsend \"quit\\n\"\nexpect \"eof\""
|
||||||
|
writeLog := fmt.Sprintf(" > %s 2>&1 \ncat %s", fileLogName, fileLogName) // 执行信息写入日志文件输出,避免弹出code 127
|
||||||
|
|
||||||
|
capCmdStr := body.Cmd
|
||||||
|
|
||||||
|
cmdStr := fmt.Sprintf("cd /tmp\n\necho '%s' > cap.sh\n\nchmod +x cap.sh\n\n./cap.sh '%s'%s", scriptStr, capCmdStr, writeLog)
|
||||||
|
|
||||||
|
usernameNe := conf.Get("ne.user").(string) // 网元统一用户
|
||||||
|
sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.Ip)
|
||||||
|
msg, err := cmd.ExecWithCheck("ssh", sshHost, cmdStr)
|
||||||
|
if err != nil {
|
||||||
|
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||||
|
} else {
|
||||||
|
s := strings.Index(msg, "pcap dispatch trace:")
|
||||||
|
if s == -1 {
|
||||||
|
s = strings.Index(msg, "Write ")
|
||||||
|
}
|
||||||
|
if s != -1 {
|
||||||
|
e := strings.Index(msg, "\r\nupfd1#")
|
||||||
|
msg = msg[s:e]
|
||||||
|
} else {
|
||||||
|
msg = "No stoppable found"
|
||||||
|
}
|
||||||
|
ctx.JSON(w, 200, result.OkData(map[string]any{
|
||||||
|
"cmd": capCmdStr,
|
||||||
|
"msg": msg,
|
||||||
|
"fileName": filePcapName,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.JSON(w, 200, result.ErrMsg("runType is start or stop"))
|
ctx.JSON(w, 200, result.ErrMsg("runType is start or stop"))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,22 +71,10 @@ func init() {
|
|||||||
Register("GET", sm.CustomUriOMCLocalTime, sm.GetOMCLocalTime, nil)
|
Register("GET", sm.CustomUriOMCLocalTime, sm.GetOMCLocalTime, nil)
|
||||||
|
|
||||||
// 数据库直连操作权限
|
// 数据库直连操作权限
|
||||||
selectPermission := midware.Authorize(map[string][]string{
|
selectPermission := midware.Authorize(map[string][]string{})
|
||||||
"hasRoles": {"dba"},
|
updatePermission := midware.Authorize(map[string][]string{})
|
||||||
"hasPerms": {"db:select"},
|
insertPermission := midware.Authorize(map[string][]string{})
|
||||||
})
|
deletePermission := midware.Authorize(map[string][]string{})
|
||||||
updatePermission := midware.Authorize(map[string][]string{
|
|
||||||
"hasRoles": {"dba"},
|
|
||||||
"hasPerms": {"db:update"},
|
|
||||||
})
|
|
||||||
insertPermission := midware.Authorize(map[string][]string{
|
|
||||||
"hasRoles": {"dba"},
|
|
||||||
"hasPerms": {"db:insert"},
|
|
||||||
})
|
|
||||||
deletePermission := midware.Authorize(map[string][]string{
|
|
||||||
"hasRoles": {"dba"},
|
|
||||||
"hasPerms": {"db:delete"},
|
|
||||||
})
|
|
||||||
|
|
||||||
// database management
|
// database management
|
||||||
Register("GET", dbrest.XormGetDataUri, dbrest.DatabaseGetData, selectPermission)
|
Register("GET", dbrest.XormGetDataUri, dbrest.DatabaseGetData, selectPermission)
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ ne:
|
|||||||
|
|
||||||
# chk2ne: true/false, if put OmcNeConfig parameters to NE
|
# chk2ne: true/false, if put OmcNeConfig parameters to NE
|
||||||
omc:
|
omc:
|
||||||
uriPrefix: /api/rest/oam
|
uriPrefix: "/omc/rest"
|
||||||
neType: OMC
|
neType: OMC
|
||||||
neId: 001
|
neId: 001
|
||||||
rmUID: 4400HX101
|
rmUID: 4400HX101
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ omc:
|
|||||||
checksign: false
|
checksign: false
|
||||||
backup: ./backup
|
backup: ./backup
|
||||||
upload: ./upload
|
upload: ./upload
|
||||||
frontUpload: C:\AMP\Probject\ems_frontend\upload
|
frontUpload: d:/local.git/fe.ems/upload
|
||||||
frontTraceDir: d:/local.git/fe.ems/trace
|
frontTraceDir: d:/local.git/fe.ems/trace
|
||||||
software: ./software
|
software: ./software
|
||||||
license: ./license
|
license: ./license
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# 项目信息
|
# 项目信息
|
||||||
framework:
|
framework:
|
||||||
name: "ems_agt"
|
name: "ems_agt"
|
||||||
version: "1.6.2"
|
version: "0.0.1"
|
||||||
|
|
||||||
# 应用服务配置
|
# 应用服务配置
|
||||||
server:
|
server:
|
||||||
@@ -12,7 +12,7 @@ server:
|
|||||||
|
|
||||||
# 日志
|
# 日志
|
||||||
logger:
|
logger:
|
||||||
fileDir: "/usr/local/omc/logs"
|
fileDir: "/usr/local/omc/log"
|
||||||
fileName: "ems_agt.log"
|
fileName: "ems_agt.log"
|
||||||
level: 2 # 日志记录的等级 0:silent<1:info<2:warn<3:error
|
level: 2 # 日志记录的等级 0:silent<1:info<2:warn<3:error
|
||||||
maxDay: 30 # 日志会保留 30 天
|
maxDay: 30 # 日志会保留 30 天
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ server:
|
|||||||
|
|
||||||
# 日志
|
# 日志
|
||||||
logger:
|
logger:
|
||||||
fileDir: "C:/usr/local/omc/logs"
|
fileDir: "C:/usr/local/omc/log"
|
||||||
level: 0 # 输出最低等级
|
level: 0 # 输出最低等级
|
||||||
|
|
||||||
# 静态文件配置, 相对项目根路径或填绝对路径
|
# 静态文件配置, 相对项目根路径或填绝对路径
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 应用服务配置
|
# 应用服务配置
|
||||||
server:
|
server:
|
||||||
port: 3040
|
port: 3030
|
||||||
proxy: true
|
proxy: true
|
||||||
|
|
||||||
# security 安全
|
# security 安全
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ func referer(c *gin.Context) {
|
|||||||
if v := config.Get("security.csrf.enable"); v != nil {
|
if v := config.Get("security.csrf.enable"); v != nil {
|
||||||
enable = v.(bool)
|
enable = v.(bool)
|
||||||
}
|
}
|
||||||
|
if !enable {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// csrf 校验类型
|
// csrf 校验类型
|
||||||
okType := false
|
okType := false
|
||||||
@@ -59,7 +62,7 @@ func referer(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if enable && okType {
|
// 遍历检查
|
||||||
ok := false
|
ok := false
|
||||||
for _, domain := range refererWhiteList {
|
for _, domain := range refererWhiteList {
|
||||||
if domain == host {
|
if domain == host {
|
||||||
@@ -70,5 +73,4 @@ func referer(c *gin.Context) {
|
|||||||
c.AbortWithStatusJSON(200, result.ErrMsg("无效 Referer "+host))
|
c.AbortWithStatusJSON(200, result.ErrMsg("无效 Referer "+host))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,11 +128,12 @@ func (s *AccountImpl) passwordRetryCount(username string) (string, int64, time.D
|
|||||||
retryCount = "0"
|
retryCount = "0"
|
||||||
}
|
}
|
||||||
// 是否超过错误值
|
// 是否超过错误值
|
||||||
if parse.Number(retryCount) >= int64(maxRetryCount) {
|
retryCountInt64 := parse.Number(retryCount)
|
||||||
|
if retryCountInt64 >= int64(maxRetryCount) {
|
||||||
msg := fmt.Sprintf("密码输入错误 %d 次,帐户锁定 %d 分钟", maxRetryCount, lockTime)
|
msg := fmt.Sprintf("密码输入错误 %d 次,帐户锁定 %d 分钟", maxRetryCount, lockTime)
|
||||||
return retrykey, int64(maxRetryCount), time.Duration(lockTime) * time.Minute, errors.New(msg)
|
return retrykey, retryCountInt64, time.Duration(lockTime) * time.Minute, errors.New(msg)
|
||||||
}
|
}
|
||||||
return retrykey, int64(maxRetryCount), time.Duration(lockTime) * time.Minute, nil
|
return retrykey, retryCountInt64, time.Duration(lockTime) * time.Minute, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RoleAndMenuPerms 角色和菜单数据权限
|
// RoleAndMenuPerms 角色和菜单数据权限
|
||||||
|
|||||||
Reference in New Issue
Block a user