recovery_service.py 973 B

1234567891011121314151617181920212223
  1. import json
  2. import redis
  3. from pydantic import BaseModel
  4. import random
  5. class RedisRecoveryData(BaseModel):
  6. user_id: int
  7. RECOVERY_REDIS_KEY = "pin_recovery:{pin_code}"
  8. def generate_recovery_key(user_id) -> str:
  9. pin_code = str(random.randint(100000, 999999))
  10. redis_client = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)
  11. redis_client.set(RECOVERY_REDIS_KEY.format(pin_code=pin_code), json.dumps({"user_id": user_id}))
  12. redis_client.expire(RECOVERY_REDIS_KEY.format(pin_code=pin_code), 1800) # Expire in 30 minutes
  13. return RECOVERY_REDIS_KEY.format(pin_code=pin_code)
  14. def get_recovery_data(pin_code: str) -> RedisRecoveryData:
  15. redis_client = redis.Redis(host='localhost', port=6379, db=0)
  16. data = redis_client.get(RECOVERY_REDIS_KEY.format(pin_code=pin_code))
  17. json_data = json.loads(str(data)) if data else None
  18. if json_data:
  19. return RedisRecoveryData(**json_data)
  20. return RedisRecoveryData(user_id=-1)