mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-02-01 18:41:24 -05:00
Merge branch 'main' of https://github.com/jokob-sk/NetAlertX
This commit is contained in:
@@ -27,8 +27,8 @@
|
||||
"AppEvents_ObjectType": "对象类型",
|
||||
"AppEvents_Plugin": "插件",
|
||||
"AppEvents_Type": "类型",
|
||||
"BACKEND_API_URL_description": "",
|
||||
"BACKEND_API_URL_name": "",
|
||||
"BACKEND_API_URL_description": "用于生成后端API URL。如果您使用反向代理映射到您的<code>GRAPHQL_PORT</code>,请指定。请输入以<code>http://</code>开头的完整URL,包括端口号(末尾不带斜杠<code>/</code>)。",
|
||||
"BACKEND_API_URL_name": "后端 API 网址",
|
||||
"BackDevDetail_Actions_Ask_Run": "您要执行此操作吗?",
|
||||
"BackDevDetail_Actions_Not_Registered": "未注册的操作: ",
|
||||
"BackDevDetail_Actions_Title_Run": "运行动作",
|
||||
@@ -98,10 +98,10 @@
|
||||
"DevDetail_MainInfo_Network": "<i class=\"fa fa-server\"></i> 节点 (MAC)",
|
||||
"DevDetail_MainInfo_Network_Port": "<i class=\"fa fa-ethernet\"></i> 端口",
|
||||
"DevDetail_MainInfo_Network_Site": "地点",
|
||||
"DevDetail_MainInfo_Network_Title": "网络",
|
||||
"DevDetail_MainInfo_Network_Title": "网络 详情",
|
||||
"DevDetail_MainInfo_Owner": "所有者",
|
||||
"DevDetail_MainInfo_SSID": "SSID",
|
||||
"DevDetail_MainInfo_Title": "主要信息",
|
||||
"DevDetail_MainInfo_Title": "设备信息",
|
||||
"DevDetail_MainInfo_Type": "类型",
|
||||
"DevDetail_MainInfo_Vendor": "制造商",
|
||||
"DevDetail_MainInfo_mac": "MAC",
|
||||
@@ -203,10 +203,10 @@
|
||||
"Device_MultiEdit_MassActions": "谨慎操作:",
|
||||
"Device_MultiEdit_No_Devices": "未选择设备。",
|
||||
"Device_MultiEdit_Tooltip": "小心。 单击此按钮会将左侧的值应用到上面选择的所有设备。",
|
||||
"Device_Save_Failed": "",
|
||||
"Device_Save_Unauthorized": "",
|
||||
"Device_Saved_Success": "",
|
||||
"Device_Saved_Unexpected": "",
|
||||
"Device_Save_Failed": "保存设备失败",
|
||||
"Device_Save_Unauthorized": "未授权 - API 令牌无效",
|
||||
"Device_Saved_Success": "设备保存成功",
|
||||
"Device_Saved_Unexpected": "设备更新返回了一个意外的响应",
|
||||
"Device_Searchbox": "搜索",
|
||||
"Device_Shortcut_AllDevices": "我的设备",
|
||||
"Device_Shortcut_AllNodes": "全部节点",
|
||||
@@ -226,8 +226,8 @@
|
||||
"Device_TableHead_FirstSession": "加入",
|
||||
"Device_TableHead_GUID": "GUID",
|
||||
"Device_TableHead_Group": "组",
|
||||
"Device_TableHead_IPv4": "",
|
||||
"Device_TableHead_IPv6": "",
|
||||
"Device_TableHead_IPv4": "IPv4",
|
||||
"Device_TableHead_IPv6": "IPv6",
|
||||
"Device_TableHead_Icon": "图标",
|
||||
"Device_TableHead_LastIP": "上次 IP",
|
||||
"Device_TableHead_LastIPOrder": "上次 IP 排序",
|
||||
@@ -251,7 +251,7 @@
|
||||
"Device_TableHead_SyncHubNodeName": "同步节点",
|
||||
"Device_TableHead_Type": "类型",
|
||||
"Device_TableHead_Vendor": "制造商",
|
||||
"Device_TableHead_Vlan": "",
|
||||
"Device_TableHead_Vlan": "VLAN",
|
||||
"Device_Table_Not_Network_Device": "未配置为网络设备",
|
||||
"Device_Table_info": "显示第_START_至 END_条_共_TOTAL_条",
|
||||
"Device_Table_nav_next": "下一页",
|
||||
@@ -299,14 +299,14 @@
|
||||
"Events_Tablelenght": "显示_MENU_条",
|
||||
"Events_Tablelenght_all": "全部",
|
||||
"Events_Title": "事件",
|
||||
"FakeMAC_hover": "",
|
||||
"FieldLock_Error": "",
|
||||
"FieldLock_Lock_Tooltip": "",
|
||||
"FieldLock_Locked": "",
|
||||
"FieldLock_SaveBeforeLocking": "",
|
||||
"FieldLock_Source_Label": "",
|
||||
"FieldLock_Unlock_Tooltip": "",
|
||||
"FieldLock_Unlocked": "",
|
||||
"FakeMAC_hover": "该设备具有伪造/欺骗的 MAC 地址",
|
||||
"FieldLock_Error": "更新字段锁定状态时出错",
|
||||
"FieldLock_Lock_Tooltip": "锁定字段(防止插件覆盖)",
|
||||
"FieldLock_Locked": "字段锁定",
|
||||
"FieldLock_SaveBeforeLocking": "在锁定之前请先保存您的更改",
|
||||
"FieldLock_Source_Label": "出自: ",
|
||||
"FieldLock_Unlock_Tooltip": "解锁字段(允许插件覆盖)",
|
||||
"FieldLock_Unlocked": "字段解锁",
|
||||
"GRAPHQL_PORT_description": "GraphQL服务器的端口号。请确保该端口在该主机和 NetAlertX 实例上的所有应用程序中都是唯一的。",
|
||||
"GRAPHQL_PORT_name": "GraphQL端口",
|
||||
"Gen_Action": "动作",
|
||||
@@ -328,7 +328,7 @@
|
||||
"Gen_Filter": "筛选",
|
||||
"Gen_Generate": "生成",
|
||||
"Gen_InvalidMac": "无效的 Mac 地址。",
|
||||
"Gen_Invalid_Value": "",
|
||||
"Gen_Invalid_Value": "输入了无效的值",
|
||||
"Gen_LockedDB": "错误 - DB 可能被锁定 - 检查 F12 开发工具 -> 控制台或稍后重试。",
|
||||
"Gen_NetworkMask": "网络掩码",
|
||||
"Gen_Offline": "离线",
|
||||
@@ -402,7 +402,7 @@
|
||||
"Maintenance_Tool_ExportCSV": "设备导出(csv)",
|
||||
"Maintenance_Tool_ExportCSV_noti": "设备导出(csv)",
|
||||
"Maintenance_Tool_ExportCSV_noti_text": "您确定要生成 CSV 文件吗?",
|
||||
"Maintenance_Tool_ExportCSV_text": "生成一个 CSV(逗号分隔值)文件,其中包含设备列表,包括网络节点和连接设备之间的网络关系。您也可以通过访问此 URL <code>your NetAlertX url/php/server/devices.php?action=ExportCSV</code> 或启用 <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a> 插件来触发此功能。",
|
||||
"Maintenance_Tool_ExportCSV_text": "生成一个 CSV(逗号分隔值)文件,其中包含设备列表,包括网络节点和连接设备之间的网络关系。您也可以启用 <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a> 插件来触发此功能。",
|
||||
"Maintenance_Tool_ImportCSV": "设备导入(csv)",
|
||||
"Maintenance_Tool_ImportCSV_noti": "设备导入(csv)",
|
||||
"Maintenance_Tool_ImportCSV_noti_text": "您确定要导入 CSV 文件吗?这将完全<b>覆盖</b>数据库中的设备。",
|
||||
@@ -414,10 +414,10 @@
|
||||
"Maintenance_Tool_ImportPastedConfig": "设置导入(粘贴)",
|
||||
"Maintenance_Tool_ImportPastedConfig_noti_text": "您确认要导入粘贴的设置吗?这会完全<b>覆盖</b><code>app.conf</code>的内容。",
|
||||
"Maintenance_Tool_ImportPastedConfig_text": "导入包含所有应用程序设置的<code>app.conf</code>文件。建议先通过<b>设置导出</b>功能下载当前的<code>app.conf</code>文件。",
|
||||
"Maintenance_Tool_UnlockFields": "",
|
||||
"Maintenance_Tool_UnlockFields_noti": "",
|
||||
"Maintenance_Tool_UnlockFields_noti_text": "",
|
||||
"Maintenance_Tool_UnlockFields_text": "",
|
||||
"Maintenance_Tool_UnlockFields": "清除所有设备来源",
|
||||
"Maintenance_Tool_UnlockFields_noti": "清除所有设备来源",
|
||||
"Maintenance_Tool_UnlockFields_noti_text": "您确定要清除所有设备字段(锁定/用户)的所有源值吗?(请注意:此操作将永久删除这些值,无法恢复)这一行为无法挽回。",
|
||||
"Maintenance_Tool_UnlockFields_text": "此工具将从所有设备的每个跟踪字段中删除所有原始数据,从而为插件和用户完全解锁所有字段。请谨慎使用,因为这将影响您整个设备的库存情况。",
|
||||
"Maintenance_Tool_arpscansw": "切换 arp 扫描(开/关)",
|
||||
"Maintenance_Tool_arpscansw_noti": "打开或关闭 arp 扫描",
|
||||
"Maintenance_Tool_arpscansw_noti_text": "当扫描关闭时,它会保持关闭状态,直到再次激活为止。",
|
||||
@@ -457,7 +457,7 @@
|
||||
"Maintenance_Tool_del_unknowndev_noti": "删除(未知)设备",
|
||||
"Maintenance_Tool_del_unknowndev_noti_text": "您确定要删除所有(未知)和(未找到名称)设备吗?",
|
||||
"Maintenance_Tool_del_unknowndev_text": "使用此功能前,请先备份。删除操作不可撤销。所有名为 (未知) 的设备都将从数据库中删除。",
|
||||
"Maintenance_Tool_del_unlockFields_selecteddev_text": "",
|
||||
"Maintenance_Tool_del_unlockFields_selecteddev_text": "这将解除所选设备的“锁定/用户”字段的锁定状态。这一行为无法挽回。",
|
||||
"Maintenance_Tool_displayed_columns_text": "更改<a href=\"devices.php\"><b><i class=\"fa fa-laptop\"></i>设备</b></a>页面中列的可见性和顺序。",
|
||||
"Maintenance_Tool_drag_me": "拖动我来对列进行重新排序。",
|
||||
"Maintenance_Tool_order_columns_text": "Maintenance_Tool_order_columns_text",
|
||||
@@ -469,8 +469,8 @@
|
||||
"Maintenance_Tool_restore_noti": "数据库恢复",
|
||||
"Maintenance_Tool_restore_noti_text": "您确定要执行数据库恢复吗?请确保当前没有正在运行的扫描。",
|
||||
"Maintenance_Tool_restore_text": "最新备份可通过按钮恢复,但旧备份只能手动恢复。恢复后,请对数据库进行完整性检查以确保安全,以防创建备份时数据库当前处于写访问状态。",
|
||||
"Maintenance_Tool_unlockFields_selecteddev": "",
|
||||
"Maintenance_Tool_unlockFields_selecteddev_noti": "",
|
||||
"Maintenance_Tool_unlockFields_selecteddev": "解锁设备字段",
|
||||
"Maintenance_Tool_unlockFields_selecteddev_noti": "解锁字段",
|
||||
"Maintenance_Tool_upgrade_database_noti": "升级数据库",
|
||||
"Maintenance_Tool_upgrade_database_noti_text": "您确定要升级数据库吗?<br>(也许您更愿意将其存档)",
|
||||
"Maintenance_Tool_upgrade_database_text": "此按钮将升级数据库以启用过去 12 小时的网络活动图表。请备份您的数据库以防出现问题。",
|
||||
@@ -612,7 +612,7 @@
|
||||
"REPORT_MAIL_description": "如果启用,则会发送一封电子邮件,其中包含您已订阅的更改列表。还请填写以下与 SMTP 设置相关的所有剩余设置。如果遇到问题,请将 <code>LOG_LEVEL</code> 设置为 <code>debug</code> 并检查<a href=\"/maintenance.php#tab_Logging\">错误日志</a>。",
|
||||
"REPORT_MAIL_name": "启用email",
|
||||
"REPORT_TITLE": "报告",
|
||||
"RandomMAC_hover": "自动检测 - 表示设备是否随机化其 MAC 地址。您可通过 UI_NOT_RANDOM_MAC 设置排除特定MAC地址。点击了解更多。",
|
||||
"RandomMAC_hover": "该设备具有随机的MAC地址",
|
||||
"Reports_Sent_Log": "已发送报告日志",
|
||||
"SCAN_SUBNETS_description": "大多数网络扫描器(ARP-SCAN、NMAP、NSLOOKUP、DIG)依赖于扫描特定的网络接口和子网。查看<a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">子网文档</a>以获取有关此设置的帮助,尤其是 VLAN、支持哪些 VLAN,或者如何确定网络掩码和接口。<br/> <br/> 网络扫描器的替代方法是启用一些其他不依赖于 NetAlert<sup>X</sup> 访问网络的设备扫描器/导入器(UNIFI、dhcp.leases、PiHole 等)。<br/> <br/> 注意:扫描时间本身取决于要检查的 IP 地址数量,因此请使用适当的网络掩码和接口仔细设置。",
|
||||
"SCAN_SUBNETS_name": "待扫描网络",
|
||||
@@ -620,7 +620,7 @@
|
||||
"Setting_Override": "覆盖值",
|
||||
"Setting_Override_Description": "启用此选项将用上面指定的值覆盖应用程序提供的默认值。",
|
||||
"Settings_Metadata_Toggle": "显示/隐藏给定设置的元数据。",
|
||||
"Settings_Show_Description": "显示设置描述。",
|
||||
"Settings_Show_Description": "显示设置描述",
|
||||
"Settings_device_Scanners_desync": "⚠ 设备扫描计划不同步。",
|
||||
"Settings_device_Scanners_desync_popup": "设备扫描 (<code>*_RUN_SCHD</code>) 的时间表并不相同。这将导致设备在线/离线通知不一致。除非有意为之,否则请对所有启用的 <b>🔍设备扫描</b> 使用相同的时间表。",
|
||||
"Speedtest_Results": "Speedtest 结果",
|
||||
@@ -760,7 +760,7 @@
|
||||
"run_event_tooltip": "在运行之前,请先启用设置并保存更改。",
|
||||
"select_icon_event_tooltip": "选择图标",
|
||||
"settings_core_icon": "fa-solid fa-gem",
|
||||
"settings_core_label": "核",
|
||||
"settings_core_label": "核心",
|
||||
"settings_device_scanners": "设备扫描器用于发现写入当前扫描数据库表的设备。",
|
||||
"settings_device_scanners_icon": "fa-solid fa-magnifying-glass-plus",
|
||||
"settings_device_scanners_info": "使用 <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> 设置加载更多设备扫描仪",
|
||||
@@ -786,4 +786,4 @@
|
||||
"settings_system_label": "系统",
|
||||
"settings_update_item_warning": "更新下面的值。请注意遵循先前的格式。<b>未执行验证。</b>",
|
||||
"test_event_tooltip": "在测试设置之前,请先保存更改。"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import os
|
||||
|
||||
# flake8: noqa: E402
|
||||
|
||||
from flask import Flask, request, jsonify, Response
|
||||
from flask import Flask, redirect, request, jsonify, url_for, Response
|
||||
from models.device_instance import DeviceInstance # noqa: E402
|
||||
from flask_cors import CORS
|
||||
from werkzeug.exceptions import HTTPException
|
||||
@@ -1165,6 +1165,11 @@ def api_docs():
|
||||
return send_from_directory(openapi_dir, 'swagger.html')
|
||||
|
||||
|
||||
@app.route('/')
|
||||
def index_redirect():
|
||||
"""Redirect root to API documentation."""
|
||||
return redirect(url_for('api_docs'))
|
||||
|
||||
# --------------------------
|
||||
# DB query
|
||||
# --------------------------
|
||||
|
||||
23
test/api_endpoints/test_docs.py
Normal file
23
test/api_endpoints/test_docs.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# test/api_endpoints/test_docs.py - Tests for root redirect and API docs endpoints
|
||||
|
||||
|
||||
from api_server import api_server_start
|
||||
|
||||
|
||||
def test_index_redirect_logic():
|
||||
"""Test the redirect function logic directly."""
|
||||
with api_server_start.app.test_client() as client:
|
||||
response = client.get("/", follow_redirects=False)
|
||||
assert response.status_code == 302
|
||||
assert response.location == '/docs'
|
||||
|
||||
|
||||
def test_api_docs_logic():
|
||||
"""Test that api_docs attempts to serve the correct file."""
|
||||
with api_server_start.app.test_client() as client:
|
||||
response = client.get("/docs")
|
||||
assert response.status_code == 200
|
||||
assert response.mimetype == "text/html"
|
||||
response.direct_passthrough = False
|
||||
data = response.get_data()
|
||||
assert b"<!DOCTYPE html>" in data or b"<html>" in data
|
||||
Reference in New Issue
Block a user