From e720d14853ea955e744820895213e580a9610b4a Mon Sep 17 00:00:00 2001 From: Slipstream Date: Wed, 14 May 2025 17:32:17 -0600 Subject: [PATCH] 123 --- api_service/api_server.py | 86 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/api_service/api_server.py b/api_service/api_server.py index 1d5551c..11b1fd7 100644 --- a/api_service/api_server.py +++ b/api_service/api_server.py @@ -402,7 +402,15 @@ app = FastAPI(title="Unified API Service", lifespan=lifespan, debug=True) @app.exception_handler(StarletteHTTPException) async def teapot_override(request: Request, exc: StarletteHTTPException): + # Check if this is a request to the openrouter_key endpoint + if request.url.path == "/openrouter_key" or request.url.path.endswith("/openrouter_key"): + # Don't convert 404 errors for the openrouter_key endpoint to 418 + log.warning(f"Exception in openrouter_key endpoint: {exc.status_code} - {exc.detail}") + raise exc + + # For all other 404 errors, return a teapot response if exc.status_code == 404: + log.info(f"Converting 404 to 418 teapot for path: {request.url.path}") html_content = """ @@ -645,6 +653,56 @@ async def openrouter_key(request: Request): print("Unauthorized attempt to access OpenRouter key.") raise HTTPException(status_code=403, detail="Forbidden") + # Add debug logging + log.info(f"OpenRouter key request authorized. AI_API_KEY is {'set' if settings.AI_API_KEY else 'not set'}") + + # Check if AI_API_KEY is set + if not settings.AI_API_KEY: + log.error("AI_API_KEY is not set in environment variables") + raise HTTPException(status_code=500, detail="AI_API_KEY not configured") + + return f"{settings.AI_API_KEY}" + +# Add the same endpoint to the api_app to ensure it's accessible +@api_app.get("/openrouter_key", response_class=PlainTextResponse) +async def api_openrouter_key(request: Request): + """private endpoint return openrouter api key (api_app version)""" + # Basic security check + auth_header = request.headers.get("Authorization") + # Use loaded setting + if not settings.MOD_LOG_API_SECRET or not auth_header or auth_header != f"Bearer {settings.MOD_LOG_API_SECRET}": + print("Unauthorized attempt to access OpenRouter key (api_app).") + raise HTTPException(status_code=403, detail="Forbidden") + + # Add debug logging + log.info(f"OpenRouter key request authorized (api_app). AI_API_KEY is {'set' if settings.AI_API_KEY else 'not set'}") + + # Check if AI_API_KEY is set + if not settings.AI_API_KEY: + log.error("AI_API_KEY is not set in environment variables") + raise HTTPException(status_code=500, detail="AI_API_KEY not configured") + + return f"{settings.AI_API_KEY}" + +# Add the same endpoint to the discordapi_app to ensure it's accessible +@discordapi_app.get("/openrouter_key", response_class=PlainTextResponse) +async def discordapi_openrouter_key(request: Request): + """private endpoint return openrouter api key (discordapi_app version)""" + # Basic security check + auth_header = request.headers.get("Authorization") + # Use loaded setting + if not settings.MOD_LOG_API_SECRET or not auth_header or auth_header != f"Bearer {settings.MOD_LOG_API_SECRET}": + print("Unauthorized attempt to access OpenRouter key (discordapi_app).") + raise HTTPException(status_code=403, detail="Forbidden") + + # Add debug logging + log.info(f"OpenRouter key request authorized (discordapi_app). AI_API_KEY is {'set' if settings.AI_API_KEY else 'not set'}") + + # Check if AI_API_KEY is set + if not settings.AI_API_KEY: + log.error("AI_API_KEY is not set in environment variables") + raise HTTPException(status_code=500, detail="AI_API_KEY not configured") + return f"{settings.AI_API_KEY}" @app.get("/discord") @@ -663,6 +721,34 @@ async def ip(request: Request): async def agent(request: Request): return Response(content=request.headers.get("user-agent", request.client.host), media_type="text/plain") +@app.get("/debug-settings", response_class=PlainTextResponse) +async def debug_settings(request: Request): + """Debug endpoint to check if settings are loaded correctly""" + # Basic security check - only allow from localhost or with the same auth as openrouter_key + client_host = request.client.host + auth_header = request.headers.get("Authorization") + is_local = client_host == "127.0.0.1" or client_host == "::1" or client_host.startswith("172.") + is_authorized = auth_header and settings.MOD_LOG_API_SECRET and auth_header == f"Bearer {settings.MOD_LOG_API_SECRET}" + + if not (is_local or is_authorized): + print(f"Unauthorized attempt to access debug settings from {client_host}.") + raise HTTPException(status_code=403, detail="Forbidden") + + # Return a summary of the settings + settings_summary = [ + f"API_HOST: {settings.API_HOST}", + f"API_PORT: {settings.API_PORT}", + f"MOD_LOG_API_SECRET: {'set' if settings.MOD_LOG_API_SECRET else 'not set'}", + f"AI_API_KEY: {'set' if settings.AI_API_KEY else 'not set'}", + f"DISCORD_CLIENT_ID: {'set' if settings.DISCORD_CLIENT_ID else 'not set'}", + f"DISCORD_CLIENT_SECRET: {'set' if settings.DISCORD_CLIENT_SECRET else 'not set'}", + f"DISCORD_REDIRECT_URI: {settings.DISCORD_REDIRECT_URI}", + f"POSTGRES_SETTINGS_DB: {settings.POSTGRES_SETTINGS_DB}", + f"REDIS_HOST: {settings.REDIS_HOST}", + ] + + return "\n".join(settings_summary) + # Add root for dashboard API for clarity @dashboard_api_app.get("/") async def dashboard_api_root():