1
0

feat: 合并代码

This commit is contained in:
TsMask
2023-10-17 19:43:49 +08:00
parent 5f5a2e2e9e
commit e2d17640ef
10 changed files with 100 additions and 41 deletions

View File

@@ -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,
})) }))

View File

@@ -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"))
} }

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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 天

View File

@@ -4,7 +4,7 @@ server:
# 日志 # 日志
logger: logger:
fileDir: "C:/usr/local/omc/logs" fileDir: "C:/usr/local/omc/log"
level: 0 # 输出最低等级 level: 0 # 输出最低等级
# 静态文件配置, 相对项目根路径或填绝对路径 # 静态文件配置, 相对项目根路径或填绝对路径

View File

@@ -1,6 +1,6 @@
# 应用服务配置 # 应用服务配置
server: server:
port: 3040 port: 3030
proxy: true proxy: true
# security 安全 # security 安全

View File

@@ -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,16 +62,15 @@ 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 {
ok = true ok = true
}
}
if !ok {
c.AbortWithStatusJSON(200, result.ErrMsg("无效 Referer "+host))
return
} }
} }
if !ok {
c.AbortWithStatusJSON(200, result.ErrMsg("无效 Referer "+host))
return
}
} }

View File

@@ -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 角色和菜单数据权限