Files
dns-server/static/api/js/index.js
2025-12-26 09:27:39 +08:00

1791 lines
95 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 定义API文档的JSON
const swaggerDocument = {
"openapi": "3.0.3",
"info": {
"title": "DNS Server API",
"description": "DNS服务器完整API文档包括统计信息、Shield管理、主机管理等功能。",
"version": "1.2.5",
"contact": {
"name": "DNS Server 支持",
"email": "support@dnsserver.com"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"servers": [
{
"url": "http://localhost:8080/api",
"description": "本地开发服务器"
},
{
"url": "http://{host}:{port}/api",
"description": "自定义服务器",
"variables": {
"host": {
"default": "localhost"
},
"port": {
"default": "8080"
}
}
}
],
"paths": {
"/login": {
"post": {
"summary": "用户登录",
"description": "使用用户名和密码登录DNS服务器API。",
"tags": ["auth"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"username": {"type": "string", "description": "用户名"},
"password": {"type": "string", "description": "密码"}
}
},
"example": {
"username": "admin",
"password": "admin"
}
}
}
},
"responses": {
"200": {
"description": "登录成功",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"},
"message": {"type": "string", "description": "操作信息"}
}
},
"example": {
"status": "success",
"message": "登录成功"
}
}
}
},
"400": {
"description": "请求参数错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {
"error": "无效的请求体"
}
}
}
},
"401": {
"description": "用户名或密码错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {
"error": "用户名或密码错误"
}
}
}
}
}
}
},
"/logout": {
"post": {
"summary": "用户注销",
"description": "注销当前登录的用户会话。",
"tags": ["auth"],
"responses": {
"200": {
"description": "注销成功",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"},
"message": {"type": "string", "description": "操作信息"}
}
},
"example": {
"status": "success",
"message": "注销成功"
}
}
}
}
}
}
},
"/change-password": {
"post": {
"summary": "修改密码",
"description": "修改当前登录用户的密码。",
"tags": ["auth"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"currentPassword": {"type": "string", "description": "当前密码"},
"newPassword": {"type": "string", "description": "新密码"}
}
},
"example": {
"currentPassword": "admin",
"newPassword": "newpassword"
}
}
}
},
"responses": {
"200": {
"description": "密码修改成功",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"},
"message": {"type": "string", "description": "操作信息"}
}
},
"example": {
"status": "success",
"message": "密码修改成功"
}
}
}
},
"400": {
"description": "请求参数错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {
"error": "无效的请求体"
}
}
}
},
"401": {
"description": "当前密码错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {
"error": "当前密码错误"
}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {
"error": "保存密码失败"
}
}
}
}
}
}
},
"/stats": {
"get": {
"summary": "获取系统统计信息",
"description": "获取DNS服务器和Shield的详细统计信息包括查询量、CPU使用率等。",
"tags": ["stats"],
"responses": {
"200": {
"description": "成功获取统计信息",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"dns": {
"type": "object",
"properties": {
"Queries": {"type": "integer", "description": "总查询次数"},
"Blocked": {"type": "integer", "description": "被阻止的查询次数"},
"Allowed": {"type": "integer", "description": "允许的查询次数"},
"Errors": {"type": "integer", "description": "错误查询次数"},
"LastQuery": {"type": "string", "description": "最近一次查询时间"},
"AvgResponseTime": {"type": "number", "description": "平均响应时间(毫秒)"},
"TotalResponseTime": {"type": "number", "description": "总响应时间(毫秒)"},
"QueryTypes": {"type": "object", "description": "查询类型统计"},
"SourceIPs": {"type": "object", "description": "来源IP统计"},
"CpuUsage": {"type": "number", "description": "CPU使用率(百分比)"},
"DNSSECQueries": {"type": "integer", "description": "DNSSEC查询次数"},
"DNSSECSuccess": {"type": "integer", "description": "DNSSEC成功次数"},
"DNSSECFailed": {"type": "integer", "description": "DNSSEC失败次数"},
"DNSSECEnabled": {"type": "boolean", "description": "是否启用DNSSEC"}
}
},
"shield": {"type": "object", "description": "Shield统计信息"},
"topQueryType": {"type": "string", "description": "最常见的查询类型"},
"activeIPs": {"type": "integer", "description": "活跃IP数量"},
"avgResponseTime": {"type": "number", "description": "平均响应时间(毫秒)"},
"cpuUsage": {"type": "number", "description": "CPU使用率(百分比)"},
"dnssecEnabled": {"type": "boolean", "description": "是否启用DNSSEC"},
"dnssecQueries": {"type": "integer", "description": "DNSSEC查询次数"},
"dnssecSuccess": {"type": "integer", "description": "DNSSEC成功次数"},
"dnssecFailed": {"type": "integer", "description": "DNSSEC失败次数"},
"dnssecUsage": {"type": "number", "description": "DNSSEC使用率(百分比)"},
"time": {"type": "string", "description": "统计时间"}
}
},
"examples": {
"default": {
"value": {
"dns": {
"Queries": 1250,
"Blocked": 230,
"Allowed": 1020,
"Errors": 0,
"LastQuery": "2023-07-15T14:30:45Z",
"AvgResponseTime": 12.5,
"TotalResponseTime": 15625,
"QueryTypes": {"A": 850, "AAAA": 250, "CNAME": 150},
"SourceIPs": {"192.168.1.100": 500, "192.168.1.101": 750},
"CpuUsage": 0.15,
"DNSSECQueries": 500,
"DNSSECSuccess": 480,
"DNSSECFailed": 20,
"DNSSECEnabled": true
},
"shield": {},
"topQueryType": "A",
"activeIPs": 2,
"avgResponseTime": 12.5,
"cpuUsage": 0.15,
"dnssecEnabled": true,
"dnssecQueries": 500,
"dnssecSuccess": 480,
"dnssecFailed": 20,
"dnssecUsage": 40.0,
"time": "2023-07-15T14:30:45Z"
}
}
}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "无法获取统计信息"}
}
}
}
}
}
},
"/top-blocked": {
"get": {
"summary": "获取TOP被阻止域名",
"description": "获取被阻止次数最多的域名列表。",
"tags": ["stats"],
"responses": {
"200": {
"description": "成功获取TOP被阻止域名",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"domain": {"type": "string", "description": "域名"},
"count": {"type": "integer", "description": "被阻止次数"}
}
}
},
"example": [
{"domain": "ad.example.com", "count": 150},
{"domain": "tracker.example.net", "count": 120}
]
}
}
}
}
}
},
"/top-resolved": {
"get": {
"summary": "获取TOP已解析域名",
"description": "获取解析次数最多的域名列表。",
"tags": ["stats"],
"responses": {
"200": {
"description": "成功获取TOP已解析域名",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"domain": {"type": "string", "description": "域名"},
"count": {"type": "integer", "description": "解析次数"}
}
}
},
"example": [
{"domain": "google.com", "count": 200},
{"domain": "facebook.com", "count": 150}
]
}
}
}
}
}
},
"/top-clients": {
"get": {
"summary": "获取TOP客户端",
"description": "获取查询量最多的客户端IP列表。",
"tags": ["stats"],
"responses": {
"200": {
"description": "成功获取TOP客户端",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ip": {"type": "string", "description": "客户端IP地址"},
"count": {"type": "integer", "description": "查询次数"}
}
}
},
"example": [
{"ip": "192.168.1.100", "count": 500},
{"ip": "192.168.1.101", "count": 750}
]
}
}
}
}
}
},
"/top-domains": {
"get": {
"summary": "获取TOP域名",
"description": "获取查询量最多的域名列表(包括被阻止和已解析的域名)。",
"tags": ["stats"],
"responses": {
"200": {
"description": "成功获取TOP域名",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"domain": {"type": "string", "description": "域名"},
"count": {"type": "integer", "description": "查询次数"}
}
}
},
"example": [
{"domain": "example.com", "count": 150},
{"domain": "google.com", "count": 120}
]
}
}
}
}
}
},
"/recent-blocked": {
"get": {
"summary": "获取最近被阻止的域名",
"description": "获取最近被Shield阻止的域名列表。",
"tags": ["stats"],
"responses": {
"200": {
"description": "成功获取最近被阻止的域名",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"domain": {"type": "string", "description": "域名"},
"timestamp": {"type": "string", "description": "阻止时间"}
}
}
},
"example": [
{"domain": "ad.example.com", "timestamp": "2023-07-15T14:30:45Z"},
{"domain": "tracker.example.net", "timestamp": "2023-07-15T14:29:30Z"}
]
}
}
}
}
}
},
"/hourly-stats": {
"get": {
"summary": "获取小时统计",
"description": "获取按小时统计的DNS查询数据。",
"tags": ["stats"],
"responses": {
"200": {
"description": "成功获取小时统计",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"labels": {"type": "array", "items": {"type": "string"}, "description": "小时标签"},
"data": {"type": "array", "items": {"type": "integer"}, "description": "查询次数数据"}
}
},
"example": {
"labels": ["15:00", "16:00", "17:00"],
"data": [120, 90, 150]
}
}
}
}
}
}
},
"/daily-stats": {
"get": {
"summary": "获取每日统计",
"description": "获取最近7天的DNS查询统计数据。",
"tags": ["stats"],
"responses": {
"200": {
"description": "成功获取每日统计",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"labels": {"type": "array", "items": {"type": "string"}, "description": "日期标签"},
"data": {"type": "array", "items": {"type": "integer"}, "description": "查询次数数据"}
}
},
"example": {
"labels": ["01-02", "01-03", "01-04"],
"data": [2500, 2700, 2300]
}
}
}
}
}
}
},
"/monthly-stats": {
"get": {
"summary": "获取每月统计",
"description": "获取最近30天的DNS查询统计数据。",
"tags": ["stats"],
"responses": {
"200": {
"description": "成功获取每月统计",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"labels": {"type": "array", "items": {"type": "string"}, "description": "日期标签"},
"data": {"type": "array", "items": {"type": "integer"}, "description": "查询次数数据"}
}
},
"example": {
"labels": ["01-01", "01-02", "01-03"],
"data": [2500, 2700, 2300]
}
}
}
}
}
}
},
"/query/type": {
"get": {
"summary": "获取查询类型统计",
"description": "获取DNS查询类型的详细统计信息。",
"tags": ["stats"],
"responses": {
"200": {
"description": "成功获取查询类型统计",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {"type": "string", "description": "查询类型"},
"count": {"type": "integer", "description": "查询次数"}
}
}
},
"example": [
{"type": "A", "count": 850},
{"type": "AAAA", "count": 250},
{"type": "CNAME", "count": 150}
]
}
}
}
}
}
},
"/logs/stats": {
"get": {
"summary": "获取日志统计信息",
"description": "获取DNS查询日志的统计信息。",
"tags": ["logs"],
"responses": {
"200": {
"description": "成功获取日志统计信息",
"content": {
"application/json": {
"schema": {
"type": "object",
"description": "日志统计信息"}
}
}
}
}
}
},
"/logs/query": {
"get": {
"summary": "查询日志",
"description": "根据条件查询DNS查询日志。",
"tags": ["logs"],
"parameters": [
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"default": 100
},
"description": "返回结果数量限制"
},
{
"name": "offset",
"in": "query",
"schema": {
"type": "integer",
"default": 0
},
"description": "结果偏移量"
},
{
"name": "sort",
"in": "query",
"schema": {
"type": "string"
},
"description": "排序字段"
},
{
"name": "direction",
"in": "query",
"schema": {
"type": "string"
},
"description": "排序方向"
},
{
"name": "result",
"in": "query",
"schema": {
"type": "string"
},
"description": "查询结果过滤"
},
{
"name": "search",
"in": "query",
"schema": {
"type": "string"
},
"description": "搜索关键词"
}
],
"responses": {
"200": {
"description": "成功查询日志",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"description": "日志条目"
}
}
}
}
}
}
}
},
"/logs/count": {
"get": {
"summary": "获取日志总数",
"description": "获取DNS查询日志的总数。",
"tags": ["logs"],
"responses": {
"200": {
"description": "成功获取日志总数",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"count": {"type": "integer", "description": "日志总数"}
}
},
"example": {
"count": 1000
}
}
}
}
}
}
},
"/shield": {
"get": {
"summary": "获取Shield配置和统计信息",
"description": "获取Shield的配置信息和规则统计包括更新间隔、屏蔽方法、黑名单数量等。",
"deprecated": false,
"tags": ["shield"],
"responses": {
"200": {
"description": "成功获取配置和统计信息",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"updateInterval": {"type": "integer", "description": "更新间隔(秒)"},
"blockMethod": {"type": "string", "description": "屏蔽方法"},
"blacklistCount": {"type": "integer", "description": "黑名单数量"},
"domainRulesCount": {"type": "integer", "description": "域名规则数量"},
"domainExceptionsCount": {"type": "integer", "description": "域名例外规则数量"},
"regexRulesCount": {"type": "integer", "description": "正则规则数量"},
"regexExceptionsCount": {"type": "integer", "description": "正则例外规则数量"},
"hostsRulesCount": {"type": "integer", "description": "Hosts规则数量"}
}
},
"example": {
"updateInterval": 3600,
"blockMethod": "NXDOMAIN",
"blacklistCount": 4,
"domainRulesCount": 1000,
"domainExceptionsCount": 100,
"regexRulesCount": 50,
"regexExceptionsCount": 10,
"hostsRulesCount": 200
}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "无法获取Shield配置"}
}
}
}
}
},
"post": {
"summary": "添加屏蔽规则",
"description": "添加新的屏蔽规则到Shield。",
"deprecated": false,
"tags": ["shield"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"rule": {"type": "string", "description": "屏蔽规则"}
}
},
"example": {
"rule": "example.com"
}
}
}
},
"responses": {
"200": {
"description": "成功添加规则",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"}
}
},
"example": {"status": "success"}
}
}
},
"400": {
"description": "请求参数错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "参数格式错误"}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "添加规则失败"}
}
}
}
}
},
"delete": {
"summary": "删除屏蔽规则",
"description": "从Shield中删除指定的屏蔽规则。",
"deprecated": false,
"tags": ["shield"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"rule": {"type": "string", "description": "要删除的屏蔽规则"}
}
},
"example": {
"rule": "example.com"
}
}
}
},
"responses": {
"200": {
"description": "成功删除规则",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"}
}
},
"example": {"status": "success"}
}
}
},
"400": {
"description": "请求参数错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "参数格式错误"}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "删除规则失败"}
}
}
}
}
},
"put": {
"summary": "重新加载规则",
"description": "重新加载和应用Shield规则。",
"deprecated": false,
"tags": ["shield"],
"responses": {
"200": {
"description": "成功重新加载规则",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"},
"message": {"type": "string", "description": "操作信息"}
}
},
"example": {
"status": "success",
"message": "规则重新加载成功"
}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "重新加载规则失败"}
}
}
}
}
}
},
"/shield/blacklists": {
"get": {
"summary": "获取黑名单列表",
"description": "获取Shield的黑名单列表包括内置黑名单和自定义黑名单。",
"deprecated": false,
"tags": ["shield"],
"responses": {
"200": {
"description": "成功获取黑名单列表",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string", "description": "黑名单名称"},
"url": {"type": "string", "description": "黑名单URL"},
"enabled": {"type": "boolean", "description": "是否启用"},
"lastUpdate": {"type": "string", "description": "最后更新时间"},
"status": {"type": "string", "description": "状态"},
"rulesCount": {"type": "integer", "description": "规则数量"}
}
}
},
"example": [
{
"name": "AdBlock List",
"url": "https://example.com/ads.txt",
"enabled": true,
"lastUpdate": "2023-07-15T10:00:00Z",
"status": "active",
"rulesCount": 1500
}
]
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "获取黑名单列表失败"}
}
}
}
}
},
"post": {
"summary": "添加黑名单",
"description": "添加新的黑名单URL到Shield。",
"deprecated": false,
"tags": ["shield"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": ["name", "url"],
"properties": {
"name": {"type": "string", "description": "黑名单名称"},
"url": {"type": "string", "description": "黑名单URL"},
"enabled": {"type": "boolean", "description": "是否启用", "default": true}
}
},
"example": {
"name": "AdBlock List",
"url": "https://example.com/ads.txt",
"enabled": true
}
}
}
},
"responses": {
"200": {
"description": "成功添加黑名单",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"}
}
},
"example": {"status": "success"}
}
}
},
"400": {
"description": "请求参数错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "名称和URL为必填项"}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "添加黑名单失败"}
}
}
}
}
},
"put": {
"summary": "更新黑名单列表(包括启用/禁用状态)",
"description": "更新黑名单列表(包括启用/禁用状态)。",
"deprecated": false,
"tags": ["shield"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"blacklists": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string", "description": "黑名单名称"},
"url": {"type": "string", "description": "黑名单URL"},
"enabled": {"type": "boolean", "description": "是否启用"}
}
}
}
}
},
"example": {
"blacklists": [
{
"name": "AdBlock List",
"url": "https://example.com/ads.txt",
"enabled": true
}
]
}
}
}
},
"responses": {
"200": {
"description": "成功更新黑名单列表",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"}
}
},
"example": {"status": "success"}
}
}
},
"400": {
"description": "请求参数错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "无效的请求体"}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "更新黑名单列表失败"}
}
}
}
}
}
},
"/shield/localrules": {
"get": {
"summary": "获取自定义规则",
"description": "获取Shield的自定义规则列表。",
"deprecated": false,
"tags": ["shield"],
"responses": {
"200": {
"description": "成功获取自定义规则",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string", "description": "规则ID"},
"pattern": {"type": "string", "description": "规则模式"},
"description": {"type": "string", "description": "规则描述"}
}
}
},
"example": [
{"id": "1", "pattern": ".*malware.*", "description": "恶意软件域名"}
]
}
}
}
}
},
"post": {
"summary": "添加自定义规则",
"description": "添加新的自定义规则。",
"deprecated": false,
"tags": ["shield"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"pattern": {"type": "string", "description": "规则模式"},
"description": {"type": "string", "description": "规则描述"}
}
},
"example": {
"pattern": ".*ad\.com$",
"description": "广告域名"
}
}
}
},
"responses": {
"200": {
"description": "成功添加规则",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"}
}
},
"example": {"status": "success"}
}
}
}
}
},
"delete": {
"summary": "删除自定义规则",
"description": "删除指定的自定义规则。",
"deprecated": false,
"tags": ["shield"],
"parameters": [
{
"name": "id",
"in": "query",
"required": true,
"schema": {
"type": "string"
},
"description": "规则ID"
}
],
"responses": {
"200": {
"description": "成功删除规则",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"}
}
},
"example": {"status": "success"}
}
}
}
}
}
},
"/shield/remoterules": {
"get": {
"summary": "获取远程规则状态",
"description": "获取远程规则的更新状态和版本信息。",
"deprecated": false,
"tags": ["shield"],
"responses": {
"200": {
"description": "成功获取远程规则",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string", "description": "规则ID"},
"pattern": {"type": "string", "description": "规则模式"},
"source": {"type": "string", "description": "规则来源"}
}
}
},
"example": [
{"id": "1001", "pattern": ".*phishing.*", "source": "malwarelist"}
]
}
}
}
}
}
},
"/shield/hosts": {
"get": {
"summary": "获取hosts内容",
"description": "获取当前的hosts文件内容。",
"deprecated": false,
"tags": ["shield"],
"responses": {
"200": {
"description": "成功获取hosts列表",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ip": {"type": "string", "description": "IP地址"},
"domain": {"type": "string", "description": "域名"}
}
}
},
"example": [
{"ip": "127.0.0.1", "domain": "localhost"}
]
}
}
}
}
},
"post": {
"summary": "添加hosts记录",
"description": "添加新的hosts记录。",
"deprecated": false,
"tags": ["shield"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": ["ip", "domain"],
"properties": {
"ip": {"type": "string", "description": "IP地址"},
"domain": {"type": "string", "description": "域名"}
}
},
"example": {
"ip": "127.0.0.1",
"domain": "example.com"
}
}
}
},
"responses": {
"200": {
"description": "成功添加hosts记录",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"}
}
},
"example": {"status": "success"}
}
}
},
"400": {
"description": "请求参数错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "IP和域名是必填项"}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "添加hosts记录失败"}
}
}
}
}
},
"delete": {
"summary": "删除hosts记录",
"description": "删除指定域名的hosts记录。",
"deprecated": false,
"tags": ["shield"],
"parameters": [
{
"name": "domain",
"in": "query",
"required": true,
"schema": {
"type": "string"
},
"description": "要删除的域名"
}
],
"responses": {
"200": {
"description": "成功删除hosts记录",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"}
}
},
"example": {"status": "success"}
}
}
},
"400": {
"description": "请求参数错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "域名是必填项"}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "删除hosts记录失败"}
}
}
}
}
}
},
"/dns/query": {
"post": {
"summary": "查询DNS记录",
"description": "查询指定域名的DNS记录可以指定记录类型。",
"tags": ["dns"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "要查询的域名"
},
"recordType": {
"type": "string",
"description": "DNS记录类型如A、AAAA、MX、NS等"
}
},
"required": ["domain"]
},
"example": {
"domain": "example.com",
"recordType": "A"
}
}
}
},
"responses": {
"200": {
"description": "成功获取DNS记录",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"Type": {
"type": "string",
"description": "DNS记录类型"
},
"Value": {
"type": "string",
"description": "DNS记录值"
},
"TTL": {
"type": "integer",
"description": "生存时间"
},
"Preference": {
"type": "integer",
"description": "MX记录优先级"
}
}
}
},
"example": [
{"Type": "A", "Value": "93.184.216.34", "TTL": 172800},
{"Type": "A", "Value": "93.184.216.35", "TTL": 172800}
]
}
}
},
"400": {
"description": "请求参数错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "错误信息"
}
}
},
"example": {
"error": "Domain parameter is required"
}
}
}
}
}
}
},
"/status": {
"get": {
"summary": "获取服务器状态",
"description": "获取DNS服务器的状态信息包括查询统计、运行时间等。",
"tags": ["server"],
"responses": {
"200": {
"description": "成功获取服务器状态",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "服务器状态"},
"queries": {"type": "integer", "description": "总查询次数"},
"blocked": {"type": "integer", "description": "被阻止的查询次数"},
"allowed": {"type": "integer", "description": "允许的查询次数"},
"errors": {"type": "integer", "description": "错误查询次数"},
"lastQuery": {"type": "string", "description": "最近一次查询时间"},
"avgResponseTime": {"type": "number", "description": "平均响应时间(毫秒)"},
"activeIPs": {"type": "integer", "description": "活跃IP数量"},
"startTime": {"type": "string", "description": "服务器启动时间"},
"uptime": {"type": "integer", "description": "运行时间(毫秒)"},
"cpuUsage": {"type": "number", "description": "CPU使用率(百分比)"},
"timestamp": {"type": "string", "description": "当前时间"}
}
},
"example": {
"status": "running",
"queries": 1250,
"blocked": 230,
"allowed": 1020,
"errors": 0,
"lastQuery": "2023-07-15T14:30:45Z",
"avgResponseTime": 12.5,
"activeIPs": 2,
"startTime": "2023-07-15T10:00:00Z",
"uptime": 16200000,
"cpuUsage": 0.15,
"timestamp": "2023-07-15T14:30:45Z"
}
}
}
}
}
}
},
"/config": {
"get": {
"summary": "获取服务器配置",
"description": "获取DNS服务器的配置信息包括Shield配置。",
"tags": ["server"],
"responses": {
"200": {
"description": "成功获取服务器配置",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"shield": {
"type": "object",
"properties": {
"blockMethod": {"type": "string", "description": "屏蔽方法"},
"customBlockIP": {"type": "string", "description": "自定义屏蔽IP"},
"blacklists": {"type": "array", "description": "黑名单列表", "items": {"type": "object"}},
"updateInterval": {"type": "integer", "description": "更新间隔(秒)"}
}
}
}
},
"example": {
"shield": {
"blockMethod": "NXDOMAIN",
"customBlockIP": "",
"blacklists": [
{
"name": "AdGuard DNS filter",
"url": "https://example.com/ads.txt",
"enabled": true
}
],
"updateInterval": 3600
}
}
}
}
}
}
},
"post": {
"summary": "更新服务器配置",
"description": "更新DNS服务器的配置信息包括Shield配置。",
"tags": ["server"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"shield": {
"type": "object",
"properties": {
"blockMethod": {"type": "string", "description": "屏蔽方法"},
"customBlockIP": {"type": "string", "description": "自定义屏蔽IP"},
"blacklists": {"type": "array", "description": "黑名单列表", "items": {"type": "object"}},
"updateInterval": {"type": "integer", "description": "更新间隔(秒)"}
}
}
}
},
"example": {
"shield": {
"blockMethod": "NXDOMAIN",
"customBlockIP": "",
"blacklists": [
{
"name": "AdGuard DNS filter",
"url": "https://example.com/ads.txt",
"enabled": true
}
],
"updateInterval": 3600
}
}
}
}
},
"responses": {
"200": {
"description": "成功更新服务器配置",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {"type": "boolean", "description": "是否成功"},
"message": {"type": "string", "description": "操作信息"}
}
},
"example": {
"success": true,
"message": "配置已更新"
}
}
}
},
"400": {
"description": "请求参数错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {
"error": "无效的请求体"
}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {
"error": "保存配置失败"
}
}
}
}
}
}
},
"/config/restart": {
"post": {
"summary": "重启服务器",
"description": "重启DNS服务器。",
"tags": ["server"],
"responses": {
"200": {
"description": "成功重启服务器",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "string", "description": "操作状态"}
}
},
"example": {"status": "success"}
}
}
},
"500": {
"description": "服务器内部错误",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {"type": "string", "description": "错误信息"}
}
},
"example": {"error": "重启服务器失败"}
}
}
}
}
}
}
},
"tags": [
{
"name": "auth",
"description": "认证相关API"
},
{
"name": "stats",
"description": "统计相关API"
},
{
"name": "shield",
"description": "Shield相关API"
},
{
"name": "server",
"description": "服务器相关API"
},
{
"name": "logs",
"description": "日志相关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;
};