summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhandingkang <[email protected]>2024-04-16 11:05:48 +0800
committerhandingkang <[email protected]>2024-04-16 11:05:48 +0800
commit489a2e4fc8a4f230f284010e843dbcb01c41b3dc (patch)
treefcd59873212d5fe058d35bf51d8b62426e83021c
parentd654065108c59275c7eef140f71c8bb02d5b681d (diff)
所有接口新增响应码字段code
-rw-r--r--server/apps/agentcomm.py8
-rw-r--r--server/apps/sysinfo.py17
-rw-r--r--server/apps/sysmange.py18
-rw-r--r--server/apps/target.py25
-rw-r--r--server/apps/task.py68
5 files changed, 91 insertions, 45 deletions
diff --git a/server/apps/agentcomm.py b/server/apps/agentcomm.py
index cf71e28..ab50797 100644
--- a/server/apps/agentcomm.py
+++ b/server/apps/agentcomm.py
@@ -4,8 +4,8 @@ import random
from apiflask import APIBlueprint, Schema
from apiflask.fields import String, Integer, List, Nested, Boolean, DateTime
from apiflask.validators import OneOf
-from apps.util import fake
+from apps.util import fake
bp = APIBlueprint("代理管理接口集合", __name__, url_prefix="/agent")
@@ -58,7 +58,9 @@ def task_ret():
"per_page": Integer(load_default=10)
}, location="query")
@bp.output({
- "agent_data": List(Nested(agent()))
+ "code": Integer(),
+ "agent_data": List(Nested(agent())),
+ "total": Integer()
})
def agent_info(query_data):
per_page = query_data["per_page"]
@@ -79,4 +81,4 @@ def agent_info(query_data):
'{:.2f}'.format(100 * random.random())) + "%可用)",
"start_time": fake.date_time_between(start_date="-1y")})
- return {"agent_data": agent_list}
+ return {"code": 200, "agent_data": agent_list, "total": 10 * per_page}
diff --git a/server/apps/sysinfo.py b/server/apps/sysinfo.py
index 3cab7fd..49a6031 100644
--- a/server/apps/sysinfo.py
+++ b/server/apps/sysinfo.py
@@ -1,13 +1,13 @@
# 系统信息接口
import datetime
-# 测试用
-from apps.util import fake
-
from apiflask import APIBlueprint, Schema
from apiflask.fields import Date, Integer, Nested, Dict, DateTime, String, List
from apiflask.validators import OneOf
+# 测试用
+from apps.util import fake
+
bp = APIBlueprint("仪表盘接口", __name__, url_prefix="/sys")
@@ -30,6 +30,7 @@ class LogOut(Schema):
@bp.get("/num")
@bp.doc("系统信息获取接口", "返回当前系统状态,包括已部署代理节点数量、已执行任务次数、系统已运行天数以及已探测目标统计")
@bp.output({
+ "code": Integer(),
"agent_num": Integer(),
"task_num": Integer(),
"workday": Integer(),
@@ -50,6 +51,7 @@ def systate():
dot_num = fake.random.randint(10, 100)
# 返回结果
return {
+ "code": 200,
"agent_num": agent_num,
"task_num": task_num,
"workday": workday,
@@ -65,6 +67,7 @@ def systate():
@bp.get("/num/date")
@bp.doc("仪表盘柱状图数据获取接口", "返回当前不同探测目标在一周内的数量变化情况")
@bp.output({
+ "code": Integer(),
"date_data": Dict(Date(), Nested(TargetOut()))
})
def target_date():
@@ -81,7 +84,7 @@ def target_date():
"dot": fake.random.randint(10, 20) * day
}
day += 1
- return {"date_data": dates}
+ return {"code": 200, "date_data": dates}
@bp.get("/log")
@@ -91,7 +94,9 @@ def target_date():
}, location="query")
@bp.doc("系统操作日志获取接口", "返回系统的操作日志")
@bp.output({
- "log_data": List(Nested(LogOut()))
+ "code": Integer(),
+ "log_data": List(Nested(LogOut())),
+ "total": Integer()
})
def sys_log(query_data):
# 每页显示多少项
@@ -108,4 +113,4 @@ def sys_log(query_data):
"user": fake.name(),
"ip": fake.ipv4()
})
- return {"log_data": log_list}
+ return {"code": 200, "log_data": log_list, "total": 10 * per_page}
diff --git a/server/apps/sysmange.py b/server/apps/sysmange.py
index f140506..7921077 100644
--- a/server/apps/sysmange.py
+++ b/server/apps/sysmange.py
@@ -1,5 +1,4 @@
# 系统管理——用户管理
-import datetime
from apiflask import APIBlueprint, Schema
from apiflask.fields import String, Integer, DateTime, List, Nested
@@ -24,16 +23,17 @@ class User(Schema):
"page": Integer(load_default=1)
}, location='query')
@bp.output({
+ "code": Integer(),
"data": List(Nested(User()))
})
def list_user(query_data):
- if query_data['page']==1:
+ if query_data['page'] == 1:
user_list = [
- {"account": "Root", "username": "管理员", "time": fake.date_time_between(start_date='-10y', end_date='-9y'),
- "created_by": "", "group": "Admin"}]
+ {"account": "Root", "username": "管理员", "time": fake.date_time_between(start_date='-10y', end_date='-9y'),
+ "created_by": "", "group": "Admin"}]
else:
user_list = []
- for _ in range(query_data["per_page"]-len(user_list)):
+ for _ in range(query_data["per_page"] - len(user_list)):
user_list.append({
"account": fake.vin(),
"username": fake.name(),
@@ -41,7 +41,7 @@ def list_user(query_data):
"created_by": "管理员",
"group": "Admin"
})
- return {"data": user_list}
+ return {"code": 200, "data": user_list}
@bp.post("/")
@@ -52,6 +52,10 @@ def list_user(query_data):
"pwd": String(required=True),
"cur_user": String(load_default="Root")
})
+ "code": Integer(),
+ "msg": String()
+})
def create_user(json_data):
print(json_data)
- return {"msg": "ok"}
+ return {"code": 200, "msg": "ok"}
diff --git a/server/apps/target.py b/server/apps/target.py
index a091173..d11d479 100644
--- a/server/apps/target.py
+++ b/server/apps/target.py
@@ -6,10 +6,11 @@ import threading
import pandas as pd
import requests
from apiflask import APIBlueprint, Schema
-from apiflask.fields import Integer, String, List, Nested, IP, DateTime
-from apps.util import fake
+from apiflask.fields import Integer, String, List, Nested, IP, DateTime, Dict
from requests.exceptions import Timeout
+from apps.util import fake
+
bp = APIBlueprint("目标信息及状态接口集合", __name__, url_prefix="/target")
icmp_delaytable = {}
@@ -46,7 +47,8 @@ class Delay(Schema):
class DelayOut(Schema):
- delay_data = List(Nested(Delay))
+ code = Integer()
+ delay_data = List(Nested(Delay()))
@bp.get("/delay/<string:type>")
@@ -66,7 +68,7 @@ def get_pernode_delay(query_data, type):
threads.append(mythread)
for t in threads:
t.join()
- return {'delay_data': ans}
+ return {"code": 200, 'delay_data': ans}
threadLock = threading.Lock()
@@ -155,6 +157,8 @@ from apiflask.fields import String
from apiflask.validators import OneOf
from dns import resolver
+rrest_key = "rrset"
+
@bp.get("/check")
@bp.doc("通过指定的解析器获取指定域名的A/AAAA记录", hide=True)
@@ -163,6 +167,10 @@ from dns import resolver
'domain': String(required=True),
'qtype': String(required=True, validate=OneOf(['A', 'AAAA', "CNAME", "NS"]))
}, location='query')
+ "code": Integer(),
+ "ans": List(Dict(String(validate=OneOf([rrest_key])), String()))
+})
def record(query_data):
# 特殊协议头
protols = ["https", "tls"]
@@ -194,8 +202,8 @@ def record(query_data):
myAnswers = myResolver.resolve(domain, qtype)
if myAnswers.rrset is not None:
for r in myAnswers.rrset:
- ans.append({"rrset": str(r)})
- return {'ans': ans}
+ ans.append({rrest_key: str(r)})
+ return {"code": 200, 'ans': ans}
@bp.get("/")
@@ -206,6 +214,7 @@ def record(query_data):
"ip": IP(load_default=None)
}, location='query')
@bp.output({
+ "code": Integer(),
"data": List(Nested(Target()))
})
def target_info(query_data):
@@ -227,7 +236,7 @@ def target_info(query_data):
"isp": fake.company(),
"time": fake.date_time_between('-2y'),
})
- return {"data": target_list}
+ return {"code": 200, "data": target_list}
# 查询目标
else:
lat, lng, _, cou, _ = fake.location_on_land()
@@ -241,4 +250,4 @@ def target_info(query_data):
"lng": lng,
"isp": fake.company(),
"time": fake.date_time_between('-2y'), }]
- return {"data": target}
+ return {"code": 200, "data": target}
diff --git a/server/apps/task.py b/server/apps/task.py
index 3905df4..3567248 100644
--- a/server/apps/task.py
+++ b/server/apps/task.py
@@ -45,8 +45,8 @@ class TaskState(Schema):
policy_name = String()
# 策略参数
policy_param = String()
- # 执行输出
- policy_output = List(Nested(TaskLog()))
+ # 执行策略编号
+ policy_id = String()
# 效果评估
policy_status = String()
@@ -76,10 +76,14 @@ class TaskState(Schema):
# 运行配置
"run_flag": String(validate=OneOf(["now", "man"]))
})
+ "code": Integer(),
+ "msg": String(),
+})
# TODO:创建任务接口具体实现
def make_task(json_data):
print(json_data)
- return {"msg": "ok"}
+ return {"code": 200, "msg": "ok"}
opsmap = {"start": "开始", "stop": "暂停", "cancel": "停止"}
@@ -92,10 +96,14 @@ opsmap = {"start": "开始", "stop": "暂停", "cancel": "停止"}
"taskid": String(required=True),
"ops": String(required=True, validate=OneOf(["start", "stop", "cancel"]))
})
+ "code": Integer(),
+ "msg": String(),
+})
# TODO:操作任务开始停止控制接口具体实现
def ops_task(json_data):
ops = opsmap[json_data["ops"]]
- return {"msg": "任务" + json_data["taskid"] + "已" + ops}
+ return {"code": 200, "msg": "任务" + json_data["taskid"] + "已" + ops}
# 查询任务列表接口
@@ -106,12 +114,15 @@ def ops_task(json_data):
"per_page": Integer(load_default=10)
}, location="query")
@bp.output({
- "data": List(Nested(Task()))
+ "code": Integer(),
+ "data": List(Nested(Task())),
+ "total": Integer()
})
# TODO:查询任务状态接口具体实现
def tasks_state(query_data):
+ per_page = query_data["per_page"]
task_list = []
- for _ in range(query_data["per_page"]):
+ for _ in range(per_page):
task_list.append({
"id": fake.random.randint(1, 10000),
"target": fake.ipv4(),
@@ -123,7 +134,7 @@ def tasks_state(query_data):
"create_time": fake.date_time_between(start_date="-1y"),
"status": random.choice(["working", "stop", "finish"])
})
- return {"data": task_list}
+ return {"code": 200, "data": task_list, "total": 10 * per_page}
# 任务详情接口
@@ -133,6 +144,7 @@ def tasks_state(query_data):
"taskid": String(required=True),
}, location="query")
@bp.output({
+ "code": Integer(),
"data": List(Nested(TaskState()))
})
# TODO:任务详情接口具体实现
@@ -146,13 +158,7 @@ def task_info(query_data):
"start_time": fake.date_time_between(start_date="-1y"),
"policy_name": random.choice(["IPv6", "DNSSEC", "DoT", "DoH"]) + " " + random.choice(["DDoS", "数据欺骗"]),
"policy_param": random.choice(["攻击速率: 1000pps", "目标域名: www.google.com | 目标记录: NS attack.com"]),
- "policy_output": [{
- "time": fake.date_time_between(start_date="-1y"),
- "ip": "192.168.1.1",
- "targetip": "2406:1234:1234:1234:1234:1234:1234:1234",
- "level": random.choice(["INFO", "WARNING", "ERROR"]),
- "info": fake.text(max_nb_chars=20, ext_word_list=None)
- } for _ in range(20)],
+ "policy_id": str(fake.random.randint(1, 10000)),
"policy_status": "无效;原因为:超时未成功"
})
# 当前正在执行的策略
@@ -160,13 +166,33 @@ def task_info(query_data):
"start_time": datetime.datetime.now(),
"policy_name": random.choice(["IPv6", "DNSSEC", "DoT", "DoH"]) + " " + random.choice(["DDoS", "数据欺骗"]),
"policy_param": random.choice(["攻击速率: 1000pps", "目标域名: www.google.com | 目标记录: NS attack.com"]),
- "policy_output": [{
- "time": fake.date_time_between(start_date="-1y"),
- "ip": "192.168.1.1",
- "targetip": "2406:1234:1234:1234:1234:1234:1234:1234",
- "level": random.choice(["INFO", "WARNING", "ERROR"]),
- "info": fake.text(max_nb_chars=20, ext_word_list=None)
- } for _ in range(20)],
+ "policy_id": str(fake.random.randint(1, 10000)),
"policy_status": "评估中"
})
return {"data": task_state_list}
+
+
[email protected]("任务策略执行日志获取接口")
+ "id": String(required=True),
+ "per_page": Integer(load_default=10),
+ "page": Integer(load_default=1)
+})
+ "code": Integer(),
+ "data": List(Nested(TaskLog())),
+ "total": Integer()
+})
+def taskpolicy_log(query_data):
+ per_page = query_data["per_page"]
+ page = query_data["page"]
+ policy_output = [{
+ "time": fake.date_time_between(start_date="-1y"),
+ "ip": "192.168.1.1",
+ "targetip": "2406:1234:1234:1234:1234:1234:1234:1234",
+ "level": random.choice(["INFO", "WARNING", "ERROR"]),
+ "info": fake.text(max_nb_chars=20, ext_word_list=None)
+ } for _ in range(20)]
+
+ return {"code": 200, "data": policy_output, "total": 10 * per_page}