mirror of
https://github.com/skyle1995/NetworkAuth.git
synced 2026-05-25 02:24:05 +08:00
Fix a large number of bugs
This commit is contained in:
@@ -3,6 +3,7 @@ package admin
|
||||
import (
|
||||
"NetworkAuth/controllers"
|
||||
"NetworkAuth/models"
|
||||
"NetworkAuth/services"
|
||||
"crypto/rand"
|
||||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
@@ -385,6 +386,20 @@ func AppCreateHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
operator := c.GetString("admin_username")
|
||||
if operator == "" {
|
||||
operator = "unknown"
|
||||
}
|
||||
operatorUUID := c.GetString("admin_uuid")
|
||||
|
||||
services.RecordOperationLog(
|
||||
"创建应用",
|
||||
operator,
|
||||
operatorUUID,
|
||||
"创建了应用: "+app.Name,
|
||||
)
|
||||
|
||||
logrus.WithField("app_uuid", app.UUID).Debug("Successfully created app with default APIs")
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
@@ -555,6 +570,20 @@ func AppDeleteHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
operator := c.GetString("admin_username")
|
||||
if operator == "" {
|
||||
operator = "unknown"
|
||||
}
|
||||
operatorUUID := c.GetString("admin_uuid")
|
||||
|
||||
services.RecordOperationLog(
|
||||
"删除应用",
|
||||
operator,
|
||||
operatorUUID,
|
||||
"删除了应用: "+app.Name,
|
||||
)
|
||||
|
||||
logrus.WithFields(logrus.Fields{
|
||||
"app_id": app.ID,
|
||||
"app_uuid": app.UUID,
|
||||
|
||||
@@ -211,9 +211,20 @@ func DashboardLoginLogsHandler(c *gin.Context) {
|
||||
}
|
||||
offset := (page - 1) * limit
|
||||
|
||||
// 获取当前管理员信息(可能是 username 或 admin_username,具体取决于认证中间件设置的 key)
|
||||
username := c.GetString("admin_username")
|
||||
if username == "" {
|
||||
// 尝试获取其他可能的键名
|
||||
username = c.GetString("username")
|
||||
}
|
||||
|
||||
var total int64
|
||||
// 当前模型的 LoginLog 本身就是专用于 admin 的登录日志模型(没有 type 字段),所以直接查询全部即可
|
||||
query := db.Model(&models.LoginLog{})
|
||||
query := db.Model(&models.LoginLog{}).Where("type = ?", "admin")
|
||||
|
||||
// 如果有用户名,则仅过滤该用户的日志
|
||||
if username != "" {
|
||||
query = query.Where("username = ?", username)
|
||||
}
|
||||
|
||||
if err := query.Count(&total).Error; err != nil {
|
||||
handlersBaseController.HandleInternalError(c, "获取登录日志总数失败", err)
|
||||
@@ -232,3 +243,4 @@ func DashboardLoginLogsHandler(c *gin.Context) {
|
||||
}
|
||||
handlersBaseController.HandleSuccess(c, "获取登录日志成功", data)
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package admin
|
||||
import (
|
||||
"NetworkAuth/controllers"
|
||||
"NetworkAuth/models"
|
||||
"NetworkAuth/services"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strconv"
|
||||
@@ -203,6 +204,20 @@ func FunctionCreateHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
operator := c.GetString("admin_username")
|
||||
if operator == "" {
|
||||
operator = "unknown"
|
||||
}
|
||||
operatorUUID := c.GetString("admin_uuid")
|
||||
|
||||
services.RecordOperationLog(
|
||||
"创建函数",
|
||||
operator,
|
||||
operatorUUID,
|
||||
"创建了函数: "+function.Alias,
|
||||
)
|
||||
|
||||
functionBaseController.HandleSuccess(c, "创建成功", function)
|
||||
}
|
||||
|
||||
@@ -292,6 +307,10 @@ func FunctionDeleteHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查找函数以记录日志
|
||||
var function models.Function
|
||||
db.First(&function, req.ID)
|
||||
|
||||
// 删除函数
|
||||
if err := db.Delete(&models.Function{}, req.ID).Error; err != nil {
|
||||
logrus.WithError(err).Error("Failed to delete function")
|
||||
@@ -299,6 +318,25 @@ func FunctionDeleteHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
operator := c.GetString("admin_username")
|
||||
if operator == "" {
|
||||
operator = "unknown"
|
||||
}
|
||||
operatorUUID := c.GetString("admin_uuid")
|
||||
|
||||
details := "删除了函数ID: " + strconv.Itoa(int(req.ID))
|
||||
if function.ID != 0 {
|
||||
details = "删除了函数: " + function.Alias
|
||||
}
|
||||
|
||||
services.RecordOperationLog(
|
||||
"删除函数",
|
||||
operator,
|
||||
operatorUUID,
|
||||
details,
|
||||
)
|
||||
|
||||
logrus.WithField("function_id", req.ID).Debug("Successfully deleted function")
|
||||
|
||||
functionBaseController.HandleSuccess(c, "删除成功", nil)
|
||||
@@ -331,6 +369,26 @@ func FunctionsBatchDeleteHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
operator := c.GetString("admin_username")
|
||||
if operator == "" {
|
||||
operator = "unknown"
|
||||
}
|
||||
operatorUUID := c.GetString("admin_uuid")
|
||||
|
||||
var idStrs []string
|
||||
for _, id := range req.IDs {
|
||||
idStrs = append(idStrs, strconv.Itoa(int(id)))
|
||||
}
|
||||
details := "批量删除了函数ID: " + strings.Join(idStrs, ",")
|
||||
|
||||
services.RecordOperationLog(
|
||||
"删除函数",
|
||||
operator,
|
||||
operatorUUID,
|
||||
details,
|
||||
)
|
||||
|
||||
logrus.WithField("function_ids", req.IDs).Debug("Successfully batch deleted functions")
|
||||
|
||||
functionBaseController.HandleSuccess(c, "批量删除成功", nil)
|
||||
|
||||
@@ -162,9 +162,6 @@ func LoginLogsClearHandler(c *gin.Context) {
|
||||
OperationType: "清空登录日志",
|
||||
Operator: operator,
|
||||
OperatorUUID: "", // NetworkAuth 中暂时无法获取 UUID
|
||||
AppName: "-",
|
||||
ProductName: "-",
|
||||
TransactionID: "-",
|
||||
Details: "管理员清空了所有登录日志",
|
||||
CreatedAt: time.Now(),
|
||||
}
|
||||
|
||||
@@ -51,7 +51,6 @@ func LogsListHandler(c *gin.Context) {
|
||||
endTimeStr := strings.TrimSpace(c.Query("end_time"))
|
||||
operationType := strings.TrimSpace(c.Query("operation_type"))
|
||||
operator := strings.TrimSpace(c.Query("operator"))
|
||||
transactionID := strings.TrimSpace(c.Query("transaction_id"))
|
||||
|
||||
// 构建查询
|
||||
db, ok := logBaseController.GetDB(c)
|
||||
@@ -72,10 +71,6 @@ func LogsListHandler(c *gin.Context) {
|
||||
// 支持按 UUID 或 用户名 筛选
|
||||
query = query.Where("operator_uuid = ? OR operator = ?", operator, operator)
|
||||
}
|
||||
if transactionID != "" {
|
||||
// 优化:使用精确匹配提升查询性能
|
||||
query = query.Where("transaction_id = ?", transactionID)
|
||||
}
|
||||
if startTimeStr != "" {
|
||||
if t, err := time.ParseInLocation("2006-01-02", startTimeStr, time.Local); err == nil {
|
||||
query = query.Where("created_at >= ?", t)
|
||||
@@ -140,9 +135,6 @@ func LogsClearHandler(c *gin.Context) {
|
||||
OperationType: "清空日志",
|
||||
Operator: operator,
|
||||
OperatorUUID: "",
|
||||
AppName: "-",
|
||||
ProductName: "-",
|
||||
TransactionID: "-",
|
||||
Details: "管理员清空了所有操作日志",
|
||||
CreatedAt: time.Now(),
|
||||
}
|
||||
|
||||
@@ -144,6 +144,20 @@ func ProfilePasswordUpdateHandler(c *gin.Context) {
|
||||
cookie := utils.CreateSecureCookie("admin_session", token, maxAge, domain, secure, sameSite)
|
||||
c.SetCookie(cookie.Name, cookie.Value, cookie.MaxAge, cookie.Path, cookie.Domain, cookie.Secure, cookie.HttpOnly)
|
||||
|
||||
// 记录操作日志
|
||||
operator := c.GetString("admin_username")
|
||||
if operator == "" {
|
||||
operator = "unknown"
|
||||
}
|
||||
operatorUUID := c.GetString("admin_uuid")
|
||||
|
||||
services.RecordOperationLog(
|
||||
"修改密码",
|
||||
operator,
|
||||
operatorUUID,
|
||||
"管理员修改了登录密码",
|
||||
)
|
||||
|
||||
authBaseController.HandleSuccess(c, "密码修改成功", nil)
|
||||
}
|
||||
|
||||
@@ -217,6 +231,24 @@ func ProfileUpdateHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 刷新缓存
|
||||
settingsService.RefreshCache()
|
||||
_ = utils.RedisDel(c.Request.Context(), "setting:admin_username")
|
||||
|
||||
// 记录操作日志
|
||||
operator := c.GetString("admin_username")
|
||||
if operator == "" {
|
||||
operator = "unknown"
|
||||
}
|
||||
operatorUUID := c.GetString("admin_uuid")
|
||||
|
||||
services.RecordOperationLog(
|
||||
"修改账号",
|
||||
operator,
|
||||
operatorUUID,
|
||||
"管理员修改了用户名为: "+username,
|
||||
)
|
||||
|
||||
// 重新签发JWT并写入Cookie
|
||||
token, err := generateJWTTokenForAdmin(username, currentHash)
|
||||
if err != nil {
|
||||
@@ -228,10 +260,6 @@ func ProfileUpdateHandler(c *gin.Context) {
|
||||
cookie := utils.CreateSecureCookie("admin_session", token, maxAge, domain, secure, sameSite)
|
||||
c.SetCookie(cookie.Name, cookie.Value, cookie.MaxAge, cookie.Path, cookie.Domain, cookie.Secure, cookie.HttpOnly)
|
||||
|
||||
// 刷新缓存
|
||||
settingsService.RefreshCache()
|
||||
_ = utils.RedisDel(c.Request.Context(), "setting:admin_username")
|
||||
|
||||
authBaseController.HandleSuccess(c, "用户名修改成功", map[string]interface{}{
|
||||
"username": username,
|
||||
})
|
||||
|
||||
@@ -3,6 +3,7 @@ package admin
|
||||
import (
|
||||
"NetworkAuth/controllers"
|
||||
"NetworkAuth/models"
|
||||
"NetworkAuth/services"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strconv"
|
||||
@@ -223,6 +224,20 @@ func VariableCreateHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
operator := c.GetString("admin_username")
|
||||
if operator == "" {
|
||||
operator = "unknown"
|
||||
}
|
||||
operatorUUID := c.GetString("admin_uuid")
|
||||
|
||||
services.RecordOperationLog(
|
||||
"创建变量",
|
||||
operator,
|
||||
operatorUUID,
|
||||
"创建了变量: "+variable.Alias,
|
||||
)
|
||||
|
||||
variableBaseController.HandleSuccess(c, "创建成功", variable)
|
||||
}
|
||||
|
||||
@@ -312,6 +327,10 @@ func VariableDeleteHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查找变量以记录日志
|
||||
var variable models.Variable
|
||||
db.First(&variable, req.ID)
|
||||
|
||||
// 删除变量
|
||||
if err := db.Delete(&models.Variable{}, req.ID).Error; err != nil {
|
||||
logrus.WithError(err).Error("Failed to delete variable")
|
||||
@@ -319,6 +338,25 @@ func VariableDeleteHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
operator := c.GetString("admin_username")
|
||||
if operator == "" {
|
||||
operator = "unknown"
|
||||
}
|
||||
operatorUUID := c.GetString("admin_uuid")
|
||||
|
||||
details := "删除了变量ID: " + strconv.Itoa(int(req.ID))
|
||||
if variable.ID != 0 {
|
||||
details = "删除了变量: " + variable.Alias
|
||||
}
|
||||
|
||||
services.RecordOperationLog(
|
||||
"删除变量",
|
||||
operator,
|
||||
operatorUUID,
|
||||
details,
|
||||
)
|
||||
|
||||
logrus.WithField("variable_id", req.ID).Debug("Successfully deleted variable")
|
||||
|
||||
variableBaseController.HandleSuccess(c, "删除成功", nil)
|
||||
@@ -351,6 +389,26 @@ func VariablesBatchDeleteHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
operator := c.GetString("admin_username")
|
||||
if operator == "" {
|
||||
operator = "unknown"
|
||||
}
|
||||
operatorUUID := c.GetString("admin_uuid")
|
||||
|
||||
var idStrs []string
|
||||
for _, id := range req.IDs {
|
||||
idStrs = append(idStrs, strconv.Itoa(int(id)))
|
||||
}
|
||||
details := "批量删除了变量ID: " + strings.Join(idStrs, ",")
|
||||
|
||||
services.RecordOperationLog(
|
||||
"删除变量",
|
||||
operator,
|
||||
operatorUUID,
|
||||
details,
|
||||
)
|
||||
|
||||
logrus.WithField("variable_ids", req.IDs).Debug("Successfully batch deleted variables")
|
||||
|
||||
variableBaseController.HandleSuccess(c, "批量删除成功", nil)
|
||||
|
||||
Reference in New Issue
Block a user