| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- package models
- import (
- "errors"
- "time"
- )
- // Typed errors
- var (
- ErrUserNotFound = errors.New("User not found")
- ErrLastGrafanaAdmin = errors.New("Cannot remove last grafana admin")
- )
- type Password string
- func (p Password) IsWeak() bool {
- return len(p) <= 4
- }
- type User struct {
- Id int64
- Version int
- Email string
- Name string
- Login string
- Password string
- Salt string
- Rands string
- Company string
- EmailVerified bool
- Theme string
- HelpFlags1 HelpFlags1
- IsAdmin bool
- OrgId int64
- Created time.Time
- Updated time.Time
- LastSeenAt time.Time
- }
- func (u *User) NameOrFallback() string {
- if u.Name != "" {
- return u.Name
- } else if u.Login != "" {
- return u.Login
- } else {
- return u.Email
- }
- }
- // ---------------------
- // COMMANDS
- type CreateUserCommand struct {
- Email string
- Login string
- Name string
- Company string
- OrgName string
- Password string
- EmailVerified bool
- IsAdmin bool
- SkipOrgSetup bool
- DefaultOrgRole string
- Result User
- }
- type UpdateUserCommand struct {
- Name string `json:"name"`
- Email string `json:"email"`
- Login string `json:"login"`
- Theme string `json:"theme"`
- UserId int64 `json:"-"`
- }
- type ChangeUserPasswordCommand struct {
- OldPassword string `json:"oldPassword"`
- NewPassword string `json:"newPassword"`
- UserId int64 `json:"-"`
- }
- type UpdateUserPermissionsCommand struct {
- IsGrafanaAdmin bool
- UserId int64 `json:"-"`
- }
- type DeleteUserCommand struct {
- UserId int64
- }
- type SetUsingOrgCommand struct {
- UserId int64
- OrgId int64
- }
- // ----------------------
- // QUERIES
- type GetUserByLoginQuery struct {
- LoginOrEmail string
- Result *User
- }
- type GetUserByEmailQuery struct {
- Email string
- Result *User
- }
- type GetUserByIdQuery struct {
- Id int64
- Result *User
- }
- type GetSignedInUserQuery struct {
- UserId int64
- Login string
- Email string
- OrgId int64
- Result *SignedInUser
- }
- type GetUserProfileQuery struct {
- UserId int64
- Result UserProfileDTO
- }
- type SearchUsersQuery struct {
- OrgId int64
- Query string
- Page int
- Limit int
- Result SearchUserQueryResult
- }
- type SearchUserQueryResult struct {
- TotalCount int64 `json:"totalCount"`
- Users []*UserSearchHitDTO `json:"users"`
- Page int `json:"page"`
- PerPage int `json:"perPage"`
- }
- type GetUserOrgListQuery struct {
- UserId int64
- Result []*UserOrgDTO
- }
- // ------------------------
- // DTO & Projections
- type SignedInUser struct {
- UserId int64
- OrgId int64
- OrgName string
- OrgRole RoleType
- Login string
- Name string
- Email string
- ApiKeyId int64
- OrgCount int
- IsGrafanaAdmin bool
- IsAnonymous bool
- HelpFlags1 HelpFlags1
- LastSeenAt time.Time
- Teams []int64
- }
- func (u *SignedInUser) ShouldUpdateLastSeenAt() bool {
- return u.UserId > 0 && time.Since(u.LastSeenAt) > time.Minute*5
- }
- func (u *SignedInUser) NameOrFallback() string {
- if u.Name != "" {
- return u.Name
- } else if u.Login != "" {
- return u.Login
- } else {
- return u.Email
- }
- }
- type UpdateUserLastSeenAtCommand struct {
- UserId int64
- }
- func (user *SignedInUser) HasRole(role RoleType) bool {
- if user.IsGrafanaAdmin {
- return true
- }
- return user.OrgRole.Includes(role)
- }
- type UserProfileDTO struct {
- Id int64 `json:"id"`
- Email string `json:"email"`
- Name string `json:"name"`
- Login string `json:"login"`
- Theme string `json:"theme"`
- OrgId int64 `json:"orgId"`
- IsGrafanaAdmin bool `json:"isGrafanaAdmin"`
- }
- type UserSearchHitDTO struct {
- Id int64 `json:"id"`
- Name string `json:"name"`
- Login string `json:"login"`
- Email string `json:"email"`
- AvatarUrl string `json:"avatarUrl"`
- IsAdmin bool `json:"isAdmin"`
- LastSeenAt time.Time `json:"lastSeenAt"`
- LastSeenAtAge string `json:"lastSeenAtAge"`
- }
- type UserIdDTO struct {
- Id int64 `json:"id"`
- Message string `json:"message"`
- }
|