chore: opt settings code
This commit is contained in:
@@ -14,10 +14,15 @@ import (
|
||||
type AuthController struct {
|
||||
userService *services.UserService
|
||||
settingsService *services.SettingsService
|
||||
loginLogService *services.LoginLogService
|
||||
}
|
||||
|
||||
func NewAuthController(userService *services.UserService, settingsService *services.SettingsService) *AuthController {
|
||||
return &AuthController{userService: userService, settingsService: settingsService}
|
||||
func NewAuthController(userService *services.UserService, settingsService *services.SettingsService, loginLogService *services.LoginLogService) *AuthController {
|
||||
return &AuthController{
|
||||
userService: userService,
|
||||
settingsService: settingsService,
|
||||
loginLogService: loginLogService,
|
||||
}
|
||||
}
|
||||
|
||||
func (ac *AuthController) Login(c *gin.Context) {
|
||||
@@ -26,6 +31,9 @@ func (ac *AuthController) Login(c *gin.Context) {
|
||||
Password string `json:"password" binding:"required"`
|
||||
}
|
||||
|
||||
ip := c.ClientIP()
|
||||
userAgent := c.GetHeader("User-Agent")
|
||||
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
utils.BadRequest(c, err.Error())
|
||||
return
|
||||
@@ -33,6 +41,8 @@ func (ac *AuthController) Login(c *gin.Context) {
|
||||
|
||||
user := ac.userService.GetUserByUsername(req.Username)
|
||||
if user == nil || !ac.userService.ValidatePassword(user, req.Password) {
|
||||
// 记录登录失败日志
|
||||
ac.loginLogService.Create(req.Username, ip, userAgent, "failed", "用户名或密码错误")
|
||||
utils.Unauthorized(c, "用户名或密码错误")
|
||||
return
|
||||
}
|
||||
@@ -45,16 +55,10 @@ func (ac *AuthController) Login(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取 JWT Secret
|
||||
jwtSecret := ac.settingsService.Get(constant.SectionSystem, constant.KeyJWTSecret)
|
||||
if jwtSecret == "" {
|
||||
utils.ServerError(c, "系统配置错误")
|
||||
return
|
||||
}
|
||||
|
||||
// 生成 token
|
||||
token, err := utils.GenerateToken(user.ID, user.Username, expireDays, jwtSecret)
|
||||
token, err := utils.GenerateToken(user.ID, user.Username, expireDays, constant.Secret)
|
||||
if err != nil {
|
||||
ac.loginLogService.Create(req.Username, ip, userAgent, "failed", "Token生成失败")
|
||||
utils.ServerError(c, "登录失败")
|
||||
return
|
||||
}
|
||||
@@ -62,6 +66,9 @@ func (ac *AuthController) Login(c *gin.Context) {
|
||||
// 设置 Cookie
|
||||
middleware.SetAuthCookie(c, token, expireDays)
|
||||
|
||||
// 记录登录成功日志
|
||||
ac.loginLogService.Create(req.Username, ip, userAgent, "success", "登录成功")
|
||||
|
||||
utils.Success(c, gin.H{
|
||||
"user": user.Username,
|
||||
})
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"baihu/internal/constant"
|
||||
"baihu/internal/database"
|
||||
"baihu/internal/models"
|
||||
@@ -17,12 +19,14 @@ import (
|
||||
type SettingsController struct {
|
||||
userService *services.UserService
|
||||
settingsService *services.SettingsService
|
||||
loginLogService *services.LoginLogService
|
||||
}
|
||||
|
||||
func NewSettingsController(userService *services.UserService) *SettingsController {
|
||||
func NewSettingsController(userService *services.UserService, loginLogService *services.LoginLogService) *SettingsController {
|
||||
return &SettingsController{
|
||||
userService: userService,
|
||||
settingsService: services.NewSettingsService(),
|
||||
loginLogService: loginLogService,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,3 +190,31 @@ func formatDuration(d time.Duration) string {
|
||||
}
|
||||
return fmt.Sprintf("%d秒", seconds)
|
||||
}
|
||||
|
||||
|
||||
// GetLoginLogs 获取登录日志
|
||||
func (sc *SettingsController) GetLoginLogs(c *gin.Context) {
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "10"))
|
||||
username := c.Query("username")
|
||||
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize < 1 || pageSize > 100 {
|
||||
pageSize = 10
|
||||
}
|
||||
|
||||
logs, total, err := sc.loginLogService.List(page, pageSize, username)
|
||||
if err != nil {
|
||||
utils.ServerError(c, "获取登录日志失败")
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(c, gin.H{
|
||||
"data": logs,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"page_size": pageSize,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user