model.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package authtoken
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/grafana/grafana/pkg/services/auth"
  6. )
  7. // Typed errors
  8. var (
  9. ErrAuthTokenNotFound = errors.New("user auth token not found")
  10. )
  11. type userAuthToken struct {
  12. Id int64
  13. UserId int64
  14. AuthToken string
  15. PrevAuthToken string
  16. UserAgent string
  17. ClientIp string
  18. AuthTokenSeen bool
  19. SeenAt int64
  20. RotatedAt int64
  21. CreatedAt int64
  22. UpdatedAt int64
  23. UnhashedToken string `xorm:"-"`
  24. }
  25. func (uat *userAuthToken) toUserToken() (auth.UserToken, error) {
  26. if uat == nil {
  27. return nil, fmt.Errorf("needs pointer to userAuthToken struct")
  28. }
  29. return &userTokenImpl{
  30. userAuthToken: uat,
  31. }, nil
  32. }
  33. type userToken interface {
  34. auth.UserToken
  35. GetModel() *userAuthToken
  36. }
  37. type userTokenImpl struct {
  38. *userAuthToken
  39. }
  40. func (ut *userTokenImpl) GetUserId() int64 {
  41. return ut.UserId
  42. }
  43. func (ut *userTokenImpl) GetToken() string {
  44. return ut.UnhashedToken
  45. }
  46. func (ut *userTokenImpl) GetModel() *userAuthToken {
  47. return ut.userAuthToken
  48. }
  49. func extractModelFromToken(token auth.UserToken) (*userAuthToken, error) {
  50. ut, ok := token.(userToken)
  51. if !ok {
  52. return nil, fmt.Errorf("failed to cast token")
  53. }
  54. return ut.GetModel(), nil
  55. }
  56. // UserAuthTokenService are used for generating and validating user auth tokens
  57. type UserAuthTokenService interface {
  58. CreateToken(userId int64, clientIP, userAgent string) (auth.UserToken, error)
  59. LookupToken(unhashedToken string) (auth.UserToken, error)
  60. TryRotateToken(token auth.UserToken, clientIP, userAgent string) (bool, error)
  61. RevokeToken(token auth.UserToken) error
  62. }