File size: 1,625 Bytes
28df1e8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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) |