api_token.go 975 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. ID: p.UniqueID,
  27. CreatedAt: p.CreatedAt,
  28. ExpiresAt: *p.Expiry,
  29. PolicyName: p.PolicyName,
  30. PolicyUID: p.PolicyUID,
  31. Name: p.Name,
  32. }
  33. }
  34. func (p *APIToken) ToAPITokenType(policy []*types.PolicyDocument, token string) *types.APIToken {
  35. return &types.APIToken{
  36. APITokenMeta: p.ToAPITokenMetaType(),
  37. Policy: policy,
  38. Token: token,
  39. }
  40. }