fix: revert to sync API, keep all obfuscation fixes — v0.7/v1.0.190
Deploy contracts-flask / validate (push) Successful in 0s

This commit is contained in:
2026-06-29 17:05:52 +04:00
parent ac8b325896
commit 18ce26d5d3
5 changed files with 16 additions and 57 deletions
+12 -53
View File
@@ -3,17 +3,11 @@
Все тяжёлые операции — на ВМ (contracts.kube5s.ru).
"""
import os
import uuid
import threading
import httpx
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
# DrHider job store (in-memory, no persistence)
_drhider_jobs = {}
_drhider_lock = threading.Lock()
VM_API = os.environ.get("VM_API", "https://contracts.kube5s.ru")
LLM_URL = os.environ.get("LLM_API_URL", "https://api.aillm.ru/v1/chat/completions")
LLM_KEY = os.environ.get("LLM_API_KEY", "")
@@ -116,8 +110,11 @@ def drhider():
@app.route("/api/drhider", methods=["POST"])
def api_drhider():
"""Обфускация: старт фоновой задачи."""
"""Обфускация: файлы → ZIP."""
import io
from flask import send_file
from services.drhider import obfuscate_files
from services.llm_client import HttpxLLMClient
uploaded = request.files.getlist("files")
if not uploaded:
@@ -127,52 +124,14 @@ def api_drhider():
if not files:
return jsonify({"ok": False, "error": "Нет файлов"}), 400
job_id = uuid.uuid4().hex
with _drhider_lock:
_drhider_jobs[job_id] = {"done": False, "data": None, "error": None}
def _process():
try:
from services.llm_client import HttpxLLMClient
llm = HttpxLLMClient(LLM_URL, LLM_KEY, LLM_MODEL) if LLM_KEY else None
zip_data, _csv = obfuscate_files(files, llm_client=llm)
with _drhider_lock:
_drhider_jobs[job_id] = {"done": True, "data": zip_data, "error": None}
except Exception as e:
with _drhider_lock:
_drhider_jobs[job_id] = {"done": True, "data": None, "error": str(e)}
threading.Thread(target=_process, daemon=True).start()
return jsonify({"ok": True, "job_id": job_id})
@app.route("/api/drhider/<job_id>/status")
def api_drhider_status(job_id):
"""Статус задачи."""
with _drhider_lock:
job = _drhider_jobs.get(job_id)
if not job:
return jsonify({"ok": False, "error": "Неизвестный job_id"}), 404
return jsonify({"ok": True, "done": job["done"], "error": job["error"]})
@app.route("/api/drhider/<job_id>/download")
def api_drhider_download(job_id):
"""Скачать результат."""
from flask import send_file
import io
with _drhider_lock:
job = _drhider_jobs.get(job_id)
if not job or not job["done"]:
return jsonify({"ok": False, "error": "Не готов"}), 404
if job["error"]:
return jsonify({"ok": False, "error": job["error"]}), 500
buf = io.BytesIO(job["data"])
buf.seek(0)
# Очистка
with _drhider_lock:
_drhider_jobs.pop(job_id, None)
return send_file(buf, mimetype="application/zip", as_attachment=True, download_name="drhider_output.zip")
try:
llm = HttpxLLMClient(LLM_URL, LLM_KEY, LLM_MODEL) if LLM_KEY else None
zip_data, _csv = obfuscate_files(files, llm_client=llm)
buf = io.BytesIO(zip_data)
buf.seek(0)
return send_file(buf, mimetype="application/zip", as_attachment=True, download_name="drhider_output.zip")
except Exception as e:
return jsonify({"ok": False, "error": str(e)}), 500
@app.route("/health")