jit_grant.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package schema
  2. import (
  3. "context"
  4. "time"
  5. "github.com/gravitl/netmaker/db"
  6. )
  7. const jitGrantTable = "jit_grants"
  8. type JITGrant struct {
  9. ID string `gorm:"primaryKey" json:"id"`
  10. NetworkID string `gorm:"network_id" json:"network_id"`
  11. UserID string `gorm:"user_id" json:"user_id"`
  12. RequestID string `gorm:"request_id" json:"request_id"`
  13. GrantedAt time.Time `gorm:"granted_at" json:"granted_at"`
  14. ExpiresAt time.Time `gorm:"expires_at" json:"expires_at"`
  15. }
  16. func (g *JITGrant) Table() string {
  17. return jitGrantTable
  18. }
  19. func (g *JITGrant) Get(ctx context.Context) error {
  20. return db.FromContext(ctx).Table(g.Table()).Where("id = ?", g.ID).First(&g).Error
  21. }
  22. func (g *JITGrant) Create(ctx context.Context) error {
  23. return db.FromContext(ctx).Table(g.Table()).Create(&g).Error
  24. }
  25. func (g *JITGrant) Delete(ctx context.Context) error {
  26. return db.FromContext(ctx).Table(g.Table()).Where("id = ?", g.ID).Delete(&g).Error
  27. }
  28. func (g *JITGrant) GetActiveByUserAndNetwork(ctx context.Context) (*JITGrant, error) {
  29. var grant JITGrant
  30. err := db.FromContext(ctx).Table(g.Table()).
  31. Where("network_id = ? AND user_id = ? AND expires_at > ?",
  32. g.NetworkID, g.UserID, time.Now()).
  33. First(&grant).Error
  34. if err != nil {
  35. return nil, err
  36. }
  37. return &grant, nil
  38. }
  39. func (g *JITGrant) ListActiveByNetwork(ctx context.Context) ([]JITGrant, error) {
  40. var grants []JITGrant
  41. err := db.FromContext(ctx).Table(g.Table()).
  42. Where("network_id = ? AND expires_at > ?", g.NetworkID, time.Now()).
  43. Find(&grants).Error
  44. return grants, err
  45. }
  46. func (g *JITGrant) ListExpired(ctx context.Context) ([]JITGrant, error) {
  47. var grants []JITGrant
  48. err := db.FromContext(ctx).Table(g.Table()).
  49. Where("expires_at <= ?", time.Now()).
  50. Find(&grants).Error
  51. return grants, err
  52. }
  53. func (g *JITGrant) ListByUserAndNetwork(ctx context.Context) ([]JITGrant, error) {
  54. var grants []JITGrant
  55. err := db.FromContext(ctx).Table(g.Table()).
  56. Where("network_id = ? AND user_id = ?", g.NetworkID, g.UserID).
  57. Find(&grants).Error
  58. return grants, err
  59. }
  60. func (g *JITGrant) GetByRequestID(ctx context.Context) (*JITGrant, error) {
  61. var grant JITGrant
  62. err := db.FromContext(ctx).Table(g.Table()).
  63. Where("request_id = ?", g.RequestID).
  64. First(&grant).Error
  65. if err != nil {
  66. return nil, err
  67. }
  68. return &grant, nil
  69. }