import uuid import json from app.core.cache import redis_client class TicketService: EXPIRE_SECONDS = 60 # Tickets are short lived @staticmethod def generate_ticket(user_id: int, target_app_id: str) -> str: ticket = str(uuid.uuid4()) key = f"TICKET:{ticket}" data = { "user_id": user_id, "target_app_id": target_app_id } redis_client.setex(key, TicketService.EXPIRE_SECONDS, json.dumps(data)) return ticket @staticmethod def consume_ticket(ticket: str, app_id: str) -> dict: """ Validates and consumes (deletes) the ticket. Returns ticket data if valid and matches app_id. """ key = f"TICKET:{ticket}" data_str = redis_client.get(key) if not data_str: return None data = json.loads(data_str) # Verify it was meant for this app if data.get("target_app_id") != app_id: return None # Delete (One-time use) redis_client.delete(key) return data