11package jwt
22
33import (
4+ "context"
45 "crypto/rand"
56 "crypto/rsa"
67 "encoding/base64"
@@ -568,7 +569,7 @@ func (mw *GinJWTMiddleware) LoginHandler(c *gin.Context) {
568569 }
569570
570571 // Generate complete token pair
571- tokenPair , err := mw .TokenGenerator (data )
572+ tokenPair , err := mw .TokenGenerator (c . Request . Context (), data )
572573 if err != nil {
573574 mw .unauthorized (c , http .StatusInternalServerError , mw .HTTPStatusMessageFunc (c ,ErrFailedTokenCreation ))
574575 return
@@ -612,7 +613,7 @@ func (mw *GinJWTMiddleware) LogoutHandler(c *gin.Context) {
612613 // Handle refresh token revocation (RFC 6749 compliant)
613614 refreshToken := mw .extractRefreshToken (c )
614615 if refreshToken != "" {
615- if err := mw .revokeRefreshToken (refreshToken ); err != nil {
616+ if err := mw .revokeRefreshToken (c . Request . Context (), refreshToken ); err != nil {
616617 log .Printf ("Failed to revoke refresh token on logout: %v" , err )
617618 }
618619 }
@@ -658,14 +659,14 @@ func (mw *GinJWTMiddleware) generateRefreshToken() (string, error) {
658659}
659660
660661// storeRefreshToken stores a refresh token with user data
661- func (mw * GinJWTMiddleware ) storeRefreshToken (token string , userData any ) error {
662+ func (mw * GinJWTMiddleware ) storeRefreshToken (ctx context. Context , token string , userData any ) error {
662663 expiry := mw .TimeFunc ().Add (mw .RefreshTokenTimeout )
663- return mw .RefreshTokenStore .Set (token , userData , expiry )
664+ return mw .RefreshTokenStore .Set (ctx , token , userData , expiry )
664665}
665666
666667// validateRefreshToken validates a refresh token and returns associated user data
667- func (mw * GinJWTMiddleware ) validateRefreshToken (token string ) (any , error ) {
668- userData , err := mw .RefreshTokenStore .Get (token )
668+ func (mw * GinJWTMiddleware ) validateRefreshToken (ctx context. Context , token string ) (any , error ) {
669+ userData , err := mw .RefreshTokenStore .Get (ctx , token )
669670 if err != nil {
670671 if err == core .ErrRefreshTokenNotFound {
671672 return nil , ErrInvalidRefreshToken
@@ -676,8 +677,8 @@ func (mw *GinJWTMiddleware) validateRefreshToken(token string) (any, error) {
676677}
677678
678679// revokeRefreshToken removes a refresh token from storage
679- func (mw * GinJWTMiddleware ) revokeRefreshToken (token string ) error {
680- return mw .RefreshTokenStore .Delete (token )
680+ func (mw * GinJWTMiddleware ) revokeRefreshToken (ctx context. Context , token string ) error {
681+ return mw .RefreshTokenStore .Delete (ctx , token )
681682}
682683
683684// RefreshHandler can be used to refresh a token using RFC 6749 compliant refresh tokens.
@@ -692,14 +693,14 @@ func (mw *GinJWTMiddleware) RefreshHandler(c *gin.Context) {
692693 }
693694
694695 // Validate refresh token
695- userData , err := mw .validateRefreshToken (refreshToken )
696+ userData , err := mw .validateRefreshToken (c . Request . Context (), refreshToken )
696697 if err != nil {
697698 mw .unauthorized (c , http .StatusUnauthorized , mw .HTTPStatusMessageFunc (c ,err ))
698699 return
699700 }
700701
701702 // Generate new token pair and revoke old refresh token
702- tokenPair , err := mw .TokenGeneratorWithRevocation (userData , refreshToken )
703+ tokenPair , err := mw .TokenGeneratorWithRevocation (c . Request . Context (), userData , refreshToken )
703704 if err != nil {
704705 mw .unauthorized (c , http .StatusInternalServerError , mw .HTTPStatusMessageFunc (c ,err ))
705706 return
@@ -795,7 +796,7 @@ func (mw *GinJWTMiddleware) generateAccessToken(data any) (string, time.Time, er
795796}
796797
797798// TokenGenerator generates a complete token pair (access + refresh) with RFC 6749 compliance
798- func (mw * GinJWTMiddleware ) TokenGenerator (data any ) (* core.Token , error ) {
799+ func (mw * GinJWTMiddleware ) TokenGenerator (ctx context. Context , data any ) (* core.Token , error ) {
799800 // Generate access token
800801 accessToken , expire , err := mw .generateAccessToken (data )
801802 if err != nil {
@@ -809,7 +810,7 @@ func (mw *GinJWTMiddleware) TokenGenerator(data any) (*core.Token, error) {
809810 }
810811
811812 // Store refresh token
812- if err := mw .storeRefreshToken (refreshToken , data ); err != nil {
813+ if err := mw .storeRefreshToken (ctx , refreshToken , data ); err != nil {
813814 return nil , err
814815 }
815816
@@ -824,15 +825,15 @@ func (mw *GinJWTMiddleware) TokenGenerator(data any) (*core.Token, error) {
824825}
825826
826827// TokenGeneratorWithRevocation generates a new token pair and revokes the old refresh token
827- func (mw * GinJWTMiddleware ) TokenGeneratorWithRevocation (data any , oldRefreshToken string ) (* core.Token , error ) {
828+ func (mw * GinJWTMiddleware ) TokenGeneratorWithRevocation (ctx context. Context , data any , oldRefreshToken string ) (* core.Token , error ) {
828829 // Generate new token pair
829- tokenPair , err := mw .TokenGenerator (data )
830+ tokenPair , err := mw .TokenGenerator (ctx , data )
830831 if err != nil {
831832 return nil , err
832833 }
833834
834835 // Revoke old refresh token, ignore if token already doesn't exist
835- if err := mw .revokeRefreshToken (oldRefreshToken ); err != nil && ! errors .Is (err , core .ErrRefreshTokenNotFound ) {
836+ if err := mw .revokeRefreshToken (ctx , oldRefreshToken ); err != nil && ! errors .Is (err , core .ErrRefreshTokenNotFound ) {
836837 return nil , err
837838 }
838839
0 commit comments