apikey.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package sqlstore
  2. import (
  3. "context"
  4. "time"
  5. "github.com/grafana/grafana/pkg/bus"
  6. "github.com/grafana/grafana/pkg/models"
  7. )
  8. func init() {
  9. bus.AddHandler("sql", GetApiKeys)
  10. bus.AddHandler("sql", GetApiKeyById)
  11. bus.AddHandler("sql", GetApiKeyByName)
  12. bus.AddHandlerCtx("sql", DeleteApiKeyCtx)
  13. bus.AddHandler("sql", AddApiKey)
  14. }
  15. func GetApiKeys(query *models.GetApiKeysQuery) error {
  16. sess := x.Limit(100, 0).Where("org_id=? and ( expires IS NULL or expires >= ?)",
  17. query.OrgId, timeNow().Unix()).Asc("name")
  18. if query.IncludeInvalid {
  19. sess = x.Limit(100, 0).Where("org_id=?", query.OrgId).Asc("name")
  20. }
  21. query.Result = make([]*models.ApiKey, 0)
  22. return sess.Find(&query.Result)
  23. }
  24. func DeleteApiKeyCtx(ctx context.Context, cmd *models.DeleteApiKeyCommand) error {
  25. return withDbSession(ctx, func(sess *DBSession) error {
  26. var rawSql = "DELETE FROM api_key WHERE id=? and org_id=?"
  27. _, err := sess.Exec(rawSql, cmd.Id, cmd.OrgId)
  28. return err
  29. })
  30. }
  31. func AddApiKey(cmd *models.AddApiKeyCommand) error {
  32. return inTransaction(func(sess *DBSession) error {
  33. key := models.ApiKey{OrgId: cmd.OrgId, Name: cmd.Name}
  34. exists, _ := sess.Get(&key)
  35. if exists {
  36. return models.ErrDuplicateApiKey
  37. }
  38. updated := timeNow()
  39. var expires *int64 = nil
  40. if cmd.SecondsToLive > 0 {
  41. v := updated.Add(time.Second * time.Duration(cmd.SecondsToLive)).Unix()
  42. expires = &v
  43. } else if cmd.SecondsToLive < 0 {
  44. return models.ErrInvalidApiKeyExpiration
  45. }
  46. t := models.ApiKey{
  47. OrgId: cmd.OrgId,
  48. Name: cmd.Name,
  49. Role: cmd.Role,
  50. Key: cmd.Key,
  51. Created: updated,
  52. Updated: updated,
  53. Expires: expires,
  54. }
  55. if _, err := sess.Insert(&t); err != nil {
  56. return err
  57. }
  58. cmd.Result = &t
  59. return nil
  60. })
  61. }
  62. func GetApiKeyById(query *models.GetApiKeyByIdQuery) error {
  63. var apikey models.ApiKey
  64. has, err := x.Id(query.ApiKeyId).Get(&apikey)
  65. if err != nil {
  66. return err
  67. } else if !has {
  68. return models.ErrInvalidApiKey
  69. }
  70. query.Result = &apikey
  71. return nil
  72. }
  73. func GetApiKeyByName(query *models.GetApiKeyByNameQuery) error {
  74. var apikey models.ApiKey
  75. has, err := x.Where("org_id=? AND name=?", query.OrgId, query.KeyName).Get(&apikey)
  76. if err != nil {
  77. return err
  78. } else if !has {
  79. return models.ErrInvalidApiKey
  80. }
  81. query.Result = &apikey
  82. return nil
  83. }