user.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package api
  2. import (
  3. "github.com/grafana/grafana/pkg/bus"
  4. "github.com/grafana/grafana/pkg/middleware"
  5. m "github.com/grafana/grafana/pkg/models"
  6. "github.com/grafana/grafana/pkg/util"
  7. )
  8. func GetUser(c *middleware.Context) {
  9. query := m.GetUserInfoQuery{UserId: c.UserId}
  10. if err := bus.Dispatch(&query); err != nil {
  11. c.JsonApiErr(500, "Failed to get user", err)
  12. return
  13. }
  14. c.JSON(200, query.Result)
  15. }
  16. func UpdateUser(c *middleware.Context, cmd m.UpdateUserCommand) {
  17. cmd.UserId = c.UserId
  18. if err := bus.Dispatch(&cmd); err != nil {
  19. c.JsonApiErr(400, "Failed to update user", err)
  20. return
  21. }
  22. c.JsonOK("User updated")
  23. }
  24. func GetUserOrgList(c *middleware.Context) {
  25. query := m.GetUserOrgListQuery{UserId: c.UserId}
  26. if err := bus.Dispatch(&query); err != nil {
  27. c.JsonApiErr(500, "Failed to get user organizations", err)
  28. return
  29. }
  30. for _, ac := range query.Result {
  31. if ac.OrgId == c.OrgId {
  32. ac.IsUsing = true
  33. break
  34. }
  35. }
  36. c.JSON(200, query.Result)
  37. }
  38. func validateUsingOrg(userId int64, orgId int64) bool {
  39. query := m.GetUserOrgListQuery{UserId: userId}
  40. if err := bus.Dispatch(&query); err != nil {
  41. return false
  42. }
  43. // validate that the org id in the list
  44. valid := false
  45. for _, other := range query.Result {
  46. if other.OrgId == orgId {
  47. valid = true
  48. }
  49. }
  50. return valid
  51. }
  52. func UserSetUsingOrg(c *middleware.Context) {
  53. orgId := c.ParamsInt64(":id")
  54. if !validateUsingOrg(c.UserId, orgId) {
  55. c.JsonApiErr(401, "Not a valid organization", nil)
  56. return
  57. }
  58. cmd := m.SetUsingOrgCommand{
  59. UserId: c.UserId,
  60. OrgId: orgId,
  61. }
  62. if err := bus.Dispatch(&cmd); err != nil {
  63. c.JsonApiErr(500, "Failed change active organization", err)
  64. return
  65. }
  66. c.JsonOK("Active organization changed")
  67. }
  68. func ChangeUserPassword(c *middleware.Context, cmd m.ChangeUserPasswordCommand) {
  69. userQuery := m.GetUserByIdQuery{Id: c.UserId}
  70. if err := bus.Dispatch(&userQuery); err != nil {
  71. c.JsonApiErr(500, "Could not read user from database", err)
  72. return
  73. }
  74. passwordHashed := util.EncodePassword(cmd.OldPassword, userQuery.Result.Salt)
  75. if passwordHashed != userQuery.Result.Password {
  76. c.JsonApiErr(401, "Invalid old password", nil)
  77. return
  78. }
  79. if len(cmd.NewPassword) < 4 {
  80. c.JsonApiErr(400, "New password too short", nil)
  81. return
  82. }
  83. cmd.UserId = c.UserId
  84. cmd.NewPassword = util.EncodePassword(cmd.NewPassword, userQuery.Result.Salt)
  85. if err := bus.Dispatch(&cmd); err != nil {
  86. c.JsonApiErr(500, "Failed to change user password", err)
  87. return
  88. }
  89. c.JsonOK("User password changed")
  90. }