123
This commit is contained in:
parent
d53808268d
commit
e720d14853
@ -402,7 +402,15 @@ app = FastAPI(title="Unified API Service", lifespan=lifespan, debug=True)
|
|||||||
|
|
||||||
@app.exception_handler(StarletteHTTPException)
|
@app.exception_handler(StarletteHTTPException)
|
||||||
async def teapot_override(request: Request, exc: 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:
|
if exc.status_code == 404:
|
||||||
|
log.info(f"Converting 404 to 418 teapot for path: {request.url.path}")
|
||||||
html_content = """
|
html_content = """
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
@ -645,6 +653,56 @@ async def openrouter_key(request: Request):
|
|||||||
print("Unauthorized attempt to access OpenRouter key.")
|
print("Unauthorized attempt to access OpenRouter key.")
|
||||||
raise HTTPException(status_code=403, detail="Forbidden")
|
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}"
|
return f"{settings.AI_API_KEY}"
|
||||||
|
|
||||||
@app.get("/discord")
|
@app.get("/discord")
|
||||||
@ -663,6 +721,34 @@ async def ip(request: Request):
|
|||||||
async def agent(request: Request):
|
async def agent(request: Request):
|
||||||
return Response(content=request.headers.get("user-agent", request.client.host), media_type="text/plain")
|
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
|
# Add root for dashboard API for clarity
|
||||||
@dashboard_api_app.get("/")
|
@dashboard_api_app.get("/")
|
||||||
async def dashboard_api_root():
|
async def dashboard_api_root():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user