from fastapi import FastAPI, Depends, HTTPException, status from fastapi.middleware.cors import CORSMiddleware from fastapi.security import APIKeyHeader import os import uvicorn from typing import Optional from dotenv import load_dotenv load_dotenv() API_TOKEN = os.getenv("API_ACCESS_TOKEN") if not API_TOKEN: print("WARNING: API_ACCESS_TOKEN not set. Generating a random token.") import secrets API_TOKEN = secrets.token_urlsafe(32) print(f"Generated token: {API_TOKEN}") api_key_header = APIKeyHeader(name="X-API-Token", auto_error=False) api_key_query = "token" async def verify_token( api_key_header: str = Depends(api_key_header), token: Optional[str] = None, ) -> bool: if api_key_header == API_TOKEN: return True if token == API_TOKEN: return True raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid or missing API token", headers={"WWW-Authenticate": "APIKey"}, ) app = FastAPI( title="Hotel Image API", description="API for retrieving hotel images with Google Search fallback" ) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) from api.routes.hotel_routes import router as hotel_router from api.routes.system_routes import router as system_router app.include_router(system_router) app.include_router(hotel_router, dependencies=[Depends(verify_token)]) if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=7860)