mirror of
https://github.com/lorsanstand/Aether.git
synced 2026-09-18 14:18:20 +03:00
refractor redis service
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import logging
|
||||
import uuid
|
||||
|
||||
from app.utils.redis import get_redis
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class RefreshTokenStorage:
|
||||
PREFIX: str = "refresh"
|
||||
|
||||
@classmethod
|
||||
async def save_token(cls, token: uuid.UUID, user_id: int, ttl: int):
|
||||
redis_client = await get_redis()
|
||||
|
||||
await redis_client.setex(f"{cls.PREFIX}:{token}", ttl, user_id)
|
||||
await redis_client.sadd(f"user:{user_id}:{cls.PREFIX}", str(token))
|
||||
await redis_client.expire(f"user:{user_id}:{cls.PREFIX}", ttl+3600)
|
||||
|
||||
log.info("Save new refresh token from redis", extra={"user_id": user_id, "token": token})
|
||||
|
||||
|
||||
@classmethod
|
||||
async def getdel_token(cls, token: uuid.UUID) -> int:
|
||||
redis_client = await get_redis()
|
||||
user_id = await redis_client.getdel(f"{cls.PREFIX}:{token}")
|
||||
await redis_client.srem(f"user:{user_id}:{cls.PREFIX}", str(token))
|
||||
log.info("Remove token", extra={"user_id": user_id, "token": token})
|
||||
return user_id
|
||||
|
||||
|
||||
@classmethod
|
||||
async def get_token(cls, token: uuid.UUID) -> int:
|
||||
redis_client = await get_redis()
|
||||
user_id = await redis_client.get(f"{cls.PREFIX}:{token}")
|
||||
log.debug("User_id fetched from refresh token", extra={"user_id": user_id, "token": token})
|
||||
return user_id
|
||||
|
||||
|
||||
@classmethod
|
||||
async def abort_all_tokens(cls, user_id: int):
|
||||
redis_client = await get_redis()
|
||||
log.debug("Start abort all tokens", extra={"user_id": user_id})
|
||||
|
||||
tokens = await redis_client.smembers(f"user:{user_id}:{cls.PREFIX}")
|
||||
|
||||
for token in tokens:
|
||||
await redis_client.delete(f"{cls.PREFIX}:{token}")
|
||||
|
||||
await redis_client.delete(f"user:{user_id}:{cls.PREFIX}")
|
||||
|
||||
log.info("Successfully abort all tokens", extra={"user_id": user_id})
|
||||
|
||||
|
||||
|
||||
class EmailTokenStorage:
|
||||
PREFIX: str = "email"
|
||||
|
||||
@classmethod
|
||||
async def save_token(cls, token: uuid.UUID, user_id: int, ttl: int):
|
||||
redis_client = await get_redis()
|
||||
|
||||
await redis_client.setex(f"{cls.PREFIX}:{token}", ttl, user_id)
|
||||
|
||||
log.info("Save new refresh token from redis", extra={"user_id": user_id, "token": token})
|
||||
|
||||
|
||||
@classmethod
|
||||
async def getdel_token(cls, token: uuid.UUID) -> int:
|
||||
redis_client = await get_redis()
|
||||
log.debug("User_id fetched from email token", extra={"token": token})
|
||||
return await redis_client.getdel(f"{cls.PREFIX}:{token}")
|
||||
Reference in New Issue
Block a user