user.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package models
  2. import (
  3. "errors"
  4. "time"
  5. )
  6. // Typed errors
  7. var (
  8. ErrUserNotFound = errors.New("User not found")
  9. ErrLastGrafanaAdmin = errors.New("Cannot remove last grafana admin")
  10. )
  11. type Password string
  12. func (p Password) IsWeak() bool {
  13. return len(p) <= 4
  14. }
  15. type User struct {
  16. Id int64
  17. Version int
  18. Email string
  19. Name string
  20. Login string
  21. Password string
  22. Salt string
  23. Rands string
  24. Company string
  25. EmailVerified bool
  26. Theme string
  27. HelpFlags1 HelpFlags1
  28. IsAdmin bool
  29. OrgId int64
  30. Created time.Time
  31. Updated time.Time
  32. LastSeenAt time.Time
  33. }
  34. func (u *User) NameOrFallback() string {
  35. if u.Name != "" {
  36. return u.Name
  37. } else if u.Login != "" {
  38. return u.Login
  39. } else {
  40. return u.Email
  41. }
  42. }
  43. // ---------------------
  44. // COMMANDS
  45. type CreateUserCommand struct {
  46. Email string
  47. Login string
  48. Name string
  49. Company string
  50. OrgName string
  51. Password string
  52. EmailVerified bool
  53. IsAdmin bool
  54. SkipOrgSetup bool
  55. DefaultOrgRole string
  56. Result User
  57. }
  58. type UpdateUserCommand struct {
  59. Name string `json:"name"`
  60. Email string `json:"email"`
  61. Login string `json:"login"`
  62. Theme string `json:"theme"`
  63. UserId int64 `json:"-"`
  64. }
  65. type ChangeUserPasswordCommand struct {
  66. OldPassword string `json:"oldPassword"`
  67. NewPassword string `json:"newPassword"`
  68. UserId int64 `json:"-"`
  69. }
  70. type UpdateUserPermissionsCommand struct {
  71. IsGrafanaAdmin bool
  72. UserId int64 `json:"-"`
  73. }
  74. type DeleteUserCommand struct {
  75. UserId int64
  76. }
  77. type SetUsingOrgCommand struct {
  78. UserId int64
  79. OrgId int64
  80. }
  81. // ----------------------
  82. // QUERIES
  83. type GetUserByLoginQuery struct {
  84. LoginOrEmail string
  85. Result *User
  86. }
  87. type GetUserByEmailQuery struct {
  88. Email string
  89. Result *User
  90. }
  91. type GetUserByIdQuery struct {
  92. Id int64
  93. Result *User
  94. }
  95. type GetSignedInUserQuery struct {
  96. UserId int64
  97. Login string
  98. Email string
  99. OrgId int64
  100. Result *SignedInUser
  101. }
  102. type GetUserProfileQuery struct {
  103. UserId int64
  104. Result UserProfileDTO
  105. }
  106. type SearchUsersQuery struct {
  107. OrgId int64
  108. Query string
  109. Page int
  110. Limit int
  111. Result SearchUserQueryResult
  112. }
  113. type SearchUserQueryResult struct {
  114. TotalCount int64 `json:"totalCount"`
  115. Users []*UserSearchHitDTO `json:"users"`
  116. Page int `json:"page"`
  117. PerPage int `json:"perPage"`
  118. }
  119. type GetUserOrgListQuery struct {
  120. UserId int64
  121. Result []*UserOrgDTO
  122. }
  123. // ------------------------
  124. // DTO & Projections
  125. type SignedInUser struct {
  126. UserId int64
  127. OrgId int64
  128. OrgName string
  129. OrgRole RoleType
  130. Login string
  131. Name string
  132. Email string
  133. ApiKeyId int64
  134. OrgCount int
  135. IsGrafanaAdmin bool
  136. IsAnonymous bool
  137. HelpFlags1 HelpFlags1
  138. LastSeenAt time.Time
  139. Teams []int64
  140. }
  141. func (u *SignedInUser) ShouldUpdateLastSeenAt() bool {
  142. return u.UserId > 0 && time.Since(u.LastSeenAt) > time.Minute*5
  143. }
  144. func (u *SignedInUser) NameOrFallback() string {
  145. if u.Name != "" {
  146. return u.Name
  147. } else if u.Login != "" {
  148. return u.Login
  149. } else {
  150. return u.Email
  151. }
  152. }
  153. type UpdateUserLastSeenAtCommand struct {
  154. UserId int64
  155. }
  156. func (user *SignedInUser) HasRole(role RoleType) bool {
  157. if user.IsGrafanaAdmin {
  158. return true
  159. }
  160. return user.OrgRole.Includes(role)
  161. }
  162. type UserProfileDTO struct {
  163. Id int64 `json:"id"`
  164. Email string `json:"email"`
  165. Name string `json:"name"`
  166. Login string `json:"login"`
  167. Theme string `json:"theme"`
  168. OrgId int64 `json:"orgId"`
  169. IsGrafanaAdmin bool `json:"isGrafanaAdmin"`
  170. }
  171. type UserSearchHitDTO struct {
  172. Id int64 `json:"id"`
  173. Name string `json:"name"`
  174. Login string `json:"login"`
  175. Email string `json:"email"`
  176. AvatarUrl string `json:"avatarUrl"`
  177. IsAdmin bool `json:"isAdmin"`
  178. LastSeenAt time.Time `json:"lastSeenAt"`
  179. LastSeenAtAge string `json:"lastSeenAtAge"`
  180. }
  181. type UserIdDTO struct {
  182. Id int64 `json:"id"`
  183. Message string `json:"message"`
  184. }