Fix gateway issues

This commit is contained in:
Urtzi Alfaro
2025-07-18 12:57:13 +02:00
parent e989e3b362
commit a38e5e7c22
2 changed files with 19 additions and 15 deletions

View File

@@ -71,7 +71,7 @@ async def startup_event():
metrics_collector.start_metrics_server(8080)
# Initialize service discovery
await service_discovery.initialize()
# await service_discovery.initialize()
logger.info("API Gateway started successfully")
@@ -81,7 +81,7 @@ async def shutdown_event():
logger.info("Shutting down API Gateway")
# Clean up service discovery
await service_discovery.cleanup()
# await service_discovery.cleanup()
logger.info("API Gateway shutdown complete")

View File

@@ -1,43 +1,47 @@
# ================================================================
# gateway/app/routes/data.py
# ================================================================
"""Data service routes for API Gateway"""
"""Data service routes for API Gateway - Authentication handled by gateway middleware"""
from fastapi import APIRouter, Request, Depends, HTTPException
from fastapi import APIRouter, Request, HTTPException
from fastapi.responses import StreamingResponse
import httpx
import structlog
import logging
from app.core.config import settings
from app.core.auth import verify_token
logger = structlog.get_logger()
logger = logging.getLogger(__name__)
router = APIRouter()
@router.api_route("/sales/{path:path}", methods=["GET", "POST", "PUT", "DELETE"])
async def proxy_sales(request: Request, path: str, current_user: dict = Depends(verify_token)):
async def proxy_sales(request: Request, path: str):
"""Proxy sales data requests to data service"""
return await _proxy_request(request, f"/api/v1/sales/{path}")
@router.api_route("/weather/{path:path}", methods=["GET", "POST"])
async def proxy_weather(request: Request, path: str, current_user: dict = Depends(verify_token)):
async def proxy_weather(request: Request, path: str):
"""Proxy weather requests to data service"""
return await _proxy_request(request, f"/api/v1/weather/{path}")
@router.api_route("/traffic/{path:path}", methods=["GET", "POST"])
async def proxy_traffic(request: Request, path: str, current_user: dict = Depends(verify_token)):
async def proxy_traffic(request: Request, path: str):
"""Proxy traffic requests to data service"""
return await _proxy_request(request, f"/api/v1/traffic/{path}")
async def _proxy_request(request: Request, target_path: str):
"""Proxy request to data service"""
"""Proxy request to data service with user context"""
try:
url = f"{settings.DATA_SERVICE_URL}{target_path}"
# Forward headers (including auth)
# Forward headers BUT add user context from gateway auth
headers = dict(request.headers)
headers.pop("host", None) # Remove host header
# ✅ ADD USER CONTEXT FROM GATEWAY AUTHENTICATION
# Gateway middleware already verified the token and added user to request.state
if hasattr(request.state, 'user'):
headers["X-User-ID"] = str(request.state.user.get("user_id"))
headers["X-User-Email"] = request.state.user.get("email", "")
headers["X-Tenant-ID"] = str(request.state.user.get("tenant_id"))
headers["X-User-Roles"] = ",".join(request.state.user.get("roles", []))
# Get request body if present
body = None
if request.method in ["POST", "PUT", "PATCH"]: