Improved the `decode_token` function to clarify and extend error handling for token validation and decoding. Enhanced error messages for invalid tokens, added checks for missing claims, and ensured clear differentiation of failure scenarios. Updated imports and added a `scope` field to token response for completeness.
70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
from apscheduler.triggers.cron import CronTrigger
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.responses import HTMLResponse
|
|
|
|
from app.core.config import settings
|
|
from app.api.main import api_router
|
|
import logging
|
|
|
|
from auth.utils import cleanup_expired_tokens
|
|
from app.core.database import SessionLocal
|
|
|
|
scheduler = AsyncIOScheduler()
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
logger.info(f"Starting app!!!")
|
|
app = FastAPI(
|
|
title=settings.PROJECT_NAME,
|
|
version=settings.VERSION,
|
|
openapi_url=f"{settings.API_V1_STR}/openapi.json"
|
|
)
|
|
|
|
# Set up CORS middleware
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=settings.BACKEND_CORS_ORIGINS,
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
|
|
# Create a function that gets its own database session
|
|
async def scheduled_cleanup():
|
|
async with SessionLocal() as db:
|
|
await cleanup_expired_tokens(db)
|
|
|
|
@app.on_event("startup")
|
|
async def start_scheduler():
|
|
# Run every day at 3 AM
|
|
scheduler.add_job(
|
|
scheduled_cleanup,
|
|
CronTrigger(hour=10, minute=0),
|
|
id="token_cleanup",
|
|
name="Clean up expired revoked tokens"
|
|
)
|
|
scheduler.start()
|
|
|
|
@app.on_event("shutdown")
|
|
async def stop_scheduler():
|
|
scheduler.shutdown()
|
|
|
|
@app.get("/", response_class=HTMLResponse)
|
|
async def root():
|
|
return """
|
|
<html>
|
|
<head>
|
|
<title>EventSpace API</title>
|
|
</head>
|
|
<body>
|
|
<h1>Welcome to EventSpace API</h1>
|
|
<p>Explore the available endpoints and documentation:</p>
|
|
<a href="/docs">OpenAPI Documentation</a>
|
|
</body>
|
|
</html>
|
|
"""
|
|
|
|
app.include_router(api_router, prefix=settings.API_V1_STR) |