jwt

package
v0.2.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 8, 2025 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BlacklistedToken

type BlacklistedToken struct {
	model.Base
	TokenHash string    `gorm:"uniqueIndex;not null" json:"token_hash"`
	ExpiresAt time.Time `gorm:"not null;index" json:"expires_at"`
	Token     string    `gorm:"-" json:"-"` // Don't store the actual token
}

BlacklistedToken represents a blacklisted token in the database

type Claims

type Claims struct {
	UserID     string `json:"user_id"`
	Email      string `json:"email"`
	Username   string `json:"username"`
	IsVerified bool   `json:"is_verified"`
	jwt.RegisteredClaims
}

type DatabaseJWTService

type DatabaseJWTService struct {
	// contains filtered or unexported fields
}

DatabaseJWTService uses database for token blacklisting instead of Redis

func NewDatabaseJWTService

func NewDatabaseJWTService(secretKey string, tokenExpiry, refreshExpiry time.Duration, db *gorm.DB) *DatabaseJWTService

NewDatabaseJWTService creates a JWT service that uses database for token storage

func (*DatabaseJWTService) BlacklistToken

func (j *DatabaseJWTService) BlacklistToken(tokenString string) error

BlacklistToken adds a token to the blacklist

func (*DatabaseJWTService) ExtractTokenFromHeader

func (j *DatabaseJWTService) ExtractTokenFromHeader(authHeader string) (string, error)

ExtractTokenFromHeader extracts JWT token from Authorization header

func (*DatabaseJWTService) GenerateTokenPair

func (j *DatabaseJWTService) GenerateTokenPair(user *userModel.User) (*TokenPair, error)

GenerateTokenPair generates both access and refresh tokens for a user

func (*DatabaseJWTService) GetBlacklistedTokenCount

func (j *DatabaseJWTService) GetBlacklistedTokenCount() (int64, error)

GetBlacklistedTokenCount returns the number of blacklisted tokens

func (*DatabaseJWTService) GetUserFromToken

func (j *DatabaseJWTService) GetUserFromToken(tokenString string) (*userModel.User, error)

GetUserFromToken extracts user information from token claims

func (*DatabaseJWTService) IsTokenBlacklisted

func (j *DatabaseJWTService) IsTokenBlacklisted(tokenString string) bool

IsTokenBlacklisted checks if a token is blacklisted

func (*DatabaseJWTService) RefreshToken

func (j *DatabaseJWTService) RefreshToken(refreshToken string, user *userModel.User) (string, error)

RefreshToken generates a new access token from a valid refresh token

func (*DatabaseJWTService) ValidateToken

func (j *DatabaseJWTService) ValidateToken(tokenString string) (*Claims, error)

ValidateToken validates a JWT token and returns the claims

type DatabaseTokenBlacklist

type DatabaseTokenBlacklist struct {
	// contains filtered or unexported fields
}

DatabaseTokenBlacklist manages blacklisted JWT tokens using database

func NewDatabaseTokenBlacklist

func NewDatabaseTokenBlacklist(db *gorm.DB) *DatabaseTokenBlacklist

NewDatabaseTokenBlacklist creates a new database-based token blacklist

func (*DatabaseTokenBlacklist) BlacklistToken

func (dtb *DatabaseTokenBlacklist) BlacklistToken(token string, expiresAt time.Time) error

BlacklistToken adds a token to the database blacklist with expiration

func (*DatabaseTokenBlacklist) ClearExpiredTokens

func (dtb *DatabaseTokenBlacklist) ClearExpiredTokens() error

ClearExpiredTokens removes expired tokens from the database

func (*DatabaseTokenBlacklist) GetBlacklistedCount

func (dtb *DatabaseTokenBlacklist) GetBlacklistedCount() (int64, error)

GetBlacklistedCount returns the number of active blacklisted tokens

func (*DatabaseTokenBlacklist) GetExpiredTokenCount

func (dtb *DatabaseTokenBlacklist) GetExpiredTokenCount() (int64, error)

GetExpiredTokenCount returns the number of expired tokens that can be cleaned up

func (*DatabaseTokenBlacklist) GetTotalTokenCount

func (dtb *DatabaseTokenBlacklist) GetTotalTokenCount() (int64, error)

GetTotalTokenCount returns the total number of tokens in the blacklist (including expired)

func (*DatabaseTokenBlacklist) IsTokenBlacklisted

func (dtb *DatabaseTokenBlacklist) IsTokenBlacklisted(token string) bool

IsTokenBlacklisted checks if a token is in the database blacklist

type JWTService

type JWTService struct {
	// contains filtered or unexported fields
}

func NewJWTService

func NewJWTService(secretKey string, tokenExpiry, refreshExpiry time.Duration, redisClient *redis.Client) *JWTService

func (*JWTService) BlacklistToken

func (j *JWTService) BlacklistToken(tokenString string) error

BlacklistToken adds a token to the blacklist

func (*JWTService) ExtractTokenFromHeader

func (j *JWTService) ExtractTokenFromHeader(authHeader string) (string, error)

ExtractTokenFromHeader extracts JWT token from Authorization header

func (*JWTService) GenerateTokenPair

func (j *JWTService) GenerateTokenPair(user *userModel.User) (*TokenPair, error)

GenerateTokenPair generates both access and refresh tokens for a user

func (*JWTService) GetBlacklistedTokenCount

func (j *JWTService) GetBlacklistedTokenCount() (int64, error)

GetBlacklistedTokenCount returns the number of blacklisted tokens

func (*JWTService) GetUserFromToken

func (j *JWTService) GetUserFromToken(tokenString string) (*userModel.User, error)

GetUserFromToken extracts user information from token claims

func (*JWTService) IsTokenBlacklisted

func (j *JWTService) IsTokenBlacklisted(tokenString string) bool

IsTokenBlacklisted checks if a token is blacklisted

func (*JWTService) RefreshToken

func (j *JWTService) RefreshToken(refreshToken string, user *userModel.User) (string, error)

RefreshToken generates a new access token from a valid refresh token

func (*JWTService) ValidateToken

func (j *JWTService) ValidateToken(tokenString string) (*Claims, error)

ValidateToken validates a JWT token and returns the claims

type JWTServiceInterface

type JWTServiceInterface interface {
	GenerateTokenPair(user *userModel.User) (*TokenPair, error)
	ValidateToken(tokenString string) (*Claims, error)
	RefreshToken(refreshToken string, user *userModel.User) (string, error)
	BlacklistToken(tokenString string) error
	IsTokenBlacklisted(tokenString string) bool
	ExtractTokenFromHeader(authHeader string) (string, error)
	GetUserFromToken(tokenString string) (*userModel.User, error)
}

JWTServiceInterface defines the interface for JWT operations

func NewJWTServiceFactory

func NewJWTServiceFactory(secretKey string, tokenExpiry, refreshExpiry time.Duration, redisClient *redis.Client, db *gorm.DB) JWTServiceInterface

NewJWTServiceFactory creates JWT service based on environment configuration

type RedisTokenBlacklist

type RedisTokenBlacklist struct {
	// contains filtered or unexported fields
}

RedisTokenBlacklist manages blacklisted JWT tokens using Redis

func NewRedisTokenBlacklist

func NewRedisTokenBlacklist(client *redis.Client, prefix string) *RedisTokenBlacklist

NewRedisTokenBlacklist creates a new Redis-based token blacklist

func (*RedisTokenBlacklist) BlacklistToken

func (rtb *RedisTokenBlacklist) BlacklistToken(token string, expiresAt time.Time) error

BlacklistToken adds a token to the Redis blacklist with TTL based on expiration

func (*RedisTokenBlacklist) ClearExpiredTokens

func (rtb *RedisTokenBlacklist) ClearExpiredTokens() error

ClearExpiredTokens manually removes expired tokens (Redis TTL handles this automatically) This method is mainly for compatibility and monitoring

func (*RedisTokenBlacklist) CloseConnection

func (rtb *RedisTokenBlacklist) CloseConnection() error

CloseConnection closes the Redis connection

func (*RedisTokenBlacklist) GetBlacklistedCount

func (rtb *RedisTokenBlacklist) GetBlacklistedCount() (int64, error)

GetBlacklistedCount returns the number of blacklisted tokens in Redis

func (*RedisTokenBlacklist) IsTokenBlacklisted

func (rtb *RedisTokenBlacklist) IsTokenBlacklisted(token string) bool

IsTokenBlacklisted checks if a token is in the Redis blacklist

type TokenPair

type TokenPair struct {
	AccessToken  string `json:"access_token"`
	RefreshToken string `json:"refresh_token"`
	ExpiresIn    int64  `json:"expires_in"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL