func_modifypassword.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package admin
  2. import (
  3. "net/http"
  4. "github.com/xinliangnote/go-gin-api/internal/code"
  5. "github.com/xinliangnote/go-gin-api/internal/pkg/core"
  6. "github.com/xinliangnote/go-gin-api/internal/pkg/password"
  7. "github.com/xinliangnote/go-gin-api/internal/services/admin"
  8. )
  9. type modifyPasswordRequest struct {
  10. OldPassword string `form:"old_password"` // 旧密码
  11. NewPassword string `form:"new_password"` // 新密码
  12. }
  13. type modifyPasswordResponse struct {
  14. Username string `json:"username"` // 用户账号
  15. }
  16. // ModifyPassword 修改密码
  17. // @Summary 修改密码
  18. // @Description 修改密码
  19. // @Tags API.admin
  20. // @Accept application/x-www-form-urlencoded
  21. // @Produce json
  22. // @Param old_password formData string true "旧密码"
  23. // @Param new_password formData string true "新密码"
  24. // @Success 200 {object} modifyPasswordResponse
  25. // @Failure 400 {object} code.Failure
  26. // @Router /api/admin/modify_password [patch]
  27. // @Security LoginToken
  28. func (h *handler) ModifyPassword() core.HandlerFunc {
  29. return func(ctx core.Context) {
  30. req := new(modifyPasswordRequest)
  31. res := new(modifyPasswordResponse)
  32. if err := ctx.ShouldBindForm(req); err != nil {
  33. ctx.AbortWithError(core.Error(
  34. http.StatusBadRequest,
  35. code.ParamBindError,
  36. code.Text(code.ParamBindError)).WithError(err),
  37. )
  38. return
  39. }
  40. searchOneData := new(admin.SearchOneData)
  41. searchOneData.Id = ctx.SessionUserInfo().UserID
  42. searchOneData.Password = password.GeneratePassword(req.OldPassword)
  43. searchOneData.IsUsed = 1
  44. info, err := h.adminService.Detail(ctx, searchOneData)
  45. if err != nil || info == nil {
  46. ctx.AbortWithError(core.Error(
  47. http.StatusBadRequest,
  48. code.AdminModifyPasswordError,
  49. code.Text(code.AdminModifyPasswordError)).WithError(err),
  50. )
  51. return
  52. }
  53. if err := h.adminService.ModifyPassword(ctx, ctx.SessionUserInfo().UserID, req.NewPassword); err != nil {
  54. ctx.AbortWithError(core.Error(
  55. http.StatusBadRequest,
  56. code.AdminModifyPasswordError,
  57. code.Text(code.AdminModifyPasswordError)).WithError(err),
  58. )
  59. return
  60. }
  61. res.Username = ctx.SessionUserInfo().UserName
  62. ctx.Payload(res)
  63. }
  64. }