package jwt import ( "database/sql" "github.com/google/uuid" ) type Token interface { GetJTI() uuid.UUID GetEXP() int64 GetScope() string Revoke(*sql.Tx) error CheckNotRevoked(*sql.Tx) (bool, error) } // Access token type AccessToken struct { ISS string // Issuer, generally TrustedHost IAT int64 // Time issued at EXP int64 // Time expiring at TTL string // Time-to-live: "session" or "exp". Used with 'remember me' SUB int // Subject (user) ID JTI uuid.UUID // UUID-4 used for identifying blacklisted tokens Fresh int64 // Time freshness expiring at Scope string // Should be "access" gen *TokenGenerator } // Refresh token type RefreshToken struct { ISS string // Issuer, generally TrustedHost IAT int64 // Time issued at EXP int64 // Time expiring at TTL string // Time-to-live: "session" or "exp". Used with 'remember me' SUB int // Subject (user) ID JTI uuid.UUID // UUID-4 used for identifying blacklisted tokens Scope string // Should be "refresh" gen *TokenGenerator } func (a AccessToken) GetJTI() uuid.UUID { return a.JTI } func (r RefreshToken) GetJTI() uuid.UUID { return r.JTI } func (a AccessToken) GetEXP() int64 { return a.EXP } func (r RefreshToken) GetEXP() int64 { return r.EXP } func (a AccessToken) GetScope() string { return a.Scope } func (r RefreshToken) GetScope() string { return r.Scope } func (a AccessToken) Revoke(tx *sql.Tx) error { return a.gen.revoke(tx, a) } func (r RefreshToken) Revoke(tx *sql.Tx) error { return r.gen.revoke(tx, r) } func (a AccessToken) CheckNotRevoked(tx *sql.Tx) (bool, error) { return a.gen.checkNotRevoked(tx, a) } func (r RefreshToken) CheckNotRevoked(tx *sql.Tx) (bool, error) { return r.gen.checkNotRevoked(tx, r) }