Fix a large number of bugs

This commit is contained in:
2026-03-19 05:11:44 +08:00
parent f1d657172e
commit 79669376aa
15 changed files with 570 additions and 289 deletions

View File

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

View File

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

View File

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

View File

@@ -162,9 +162,6 @@ func LoginLogsClearHandler(c *gin.Context) {
OperationType: "清空登录日志",
Operator: operator,
OperatorUUID: "", // NetworkAuth 中暂时无法获取 UUID
AppName: "-",
ProductName: "-",
TransactionID: "-",
Details: "管理员清空了所有登录日志",
CreatedAt: time.Now(),
}

View File

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

View File

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

View File

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