summaryrefslogtreecommitdiff
path: root/server/apps/task.py
diff options
context:
space:
mode:
Diffstat (limited to 'server/apps/task.py')
-rw-r--r--server/apps/task.py47
1 files changed, 43 insertions, 4 deletions
diff --git a/server/apps/task.py b/server/apps/task.py
index 17fd9e4..f2bb8de 100644
--- a/server/apps/task.py
+++ b/server/apps/task.py
@@ -99,7 +99,8 @@ def valid_task_info(task_param: dict):
# 任务执行时限,单位分钟
"run_time": Integer(load_default=600),
# 运行配置
- "run_flag": String(validate=OneOf(["now", "man"]), load_default="now")
+ "run_flag": String(validate=OneOf(["now", "man"]), load_default="now"),
+ "pname": String(required=False),
}, example={'name': "test_task", 'target': "47.76.239.205", 'agent': "inrz674e", 'target_domain': "www.google.com",
'target_rr': "NS ns.ourattack.com",
'policy': "auto", 'scan': "auto",
@@ -109,8 +110,15 @@ def valid_task_info(task_param: dict):
"msg": String()
})
# TODO: 需要更新接口,created_by
-def make_task(json_data):
+def create_task(json_data):
+ task = make_task(json_data=json_data)
+ pname = json_data.get("pname")
+ if pname is None:
+ return make_multi_task(task)
+ else:
+ return make_single_task(task,pname)
+def make_task(json_data):
task = Task(
task_id=str(uuid.uuid1()),
task_name=json_data.get("name"),
@@ -156,8 +164,7 @@ def make_task(json_data):
for agent in agents:
selected_nodes_info[agent.agent_id] = agent.ipaddr.split("|")[0] + ":" + str(agent.port)
task.SCAN_AGENT_ID_LIST = json.dumps(selected_nodes_info)
-
- # 插入task
+
try:
db.session.add(task)
db.session.commit()
@@ -165,6 +172,9 @@ def make_task(json_data):
db.session.rollback()
error(str(e))
return {"code": 500, "msg": str(e)}
+ return task
+
+def make_multi_task(task):
# 任务策略初始化
# task_policy = init_task_policy(task)
@@ -206,6 +216,35 @@ def make_task(json_data):
return {"code": 200, "msg": "ok"}
+def make_single_task(task, pname):
+ from .policy_list import get_single_policy
+ policy = get_single_policy(task.ptype, pname)
+
+ task_policy = TaskPolicy(
+ policy = policy["id"],
+ policy_param = policy["payload"],
+ for_task = task.task_id
+ )
+ db.session.add(task_policy)
+ db.session.commit()
+ if task.status == "working":
+ err = deliver_task(task_policy)
+ if err is not None:
+ error(str(err))
+ return {"code": 500, "msg": str(err)}
+ from .target import task_monitoring
+ scheduler.add_job(
+ func = task_monitoring,
+ trigger = 'date',
+ args = (task, ),
+ id = f"{task.task_id}single",
+ run_date = datetime.now() + timedelta(seconds=30)
+ )
+ return {"code": 200, "msg": "ok"}
+
+
+
+
def policy_change_timer(task):
with scheduler.app.app_context():
task_policy=db.session.query(TaskPolicy).get(task.task_policies[-1].tp_id)