You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
3.9 KiB
145 lines
3.9 KiB
package controller |
|
|
|
import ( |
|
"net/http" |
|
|
|
"gofaster/internal/auth/model" |
|
"gofaster/internal/auth/service" |
|
"gofaster/internal/shared/middleware" |
|
"gofaster/internal/shared/response" |
|
|
|
"github.com/gin-gonic/gin" |
|
) |
|
|
|
type PasswordController struct { |
|
passwordService *service.PasswordService |
|
userService *service.UserService |
|
} |
|
|
|
func NewPasswordController( |
|
passwordService *service.PasswordService, |
|
userService *service.UserService, |
|
) *PasswordController { |
|
return &PasswordController{ |
|
passwordService: passwordService, |
|
userService: userService, |
|
} |
|
} |
|
|
|
// ChangePassword 修改密码 |
|
func (c *PasswordController) ChangePassword(ctx *gin.Context) { |
|
var req struct { |
|
CurrentPassword string `json:"current_password" binding:"required"` |
|
NewPassword string `json:"new_password" binding:"required"` |
|
ConfirmPassword string `json:"confirm_password" binding:"required"` |
|
} |
|
|
|
if err := ctx.ShouldBindJSON(&req); err != nil { |
|
response.Error(ctx, http.StatusBadRequest, "请求参数错误", err.Error()) |
|
return |
|
} |
|
|
|
// 验证确认密码 |
|
if req.NewPassword != req.ConfirmPassword { |
|
response.Error(ctx, http.StatusBadRequest, "新密码与确认密码不一致", "") |
|
return |
|
} |
|
|
|
// 获取当前用户ID |
|
userID := middleware.GetUserID(ctx) |
|
|
|
// 调用服务层修改密码 |
|
err := c.passwordService.ChangePassword(ctx, userID, req.CurrentPassword, req.NewPassword) |
|
if err != nil { |
|
response.Error(ctx, http.StatusInternalServerError, "修改密码失败", err.Error()) |
|
return |
|
} |
|
|
|
response.Success(ctx, "密码修改成功", nil) |
|
} |
|
|
|
// ResetPassword 重置密码 |
|
func (c *PasswordController) ResetPassword(ctx *gin.Context) { |
|
var req struct { |
|
UserID uint `json:"user_id" binding:"required"` |
|
} |
|
|
|
if err := ctx.ShouldBindJSON(&req); err != nil { |
|
response.Error(ctx, http.StatusBadRequest, "请求参数错误", err.Error()) |
|
return |
|
} |
|
|
|
// 调用服务层重置密码 |
|
err := c.passwordService.ResetPassword(ctx, req.UserID) |
|
if err != nil { |
|
response.Error(ctx, http.StatusInternalServerError, "重置密码失败", err.Error()) |
|
return |
|
} |
|
|
|
response.Success(ctx, "密码重置成功", nil) |
|
} |
|
|
|
// GetPasswordPolicy 获取密码策略 |
|
func (c *PasswordController) GetPasswordPolicy(ctx *gin.Context) { |
|
policy, err := c.passwordService.GetPasswordPolicy() |
|
if err != nil { |
|
response.Error(ctx, http.StatusInternalServerError, "获取密码策略失败", err.Error()) |
|
return |
|
} |
|
|
|
response.Success(ctx, "获取密码策略成功", policy) |
|
} |
|
|
|
// ValidatePassword 验证密码 |
|
func (c *PasswordController) ValidatePassword(ctx *gin.Context) { |
|
var req struct { |
|
Password string `json:"password" binding:"required"` |
|
} |
|
|
|
if err := ctx.ShouldBindJSON(&req); err != nil { |
|
response.Error(ctx, http.StatusBadRequest, "请求参数错误", err.Error()) |
|
return |
|
} |
|
|
|
// 获取当前用户ID |
|
userID := middleware.GetUserID(ctx) |
|
|
|
result, err := c.passwordService.ValidatePassword(ctx, userID, req.Password) |
|
if err != nil { |
|
response.Error(ctx, http.StatusInternalServerError, "密码验证失败", err.Error()) |
|
return |
|
} |
|
|
|
response.Success(ctx, "密码验证完成", result) |
|
} |
|
|
|
// CheckPasswordStatus 检查密码状态 |
|
func (c *PasswordController) CheckPasswordStatus(ctx *gin.Context) { |
|
userID := middleware.GetUserID(ctx) |
|
|
|
status, err := c.passwordService.CheckPasswordStatus(ctx, userID) |
|
if err != nil { |
|
response.Error(ctx, http.StatusInternalServerError, "检查密码状态失败", err.Error()) |
|
return |
|
} |
|
|
|
response.Success(ctx, "检查密码状态成功", status) |
|
} |
|
|
|
// UpdatePasswordPolicy 更新密码策略 |
|
func (c *PasswordController) UpdatePasswordPolicy(ctx *gin.Context) { |
|
var policy model.PasswordPolicy |
|
|
|
if err := ctx.ShouldBindJSON(&policy); err != nil { |
|
response.Error(ctx, http.StatusBadRequest, "请求参数错误", err.Error()) |
|
return |
|
} |
|
|
|
err := c.passwordService.UpdatePasswordPolicy(&policy) |
|
if err != nil { |
|
response.Error(ctx, http.StatusInternalServerError, "更新密码策略失败", err.Error()) |
|
return |
|
} |
|
|
|
response.Success(ctx, "密码策略更新成功", nil) |
|
}
|
|
|