464 lines
21 KiB
HTML
464 lines
21 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>DNS Server API 文档</title>
|
|
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.52.3/swagger-ui.css">
|
|
<style>
|
|
body {
|
|
margin: 0;
|
|
padding: 0;
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
}
|
|
.swagger-ui .topbar {
|
|
background-color: #2c3e50;
|
|
padding: 10px 0;
|
|
}
|
|
.swagger-ui .topbar .topbar-wrapper .link {
|
|
color: #ecf0f1;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="swagger-ui"></div>
|
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.52.3/swagger-ui-bundle.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.52.3/swagger-ui-standalone-preset.js"></script>
|
|
<script>
|
|
// 定义API文档的JSON
|
|
const swaggerDocument = {
|
|
"openapi": "3.0.0",
|
|
"info": {
|
|
"title": "DNS Server API",
|
|
"description": "DNS服务器API文档",
|
|
"version": "1.0.0",
|
|
"contact": {
|
|
"name": "API Support",
|
|
"email": "support@example.com"
|
|
},
|
|
"license": {
|
|
"name": "Apache 2.0",
|
|
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
|
|
}
|
|
},
|
|
"servers": [
|
|
{
|
|
"url": "http://localhost:8080/api",
|
|
"description": "本地开发服务器"
|
|
}
|
|
],
|
|
"paths": {
|
|
"/stats": {
|
|
"get": {
|
|
"summary": "获取系统统计信息",
|
|
"description": "获取DNS服务器和Shield的统计信息",
|
|
"tags": ["stats"],
|
|
"responses": {
|
|
"200": {
|
|
"description": "成功获取统计信息",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"dns": {
|
|
"type": "object",
|
|
"properties": {
|
|
"Queries": {"type": "integer"},
|
|
"Blocked": {"type": "integer"},
|
|
"Allowed": {"type": "integer"},
|
|
"Errors": {"type": "integer"},
|
|
"LastQuery": {"type": "string"},
|
|
"AvgResponseTime": {"type": "number"},
|
|
"TotalResponseTime": {"type": "number"},
|
|
"QueryTypes": {"type": "object"},
|
|
"SourceIPs": {"type": "object"},
|
|
"CpuUsage": {"type": "number"}
|
|
}
|
|
},
|
|
"shield": {"type": "object"},
|
|
"topQueryType": {"type": "string"},
|
|
"activeIPs": {"type": "integer"},
|
|
"avgResponseTime": {"type": "number"},
|
|
"cpuUsage": {"type": "number"},
|
|
"time": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "服务器内部错误",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/shield": {
|
|
"get": {
|
|
"summary": "获取Shield配置",
|
|
"description": "获取Shield的配置信息",
|
|
"tags": ["shield"],
|
|
"responses": {
|
|
"200": {
|
|
"description": "成功获取配置信息",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "服务器内部错误",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "更新Shield配置",
|
|
"description": "更新Shield的配置信息",
|
|
"tags": ["shield"],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "成功更新配置",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "请求参数错误",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "服务器内部错误",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/shield/blacklists": {
|
|
"get": {
|
|
"summary": "获取黑名单列表",
|
|
"description": "获取所有远程黑名单的列表",
|
|
"tags": ["shield"],
|
|
"responses": {
|
|
"200": {
|
|
"description": "成功获取黑名单列表",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {"type": "string"},
|
|
"url": {"type": "string"},
|
|
"enabled": {"type": "boolean"},
|
|
"lastUpdate": {"type": "string"},
|
|
"status": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "服务器内部错误",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "添加黑名单",
|
|
"description": "添加新的远程黑名单",
|
|
"tags": ["shield"],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": ["name", "url"],
|
|
"properties": {
|
|
"name": {"type": "string"},
|
|
"url": {"type": "string"},
|
|
"enabled": {"type": "boolean"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "成功添加黑名单",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "请求参数错误",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "服务器内部错误",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "更新黑名单",
|
|
"description": "更新黑名单的配置信息",
|
|
"tags": ["shield"],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": ["name"],
|
|
"properties": {
|
|
"name": {"type": "string"},
|
|
"url": {"type": "string"},
|
|
"enabled": {"type": "boolean"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "成功更新黑名单",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "请求参数错误",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "黑名单不存在",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "服务器内部错误",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/shield/blacklists/{name}": {
|
|
"delete": {
|
|
"summary": "删除黑名单",
|
|
"description": "根据名称删除指定的远程黑名单",
|
|
"tags": ["shield"],
|
|
"parameters": [
|
|
{
|
|
"name": "name",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "黑名单名称"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "成功删除黑名单",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "黑名单不存在",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "服务器内部错误",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
{
|
|
"name": "stats",
|
|
"description": "统计信息相关API"
|
|
},
|
|
{
|
|
"name": "shield",
|
|
"description": "Shield功能相关API"
|
|
}
|
|
]
|
|
};
|
|
|
|
// 初始化Swagger UI
|
|
window.onload = function() {
|
|
const ui = SwaggerUIBundle({
|
|
spec: swaggerDocument,
|
|
dom_id: '#swagger-ui',
|
|
deepLinking: true,
|
|
presets: [
|
|
SwaggerUIBundle.presets.apis,
|
|
SwaggerUIStandalonePreset
|
|
],
|
|
plugins: [
|
|
SwaggerUIBundle.plugins.DownloadUrl
|
|
],
|
|
layout: "StandaloneLayout"
|
|
});
|
|
window.ui = ui;
|
|
};
|
|
</script>
|
|
</body>
|
|
</html> |