apikey.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. updated := timeNow()
  34. var expires *int64 = nil
  35. if cmd.SecondsToLive > 0 {
  36. v := updated.Add(time.Second * time.Duration(cmd.SecondsToLive)).Unix()
  37. expires = &v
  38. } else if cmd.SecondsToLive < 0 {
  39. return models.ErrInvalidApiKeyExpiration
  40. }
  41. t := models.ApiKey{
  42. OrgId: cmd.OrgId,
  43. Name: cmd.Name,
  44. Role: cmd.Role,
  45. Key: cmd.Key,
  46. Created: updated,
  47. Updated: updated,
  48. Expires: expires,
  49. }
  50. if _, err := sess.Insert(&t); err != nil {
  51. return err
  52. }
  53. cmd.Result = &t
  54. return nil
  55. })
  56. }
  57. func GetApiKeyById(query *models.GetApiKeyByIdQuery) error {
  58. var apikey models.ApiKey
  59. has, err := x.Id(query.ApiKeyId).Get(&apikey)
  60. if err != nil {
  61. return err
  62. } else if !has {
  63. return models.ErrInvalidApiKey
  64. }
  65. query.Result = &apikey
  66. return nil
  67. }
  68. func GetApiKeyByName(query *models.GetApiKeyByNameQuery) error {
  69. var apikey models.ApiKey
  70. has, err := x.Where("org_id=? AND name=?", query.OrgId, query.KeyName).Get(&apikey)
  71. if err != nil {
  72. return err
  73. } else if !has {
  74. return models.ErrInvalidApiKey
  75. }
  76. query.Result = &apikey
  77. return nil
  78. }