This commit is contained in:
Ground-Zerro
2025-01-01 12:21:09 +11:00
parent bb44ee2f51
commit 7b8b594eaf
2 changed files with 99 additions and 56 deletions

View File

@@ -1,46 +1,44 @@
from fastapi import FastAPI, Form, Request
from fastapi.responses import FileResponse, HTMLResponse
from fastapi.templating import Jinja2Templates
import os
import subprocess
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import uvicorn
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class RunScriptRequest(BaseModel):
config: str
userId: str
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FastAPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
app = FastAPI()
# Указываем директории для статических файлов и шаблонов
templates = Jinja2Templates(directory=os.path.dirname(os.path.realpath(__file__)))
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/")
async def get_form(request: Request):
# Загружаем HTML шаблон (index.html) и передаем в него данные
return templates.TemplateResponse("index.html", {"request": request})
@app.post("/run")
async def run_dns_resolver(
services: list[str] = Form(...),
dns_servers: list[str] = Form(...),
cloudflare: str = Form(...),
aggregation: str = Form(...),
format: str = Form(...),
gateway: str = Form(None),
commentary: str = Form(None)
):
# Генерация config.ini
config_path = "config.ini"
with open(config_path, "w") as config:
config.write("[DomainMapper]\n")
config.write(f"service={','.join(services)}\n")
config.write(f"dnsserver={','.join(dns_servers)}\n")
config.write(f"cloudflare={cloudflare}\n")
config.write(f"subnet={aggregation}\n")
config.write(f"filetype={format}\n")
if gateway:
config.write(f"gateway={gateway}\n")
if commentary:
config.write(f"commentary={commentary}\n")
async def run_script(request: RunScriptRequest):
config_content = request.config
user_id = request.userId
# Запуск скрипта
result_file = "output.txt"
os.system(f"python3 main.py -c {config_path}")
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
config_filename = f"config-id_{user_id}.ini"
try:
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
with open(config_filename, 'w') as f:
f.write(config_content)
# Возвращаем файл результата
return FileResponse(path=result_file, filename="output.txt", media_type="text/plain")
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> subprocess
result = subprocess.run(
['python3', 'main.py', '-c', config_filename],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return {"stdout": result.stdout, "stderr": result.stderr}
except Exception as e:
raise HTTPException(status_code=500, detail=f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {str(e)}")
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Uvicorn)
if __name__ == "__main__":
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FastAPI <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Uvicorn
uvicorn.run(app, host="0.0.0.0", port=5000)