accounts.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package sqlstore
  2. import (
  3. "strings"
  4. "time"
  5. "github.com/go-xorm/xorm"
  6. "github.com/torkelo/grafana-pro/pkg/bus"
  7. m "github.com/torkelo/grafana-pro/pkg/models"
  8. )
  9. func init() {
  10. bus.AddHandler("sql", GetAccountInfo)
  11. bus.AddHandler("sql", GetOtherAccounts)
  12. bus.AddHandler("sql", CreateAccount)
  13. bus.AddHandler("sql", SetUsingAccount)
  14. bus.AddHandler("sql", GetAccountById)
  15. bus.AddHandler("sql", GetAccountByLogin)
  16. bus.AddHandler("sql", GetAccountByToken)
  17. bus.AddHandler("sql", SearchAccounts)
  18. bus.AddHandler("sql", UpdateAccount)
  19. }
  20. func CreateAccount(cmd *m.CreateAccountCommand) error {
  21. return inTransaction(func(sess *xorm.Session) error {
  22. account := m.Account{
  23. Email: cmd.Email,
  24. Login: cmd.Login,
  25. Password: cmd.Password,
  26. Salt: cmd.Salt,
  27. IsAdmin: cmd.IsAdmin,
  28. Created: time.Now(),
  29. Updated: time.Now(),
  30. }
  31. sess.UseBool("is_admin")
  32. _, err := sess.Insert(&account)
  33. cmd.Result = account
  34. return err
  35. })
  36. }
  37. func UpdateAccount(cmd *m.UpdateAccountCommand) error {
  38. return inTransaction(func(sess *xorm.Session) error {
  39. account := m.Account{
  40. Email: cmd.Email,
  41. Login: cmd.Login,
  42. Name: cmd.Name,
  43. Updated: time.Now(),
  44. }
  45. _, err := sess.Id(cmd.AccountId).Update(&account)
  46. return err
  47. })
  48. }
  49. func SetUsingAccount(cmd *m.SetUsingAccountCommand) error {
  50. return inTransaction(func(sess *xorm.Session) error {
  51. account := m.Account{}
  52. sess.Id(cmd.AccountId).Get(&account)
  53. account.UsingAccountId = cmd.UsingAccountId
  54. _, err := sess.Id(account.Id).Update(&account)
  55. return err
  56. })
  57. }
  58. func GetAccountInfo(query *m.GetAccountInfoQuery) error {
  59. var account m.Account
  60. has, err := x.Id(query.Id).Get(&account)
  61. if err != nil {
  62. return err
  63. } else if has == false {
  64. return m.ErrAccountNotFound
  65. }
  66. query.Result = m.AccountDTO{
  67. Name: account.Name,
  68. Email: account.Email,
  69. Login: account.Login,
  70. }
  71. return err
  72. }
  73. func GetAccountById(query *m.GetAccountByIdQuery) error {
  74. var err error
  75. var account m.Account
  76. has, err := x.Id(query.Id).Get(&account)
  77. if err != nil {
  78. return err
  79. } else if has == false {
  80. return m.ErrAccountNotFound
  81. }
  82. if account.UsingAccountId == 0 {
  83. account.UsingAccountId = account.Id
  84. }
  85. query.Result = &account
  86. return nil
  87. }
  88. func GetAccountByToken(query *m.GetAccountByTokenQuery) error {
  89. var err error
  90. var account m.Account
  91. sess := x.Join("INNER", "token", "token.account_id = account.id")
  92. sess.Omit("token.id", "token.account_id", "token.name", "token.token",
  93. "token.role", "token.updated", "token.created")
  94. has, err := sess.Where("token.token=?", query.Token).Get(&account)
  95. if err != nil {
  96. return err
  97. } else if has == false {
  98. return m.ErrAccountNotFound
  99. }
  100. if account.UsingAccountId == 0 {
  101. account.UsingAccountId = account.Id
  102. }
  103. query.Result = &account
  104. return nil
  105. }
  106. func GetAccountByLogin(query *m.GetAccountByLoginQuery) error {
  107. if query.LoginOrEmail == "" {
  108. return m.ErrAccountNotFound
  109. }
  110. account := new(m.Account)
  111. if strings.Contains(query.LoginOrEmail, "@") {
  112. account = &m.Account{Email: query.LoginOrEmail}
  113. } else {
  114. account = &m.Account{Login: strings.ToLower(query.LoginOrEmail)}
  115. }
  116. has, err := x.Get(account)
  117. if err != nil {
  118. return err
  119. } else if has == false {
  120. return m.ErrAccountNotFound
  121. }
  122. if account.UsingAccountId == 0 {
  123. account.UsingAccountId = account.Id
  124. }
  125. query.Result = account
  126. return nil
  127. }
  128. func GetOtherAccounts(query *m.GetOtherAccountsQuery) error {
  129. query.Result = make([]*m.OtherAccountDTO, 0)
  130. sess := x.Table("collaborator")
  131. sess.Join("INNER", "account", "collaborator.account_id=account.id")
  132. sess.Where("collaborator_id=?", query.AccountId)
  133. sess.Cols("collaborator.account_id", "collaborator.role", "account.email")
  134. err := sess.Find(&query.Result)
  135. return err
  136. }
  137. func SearchAccounts(query *m.SearchAccountsQuery) error {
  138. query.Result = make([]*m.AccountSearchHitDTO, 0)
  139. sess := x.Table("account")
  140. sess.Where("email LIKE ?", query.Query+"%")
  141. sess.Limit(query.Limit, query.Limit*query.Page)
  142. sess.Cols("id", "email", "name", "login", "is_admin")
  143. err := sess.Find(&query.Result)
  144. return err
  145. }