Fix some issues

This commit is contained in:
2026-01-25 20:07:37 +01:00
parent e0be1b22f9
commit 6c6a9fc58c
32 changed files with 1719 additions and 226 deletions

View File

@@ -25,7 +25,7 @@ from app.middleware.rate_limiting import APIRateLimitMiddleware
from app.middleware.subscription import SubscriptionMiddleware
from app.middleware.demo_middleware import DemoMiddleware
from app.middleware.read_only_mode import ReadOnlyModeMiddleware
from app.routes import auth, tenant, registration, nominatim, subscription, demo, pos, geocoding, poi_context, webhooks, telemetry
from app.routes import auth, tenant, registration, nominatim, subscription, demo, pos, geocoding, poi_context, webhooks, telemetry, public
# Initialize logger
logger = structlog.get_logger()
@@ -172,6 +172,9 @@ app.include_router(webhooks.router, prefix="", tags=["webhooks"])
# Include telemetry routes for frontend OpenTelemetry data
app.include_router(telemetry.router, prefix="/api/v1", tags=["telemetry"])
# Include public routes (contact forms, feedback, pre-launch subscriptions)
app.include_router(public.router, prefix="/api/v1/public", tags=["public"])
# ================================================================
# SERVER-SENT EVENTS (SSE) HELPER FUNCTIONS

View File

@@ -50,7 +50,10 @@ PUBLIC_ROUTES = [
"/api/v1/webhooks/generic", # Generic webhook endpoint
"/api/v1/telemetry/v1/traces", # Frontend telemetry traces - no auth for performance
"/api/v1/telemetry/v1/metrics", # Frontend telemetry metrics - no auth for performance
"/api/v1/telemetry/health" # Telemetry health check
"/api/v1/telemetry/health", # Telemetry health check
"/api/v1/public/contact", # Public contact form - no auth required
"/api/v1/public/feedback", # Public feedback form - no auth required
"/api/v1/public/prelaunch-subscribe" # Pre-launch email subscription - no auth required
]
# Routes accessible with demo session (no JWT required, just demo session header)

View File

@@ -0,0 +1,56 @@
# gateway/app/routes/public.py
"""
Public routes for API Gateway - Handles unauthenticated public endpoints
"""
from fastapi import APIRouter, Request
import httpx
import logging
from app.core.config import settings
logger = logging.getLogger(__name__)
router = APIRouter()
async def _proxy_to_notification_service(request: Request, path: str):
"""Proxy request to notification service"""
try:
body = await request.body()
async with httpx.AsyncClient(timeout=30.0) as client:
response = await client.request(
method=request.method,
url=f"{settings.NOTIFICATION_SERVICE_URL}{path}",
content=body,
headers={
"Content-Type": request.headers.get("Content-Type", "application/json"),
}
)
return response.json() if response.content else {}
except httpx.TimeoutException:
logger.error(f"Timeout proxying to notification service: {path}")
return {"success": False, "message": "Service temporarily unavailable"}
except Exception as e:
logger.error(f"Error proxying to notification service: {e}")
return {"success": False, "message": "Internal error"}
@router.post("/contact")
async def submit_contact_form(request: Request):
"""Proxy contact form submission to notification service"""
return await _proxy_to_notification_service(request, "/api/v1/public/contact")
@router.post("/feedback")
async def submit_feedback_form(request: Request):
"""Proxy feedback form submission to notification service"""
return await _proxy_to_notification_service(request, "/api/v1/public/feedback")
@router.post("/prelaunch-subscribe")
async def submit_prelaunch_email(request: Request):
"""Proxy pre-launch email subscription to notification service"""
return await _proxy_to_notification_service(request, "/api/v1/public/prelaunch-subscribe")