File size: 2,133 Bytes
69b17de
 
ca6995f
 
 
 
 
 
 
69b17de
 
 
 
396563b
69b17de
 
 
 
 
 
 
73e677c
69b17de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
396563b
69b17de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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."}