admin_users.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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/metrics"
  6. "github.com/grafana/grafana/pkg/middleware"
  7. m "github.com/grafana/grafana/pkg/models"
  8. "github.com/grafana/grafana/pkg/util"
  9. )
  10. func AdminSearchUsers(c *middleware.Context) {
  11. query := m.SearchUsersQuery{Query: "", Page: 0, Limit: 1000}
  12. if err := bus.Dispatch(&query); err != nil {
  13. c.JsonApiErr(500, "Failed to fetch users", err)
  14. return
  15. }
  16. c.JSON(200, query.Result)
  17. }
  18. func AdminCreateUser(c *middleware.Context, form dtos.AdminCreateUserForm) {
  19. cmd := m.CreateUserCommand{
  20. Login: form.Login,
  21. Email: form.Email,
  22. Password: form.Password,
  23. Name: form.Name,
  24. }
  25. if len(cmd.Login) == 0 {
  26. cmd.Login = cmd.Email
  27. if len(cmd.Login) == 0 {
  28. c.JsonApiErr(400, "Validation error, need specify either username or email", nil)
  29. return
  30. }
  31. }
  32. if len(cmd.Password) < 4 {
  33. c.JsonApiErr(400, "Password is missing or too short", nil)
  34. return
  35. }
  36. if err := bus.Dispatch(&cmd); err != nil {
  37. c.JsonApiErr(500, "failed to create user", err)
  38. return
  39. }
  40. metrics.M_Api_Admin_User_Create.Inc(1)
  41. c.JsonOK("User created")
  42. }
  43. func AdminUpdateUserPassword(c *middleware.Context, form dtos.AdminUpdateUserPasswordForm) {
  44. userId := c.ParamsInt64(":id")
  45. if len(form.Password) < 4 {
  46. c.JsonApiErr(400, "New password too short", nil)
  47. return
  48. }
  49. userQuery := m.GetUserByIdQuery{Id: userId}
  50. if err := bus.Dispatch(&userQuery); err != nil {
  51. c.JsonApiErr(500, "Could not read user from database", err)
  52. return
  53. }
  54. passwordHashed := util.EncodePassword(form.Password, userQuery.Result.Salt)
  55. cmd := m.ChangeUserPasswordCommand{
  56. UserId: userId,
  57. NewPassword: passwordHashed,
  58. }
  59. if err := bus.Dispatch(&cmd); err != nil {
  60. c.JsonApiErr(500, "Failed to update user password", err)
  61. return
  62. }
  63. c.JsonOK("User password updated")
  64. }
  65. func AdminUpdateUserPermissions(c *middleware.Context, form dtos.AdminUpdateUserPermissionsForm) {
  66. userId := c.ParamsInt64(":id")
  67. cmd := m.UpdateUserPermissionsCommand{
  68. UserId: userId,
  69. IsGrafanaAdmin: form.IsGrafanaAdmin,
  70. }
  71. if err := bus.Dispatch(&cmd); err != nil {
  72. c.JsonApiErr(500, "Failed to update user permissions", err)
  73. return
  74. }
  75. c.JsonOK("User permissions updated")
  76. }
  77. func AdminDeleteUser(c *middleware.Context) {
  78. userId := c.ParamsInt64(":id")
  79. cmd := m.DeleteUserCommand{UserId: userId}
  80. if err := bus.Dispatch(&cmd); err != nil {
  81. c.JsonApiErr(500, "Failed to delete user", err)
  82. return
  83. }
  84. c.JsonOK("User deleted")
  85. }