File size: 2,474 Bytes
c3b0824
9963145
 
d12a6b6
 
9963145
 
c3b0824
 
 
 
 
 
9963145
 
 
 
 
 
 
 
 
 
 
 
 
d12a6b6
c3b0824
d12a6b6
 
 
 
 
 
c3b0824
 
 
d12a6b6
c3b0824
 
d12a6b6
c3b0824
d12a6b6
c3b0824
 
9963145
 
 
 
 
 
 
 
 
 
 
 
 
 
cb01b8b
 
 
 
 
 
9963145
 
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
58
59
60
61
62
63
64
65
66
67
import logging
from fastapi import FastAPI, Request, Response
from fastapi.middleware.cors import CORSMiddleware
from .gemini_routes import router as gemini_router
from .openai_routes import router as openai_router
from .auth import get_credentials, get_user_project_id, onboard_user

# Configure logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

app = FastAPI()

# Add CORS middleware for preflight requests
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # Allow all origins
    allow_credentials=True,
    allow_methods=["*"],  # Allow all methods
    allow_headers=["*"],  # Allow all headers
)

@app.on_event("startup")
async def startup_event():
    try:
        logging.info("Starting Gemini proxy server...")
        creds = get_credentials()
        if creds:
            try:
                proj_id = get_user_project_id(creds)
                if proj_id:
                    onboard_user(creds, proj_id)
                    logging.info(f"Successfully onboarded with project ID: {proj_id}")
                logging.info("Gemini proxy server started successfully")
                logging.info("Authentication required - Password: see .env file")
            except Exception as e:
                logging.error(f"Setup failed: {str(e)}")
                logging.warning("Server started but may not function properly until setup issues are resolved.")
        else:
            logging.error("Could not obtain credentials. Please authenticate and restart the server.")
    except Exception as e:
        logging.error(f"Startup error: {str(e)}")
        logging.warning("Server may not function properly.")

@app.options("/{full_path:path}")
async def handle_preflight(request: Request, full_path: str):
    """Handle CORS preflight requests without authentication."""
    return Response(
        status_code=200,
        headers={
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
            "Access-Control-Allow-Headers": "*",
            "Access-Control-Allow-Credentials": "true",
        }
    )

# Health check endpoint for Docker/Hugging Face
@app.get("/health")
async def health_check():
    """Health check endpoint for container orchestration."""
    return {"status": "healthy", "service": "geminicli2api"}

app.include_router(openai_router)
app.include_router(gemini_router)