ScamDetect Bot
Auto-sync backend and fix configuration
ca6995f
Raw
History Blame Contribute Delete
2.13 kB
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.middleware.cors import CORSMiddleware
import os
import warnings
os.environ["HF_HUB_DISABLE_SYMLINKS_WARNING"] = "1"
warnings.filterwarnings("ignore", message=".*unauthenticated requests.*")
warnings.filterwarnings("ignore", category=UserWarning, module="huggingface_hub.*")
from api.routes import scanner
from api.routes import history
from api.routes import stats
from api.routes import export
from api.routes import auth
from api.ws_manager import manager
# Import our database modules
from database import engine, Base
import models.db_models
# Create the database tables if they don't exist
Base.metadata.create_all(bind=engine)
app = FastAPI(title="ScamDetect AI API", version="1.0.0")
# Set up CORS for React frontend
# Add production frontend URLs via ALLOWED_ORIGINS env var (comma-separated)
default_origins = [
"http://localhost:5173",
"http://127.0.0.1:5173",
"https://localhost", # Capacitor Android WebView
"capacitor://localhost", # Capacitor iOS WebView
"http://localhost", # Capacitor fallback
]
extra_origins = os.getenv("ALLOWED_ORIGINS", "").split(",")
allowed_origins = default_origins + [o.strip() for o in extra_origins if o.strip()]
app.add_middleware(
CORSMiddleware,
allow_origins=allowed_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include HTTP routers
app.include_router(scanner.router, prefix="/api")
app.include_router(history.router, prefix="/api")
app.include_router(stats.router, prefix="/api")
app.include_router(export.router, prefix="/api")
app.include_router(auth.router, prefix="/api")
# WebSocket endpoint — mounted directly on app to bypass CORS middleware
@app.websocket("/ws/notifications")
async def websocket_endpoint(websocket: WebSocket):
await manager.connect(websocket)
try:
while True:
await websocket.receive_text()
except WebSocketDisconnect:
manager.disconnect(websocket)
@app.get("/")
async def root():
return {"message": "ScamDetect API is running."}