password.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package api
  2. import (
  3. "github.com/grafana/grafana/pkg/api/dtos"
  4. "github.com/grafana/grafana/pkg/bus"
  5. "github.com/grafana/grafana/pkg/middleware"
  6. m "github.com/grafana/grafana/pkg/models"
  7. "github.com/grafana/grafana/pkg/util"
  8. )
  9. func SendResetPasswordEmail(c *middleware.Context, form dtos.SendResetPasswordEmailForm) Response {
  10. userQuery := m.GetUserByLoginQuery{LoginOrEmail: form.UserOrEmail}
  11. if err := bus.Dispatch(&userQuery); err != nil {
  12. c.Logger.Info("Requested password reset for user that was not found", "user", userQuery.LoginOrEmail)
  13. return ApiError(200, "Email sent", err)
  14. }
  15. emailCmd := m.SendResetPasswordEmailCommand{User: userQuery.Result}
  16. if err := bus.Dispatch(&emailCmd); err != nil {
  17. return ApiError(500, "Failed to send email", err)
  18. }
  19. return ApiSuccess("Email sent")
  20. }
  21. func ResetPassword(c *middleware.Context, form dtos.ResetUserPasswordForm) Response {
  22. query := m.ValidateResetPasswordCodeQuery{Code: form.Code}
  23. if err := bus.Dispatch(&query); err != nil {
  24. if err == m.ErrInvalidEmailCode {
  25. return ApiError(400, "Invalid or expired reset password code", nil)
  26. }
  27. return ApiError(500, "Unknown error validating email code", err)
  28. }
  29. if form.NewPassword != form.ConfirmPassword {
  30. return ApiError(400, "Passwords do not match", nil)
  31. }
  32. cmd := m.ChangeUserPasswordCommand{}
  33. cmd.UserId = query.Result.Id
  34. cmd.NewPassword = util.EncodePassword(form.NewPassword, query.Result.Salt)
  35. if err := bus.Dispatch(&cmd); err != nil {
  36. return ApiError(500, "Failed to change user password", err)
  37. }
  38. return ApiSuccess("User password changed")
  39. }