Skip to content

Commit 65f21df

Browse files
committed
添加celery手动创建任务函数
1 parent 4cce64b commit 65f21df

1 file changed

Lines changed: 34 additions & 14 deletions

File tree

app/tasks/sqlmap_worker.py

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
ScanStatus,
1212
SqlmapScanResult,
1313
)
14+
from app.core.sqlmap_core import celery_task_add
1415

1516
SQLMAP_API = os.getenv("SQLMAP_API")
1617
AUTH = (os.getenv("SQLMAP_USERNAME"), os.getenv("SQLMAP_PASSWORD")) # Basic Auth
@@ -145,20 +146,39 @@ def poll_single_sqlmap_task(self, task_id: str):
145146
)
146147
def sqlmap_scan_task(self, payload: dict):
147148
session = SessionLocal()
148-
r = requests.get(f"{SQLMAP_API}/task/new", auth=AUTH)
149-
if not r.ok:
150-
raise HTTPException(500, "sqlmap task 创建失败")
151-
152-
taskid = r.json()["taskid"]
149+
try:
150+
# 1. 创建 SQLMap 任务
151+
r = requests.get(f"{SQLMAP_API}/task/new", auth=AUTH, timeout=10)
152+
r.raise_for_status()
153+
sqlmap_task_id = r.json()["taskid"]
154+
155+
# 2. 启动扫描
156+
start = requests.post(
157+
f"{SQLMAP_API}/scan/{sqlmap_task_id}/start",
158+
json=payload,
159+
auth=AUTH,
160+
timeout=30,
161+
)
162+
start.raise_for_status()
163+
164+
# 3. 扫描启动成功后,调用 celery_task_add 写入 DB
165+
celery_task_add(
166+
session=session,
167+
task_id=self.request.id, # Celery 任务 ID
168+
scan_url=str(payload["url"]), # 转成 str,防止 HttpUrl 错误
169+
status="RUNNING",
170+
scan_risk=payload.get("risk", 1),
171+
scan_level=payload.get("level", 1),
172+
)
153173

154-
# 2. 启动扫描
155-
start = requests.post(
156-
f"{SQLMAP_API}/scan/{taskid}/start",
157-
json=payload, # json转换问题
158-
auth=AUTH,
159-
)
174+
return {
175+
"celery_task_id": self.request.id,
176+
"sqlmap_task_id": sqlmap_task_id,
177+
}
160178

161-
if not start.ok:
162-
raise HTTPException(500, start.text)
179+
except Exception as e:
180+
session.rollback()
181+
raise e
163182

164-
return {"taskid": taskid}
183+
finally:
184+
session.close()

0 commit comments

Comments
 (0)