mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-11-04 03:17:00 -05:00 
			
		
		
		
	Move invalidate refresh token to TokenManager
This commit is contained in:
		
							parent
							
								
									d3402e30c2
								
							
						
					
					
						commit
						7d6d3e6687
					
				@ -1,5 +1,4 @@
 | 
				
			|||||||
const { Request, Response, NextFunction } = require('express')
 | 
					const { Request, Response, NextFunction } = require('express')
 | 
				
			||||||
const { rateLimit } = require('express-rate-limit')
 | 
					 | 
				
			||||||
const passport = require('passport')
 | 
					const passport = require('passport')
 | 
				
			||||||
const JwtStrategy = require('passport-jwt').Strategy
 | 
					const JwtStrategy = require('passport-jwt').Strategy
 | 
				
			||||||
const ExtractJwt = require('passport-jwt').ExtractJwt
 | 
					const ExtractJwt = require('passport-jwt').ExtractJwt
 | 
				
			||||||
@ -466,14 +465,7 @@ class Auth {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      // Invalidate the session in database using refresh token
 | 
					      // Invalidate the session in database using refresh token
 | 
				
			||||||
      if (refreshToken) {
 | 
					      if (refreshToken) {
 | 
				
			||||||
        try {
 | 
					        await this.tokenManager.invalidateRefreshToken(refreshToken)
 | 
				
			||||||
          Logger.info(`[Auth] logout: Invalidating session for refresh token: ${refreshToken}`)
 | 
					 | 
				
			||||||
          await Database.sessionModel.destroy({
 | 
					 | 
				
			||||||
            where: { refreshToken }
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
        } catch (error) {
 | 
					 | 
				
			||||||
          Logger.error(`[Auth] Error destroying session: ${error.message}`)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        Logger.info(`[Auth] logout: No refresh token on request`)
 | 
					        Logger.info(`[Auth] logout: No refresh token on request`)
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
				
			|||||||
@ -379,6 +379,28 @@ class TokenManager {
 | 
				
			|||||||
    await Database.sessionModel.destroy({ where: { userId: user.id } })
 | 
					    await Database.sessionModel.destroy({ where: { userId: user.id } })
 | 
				
			||||||
    return null
 | 
					    return null
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Invalidate a refresh token - used for logout
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @param {string} refreshToken
 | 
				
			||||||
 | 
					   * @returns {Promise<boolean>}
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  async invalidateRefreshToken(refreshToken) {
 | 
				
			||||||
 | 
					    if (!refreshToken) {
 | 
				
			||||||
 | 
					      Logger.error(`[TokenManager] No refresh token provided to invalidate`)
 | 
				
			||||||
 | 
					      return false
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      const numDeleted = await Database.sessionModel.destroy({ where: { refreshToken: refreshToken } })
 | 
				
			||||||
 | 
					      Logger.info(`[TokenManager] Refresh token ${refreshToken} invalidated, ${numDeleted} sessions deleted`)
 | 
				
			||||||
 | 
					      return true
 | 
				
			||||||
 | 
					    } catch (error) {
 | 
				
			||||||
 | 
					      Logger.error(`[TokenManager] Error invalidating refresh token: ${error.message}`)
 | 
				
			||||||
 | 
					      return false
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = TokenManager
 | 
					module.exports = TokenManager
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user