from fastapi import FastAPI, HTTPException, Query, File, UploadFile from fastapi.responses import PlainTextResponse, HTMLResponse import subprocess import os import shutil app = FastAPI() print("--- TERM-X PRO WEBUI STARTING ---") # Hugging Face par SECURITY_TOKEN set hona chahiye SECURITY_TOKEN = os.getenv("SECURITY_TOKEN", "a") @app.get("/") def read_root(): return {"status": "online", "message": "TermX PRO is running"} @app.get("/termx", response_class=PlainTextResponse) def run_command(cmd: str = Query(...), token: str = Query(...)): if token != SECURITY_TOKEN: raise HTTPException(status_code=403, detail="Invalid Token!") # NVM aur Environment setup ko automatically har command ke saath jodd dena nvm_prefix = 'export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && ' # Claude config: Aapki proxy aur key claude_env = 'export ANTHROPIC_API_KEY="a" && export ANTHROPIC_BASE_URL="https://azils-anti-supa.hf.space/v1" && ' full_cmd = nvm_prefix + claude_env + cmd try: # Timeout 30s rakha hai taake Claude ka response wait kar sake result = subprocess.run(full_cmd, shell=True, capture_output=True, text=True, timeout=30) output = result.stdout if result.stdout else result.stderr return output if output else "Command executed (No output)." except subprocess.TimeoutExpired: return "Error: Command timed out after 30 seconds." except Exception as e: return f"Error: {str(e)}" @app.post("/upload") async def upload_file(token: str = Query(...), file: UploadFile = File(...)): if token != SECURITY_TOKEN: raise HTTPException(status_code=403, detail="Invalid Token!") try: file_path = os.path.join(os.getcwd(), file.filename) with open(file_path, "wb") as buffer: shutil.copyfileobj(file.file, buffer) return {"message": f"Successfully uploaded {file.filename}"} except Exception as e: return {"error": str(e)} @app.get("/openweb", response_class=HTMLResponse) def open_web(token: str = Query(...)): if token != SECURITY_TOKEN: raise HTTPException(status_code=403, detail="Invalid Token!") return """