org_invite.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 GetPendingOrgInvites(c *middleware.Context) Response {
  10. query := m.GetTempUsersForOrgQuery{OrgId: c.OrgId}
  11. if err := bus.Dispatch(&query); err != nil {
  12. return ApiError(500, "Failed to get invites from db", err)
  13. }
  14. return Json(200, query.Result)
  15. }
  16. func AddOrgInvite(c *middleware.Context, inviteDto dtos.AddInviteForm) Response {
  17. if !inviteDto.Role.IsValid() {
  18. return ApiError(400, "Invalid role specified", nil)
  19. }
  20. // first try get existing user
  21. userQuery := m.GetUserByLoginQuery{LoginOrEmail: inviteDto.Email}
  22. if err := bus.Dispatch(&userQuery); err != nil {
  23. if err != m.ErrUserNotFound {
  24. return ApiError(500, "Failed to query db for existing user check", err)
  25. }
  26. } else {
  27. // user exists, add org role
  28. createOrgUserCmd := m.AddOrgUserCommand{OrgId: c.OrgId, UserId: userQuery.Result.Id, Role: inviteDto.Role}
  29. if err := bus.Dispatch(&createOrgUserCmd); err != nil {
  30. return ApiError(500, "Error while trying to create org user", err)
  31. } else {
  32. return ApiSuccess("Existing Grafana user added to org " + c.OrgName)
  33. }
  34. }
  35. cmd := m.CreateTempUserCommand{}
  36. cmd.OrgId = c.OrgId
  37. cmd.Email = inviteDto.Email
  38. cmd.Name = inviteDto.Name
  39. cmd.IsInvite = true
  40. cmd.InvitedByUserId = c.UserId
  41. cmd.Code = util.GetRandomString(30)
  42. cmd.Role = inviteDto.Role
  43. if err := bus.Dispatch(&cmd); err != nil {
  44. return ApiError(500, "Failed to save invite to database", err)
  45. }
  46. return ApiSuccess("ok, done!")
  47. }