mirror of
https://github.com/gravitl/netmaker.git
synced 2026-04-22 16:07:11 +08:00
c2423bf20b
* NM-213: JIT access * NM-213: handle expiry duration in epoch * NM-213: avoid jit checks for admins * NM-213: add jit expiry field to extclient * NM-213: format jit emails * NM-213: format jit email templates * NM-213: update jit expiry on existing clients * NM-213: update jit expiry on existing clients
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package schema
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/gravitl/netmaker/db"
|
|
)
|
|
|
|
const jitGrantTable = "jit_grants"
|
|
|
|
type JITGrant struct {
|
|
ID string `gorm:"primaryKey" json:"id"`
|
|
NetworkID string `gorm:"network_id" json:"network_id"`
|
|
UserID string `gorm:"user_id" json:"user_id"`
|
|
RequestID string `gorm:"request_id" json:"request_id"`
|
|
GrantedAt time.Time `gorm:"granted_at" json:"granted_at"`
|
|
ExpiresAt time.Time `gorm:"expires_at" json:"expires_at"`
|
|
}
|
|
|
|
func (g *JITGrant) Table() string {
|
|
return jitGrantTable
|
|
}
|
|
|
|
func (g *JITGrant) Get(ctx context.Context) error {
|
|
return db.FromContext(ctx).Table(g.Table()).Where("id = ?", g.ID).First(&g).Error
|
|
}
|
|
|
|
func (g *JITGrant) Create(ctx context.Context) error {
|
|
return db.FromContext(ctx).Table(g.Table()).Create(&g).Error
|
|
}
|
|
|
|
func (g *JITGrant) Delete(ctx context.Context) error {
|
|
return db.FromContext(ctx).Table(g.Table()).Where("id = ?", g.ID).Delete(&g).Error
|
|
}
|
|
|
|
func (g *JITGrant) GetActiveByUserAndNetwork(ctx context.Context) (*JITGrant, error) {
|
|
var grant JITGrant
|
|
err := db.FromContext(ctx).Table(g.Table()).
|
|
Where("network_id = ? AND user_id = ? AND expires_at > ?",
|
|
g.NetworkID, g.UserID, time.Now()).
|
|
First(&grant).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &grant, nil
|
|
}
|
|
|
|
func (g *JITGrant) ListActiveByNetwork(ctx context.Context) ([]JITGrant, error) {
|
|
var grants []JITGrant
|
|
err := db.FromContext(ctx).Table(g.Table()).
|
|
Where("network_id = ? AND expires_at > ?", g.NetworkID, time.Now()).
|
|
Find(&grants).Error
|
|
return grants, err
|
|
}
|
|
|
|
func (g *JITGrant) ListExpired(ctx context.Context) ([]JITGrant, error) {
|
|
var grants []JITGrant
|
|
err := db.FromContext(ctx).Table(g.Table()).
|
|
Where("expires_at <= ?", time.Now()).
|
|
Find(&grants).Error
|
|
return grants, err
|
|
}
|
|
|
|
func (g *JITGrant) ListByUserAndNetwork(ctx context.Context) ([]JITGrant, error) {
|
|
var grants []JITGrant
|
|
err := db.FromContext(ctx).Table(g.Table()).
|
|
Where("network_id = ? AND user_id = ?", g.NetworkID, g.UserID).
|
|
Find(&grants).Error
|
|
return grants, err
|
|
}
|
|
|
|
func (g *JITGrant) GetByRequestID(ctx context.Context) (*JITGrant, error) {
|
|
var grant JITGrant
|
|
err := db.FromContext(ctx).Table(g.Table()).
|
|
Where("request_id = ?", g.RequestID).
|
|
First(&grant).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &grant, nil
|
|
}
|