from pathlib import Path from fastapi import FastAPI, HTTPException from fastapi.responses import FileResponse from fastapi.staticfiles import StaticFiles from app import db from app.admin import create_admin from app.verify import Verifier BASE_DIR = Path(__file__).resolve().parent ICON_DIR = BASE_DIR / "static" / "icons" verifier = Verifier() app = FastAPI(title="IDRS API") app.mount("/static", StaticFiles(directory=str(BASE_DIR / "static")), name="static") create_admin(app) @app.get("/api/getTokenInfo") def get_token_info(): tokens = [] for t in db.list_tokens(): tokens.append( { "idfToken": t.idfToken, "position": t.position, "typeBlockchain": t.typeBlockchain, "name": t.name, "symbol": t.symbol, "contractAddr": t.contractAddr, "decimals": t.decimals, "iconUrl": t.iconUrl, "filename": t.filename, "is_live": bool(t.is_live), } ) return {"tokenList": tokens} @app.get("/api/version/android") def get_version_android(): v = db.get_version() return { "idVersion": v.idVersion, "appName": v.appName, "acceptableVersion": v.acceptableVersion, "latestVersion": v.latestVersion, } def _serve_icon(filename: str): token_dir = ICON_DIR / "token" path = (token_dir / filename).resolve() if not path.is_file() or token_dir.resolve() not in path.parents: raise HTTPException(status_code=404, detail="not found") return FileResponse(path, media_type="image/png") @app.get("/img/token/{filename}") def get_icon(filename: str): return _serve_icon(filename) @app.get("/public/img/token/{filename}") def get_public_icon(filename: str): return _serve_icon(filename) @app.on_event("startup") def startup(): db.init_db() verifier.start()