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)