user.go 3.7 KB

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