from fastapi import APIRouter, HTTPException from pydantic import BaseModel import sqlite3 import os router = APIRouter() def get_db_path(): if "JARVIS_APP_DATA_DIR" in os.environ: return os.path.join(os.environ["JARVIS_APP_DATA_DIR"], "memory.db") project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) return os.path.join(project_root, "memory.db") class SitePayload(BaseModel): site: str @router.get("/trusted_sites") async def get_trusted_sites(): try: conn = sqlite3.connect(get_db_path()) c = conn.cursor() c.execute("CREATE TABLE IF NOT EXISTS trusted_otp_sites (site TEXT PRIMARY KEY)") c.execute("SELECT site FROM trusted_otp_sites") rows = c.fetchall() conn.close() return {"sites": [r[0] for r in rows]} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.post("/trusted_sites") async def add_trusted_site(payload: SitePayload): try: conn = sqlite3.connect(get_db_path()) c = conn.cursor() c.execute("CREATE TABLE IF NOT EXISTS trusted_otp_sites (site TEXT PRIMARY KEY)") c.execute("INSERT OR IGNORE INTO trusted_otp_sites (site) VALUES (?)", (payload.site,)) conn.commit() conn.close() return {"status": "ok"} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.delete("/trusted_sites/{site:path}") async def remove_trusted_site(site: str): try: conn = sqlite3.connect(get_db_path()) c = conn.cursor() c.execute("CREATE TABLE IF NOT EXISTS trusted_otp_sites (site TEXT PRIMARY KEY)") c.execute("DELETE FROM trusted_otp_sites WHERE site=?", (site,)) conn.commit() conn.close() return {"status": "ok"} except Exception as e: raise HTTPException(status_code=500, detail=str(e))