api_token.go 949 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package models
  2. import (
  3. "time"
  4. "github.com/porter-dev/porter/api/types"
  5. "gorm.io/gorm"
  6. )
  7. type APIToken struct {
  8. gorm.Model
  9. UniqueID string `gorm:"unique"`
  10. ProjectID uint
  11. CreatedByUserID uint
  12. Expiry *time.Time
  13. Revoked bool
  14. PolicyUID string
  15. PolicyName string
  16. Name string
  17. // SecretKey is hashed like a password before storage
  18. SecretKey []byte
  19. }
  20. func (p *APIToken) IsExpired() bool {
  21. timeLeft := p.Expiry.Sub(time.Now())
  22. return timeLeft < 0
  23. }
  24. func (p *APIToken) ToAPITokenMetaType() *types.APITokenMeta {
  25. return &types.APITokenMeta{
  26. CreatedAt: p.CreatedAt,
  27. ExpiresAt: *p.Expiry,
  28. PolicyName: p.PolicyName,
  29. PolicyUID: p.PolicyUID,
  30. Name: p.Name,
  31. }
  32. }
  33. func (p *APIToken) ToAPITokenType(policy []*types.PolicyDocument, token string) *types.APIToken {
  34. return &types.APIToken{
  35. APITokenMeta: p.ToAPITokenMetaType(),
  36. Policy: policy,
  37. Token: token,
  38. }
  39. }