Skip to content
xywhsoftPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

xAdmin · 新版 xs 迁移开发线

在新版 xs/xrt 上平移 v1 的后台应用。当前是第一批可运行迁移,不是完整替代版本,暂不用于替换线上 v1。

迁移原则:复用业务、数据库和界面;只适配底层接口与应用基础设施。dev/v1 保留旧版基线;根目录是新版开发线。

启动

在本目录运行:

.\xs.exe .\xs.json

默认仅监听 127.0.0.1:9081。xs.exe 来自同级 xserver/release,使用其内置 C SDK/TCC 环境,不加载 v1 的 tcc 或旧版 xs。

主库是 db/main.db,后台管理员协议保持原样;会员身份服务使用新的原始密码协议,详见下文。若原来的 options/global.json 中配置了 cp_url,登录仍走该受保护入口,直接访问 /admin/login 返回 404 是原有行为;未设置时才使用 /admin/login。本次没有重置真实账号、密码或入口配置。

首次从已归档的 v1 导入资产可运行 python tools/migrate_v1.py。它使用 SQLite 备份接口,跳过根目录已有文件,不覆盖后续开发成果;不是双向同步工具,也不是线上切换工具。

开发结构

位置 职责
main.c 服务初始化、模块依赖顺序和卸载
route.h 现有 URI 注册清单
route_http/ 迁自 v1 的业务处理函数
modules/ 值/HTTP 适配、路由、会话、权限、数据库和资源加载
db/ 主库、插件库、插件历史日志库和安装种子库
options/ 原有 JSON 配置;插件私有配置在 options/plugin/
page/、template/ 受控页面、服务端模板,不对外直接开放
wwwroot/ 网站公开资源:图片、前端 JS/CSS 等
includes/、librarys/ 额外的第三方 C 头文件、链接库
forms/、uploads/、install/ 已导入的表单、受控附件和安装资产,处理模块待接入
plugin/、plugin_data/ 原插件包与其他私有数据,插件运行时待适配

已跑通的第一条链路

HTTP 请求 → 静态/动态路由 → 方法槽 → 会话与权限 → 原业务 SQL → 原页面/模板或 JSON 响应。

已接入 61 个旧 URI,涉及登录、后台权限、会员及会员权限、菜单、日志、品牌信息和会员基础 API。管理员增删改查、会员注册/登录/资料/余额查询/注销已有隔离回归;其他已接入功能的测试覆盖见迁移记录。

旧路由使用 XHTTP_METHOD_ANY,保留回调内原来的方法分支和响应契约。新路由可单独注册 GET、POST 或 CRUD;同一 URI/方法重复注册会警告并覆盖该槽,空槽返回 405 和 Allow。动态参数由 xsReqRouteValue() 返回借用视图。

后台登录期限

在「设置 → 全局配置 → 后台登录」调整登录期限,普通登录和两步验证登录共用这些设置:

配置 默认值 范围 生效方式
后台登录保持时间 admin_session_timeout_minutes 120 分钟 1–43200 分钟 未勾选记住登录时的空闲期限,有效操作续期;保存后按现有普通会话最后活跃时间立即调整
记住登录保留时间 admin_remember_days 7 天 1–30 天 勾选后 Cookie 与服务端会话均从登录时起保留指定天数,操作不延长到期日,应用于后续登录;两步验证完成和凭据轮换保留该模式
同账号最多登录数量 admin_session_limit 5 1–100 后台会话超限时退出最久未活跃的会话,降低上限立即执行

旧版 global.json 会在读取时自动补齐字段,保存时再写回;缺失或无效的配置值使用默认期限。后台会话仍保存在内存中,重启或重载服务后需重新登录。

「后台登录保护」提供失败锁定次数(默认 5 次,范围 1–100)和初始冷却时间(默认 300 秒,范围 1–86400)。按后台来源 IP 独立计数,登录成功清零;连续触发时冷却时间按触发次数递增,新锁定使用当前配置。

「短信与邮箱验证码」提供有效期(默认 300 秒,范围 30–3600)、同一目标发送间隔(默认 60 秒,范围 1–3600)和每 IP 每小时申请次数(默认 20,范围 1–10000)。验证码创建时间、接口返回和送达内容使用同一期限;已有验证码和目标频率窗口保留原到期时间。验证器 MFA、敏感操作二次确认的期限独立于这组送达配置。

后台日志自动清理

「设置 → 全局配置 → 后台日志」配置保留天数(默认 7 天,范围 1–3650)、自动清理开关(默认关闭)和每日清理小时(默认 3,范围 0–23,服务器本地时区)。手动「清理过期日志」和自动任务使用相同保留天数,删除 createTime 早于当前时间减去保留天数的后台操作日志。

配置加载或保存后按固定标识 xadmin.admin.logs.cleanup 同步唯一的内建计划任务,无需手动创建;重复保存、重载不会重复建任务,也不按名称覆盖用户任务。启停和时间设置由全局配置管理,任务列表提供配置入口、立即执行和运行日志;禁止直接编辑、复制、删除或单独启停系统任务,任务导出不包含它。

执行器直接使用独立 SQLite 连接清理,复用计划任务的运行日志、禁止重叠执行和失败重试(最多 2 次,间隔 60 秒)。停机错过执行后补跑一次,并恢复意外中断留下的运行标记;关闭自动清理后暂停任务,手动清理仍可使用。启动顺序为计划任务结构初始化 → 日志与全局配置初始化并同步任务 → 启动调度线程,卸载时先等任务结束再释放日志模块。同步失败会报告配置已保存但任务未同步,修复数据库后重新保存可恢复。

会员身份服务

账号、已验证手机、已验证邮箱均可登录,支持 GitHub / 微信授权、JWT、持久会话、验证码换绑和找回、验证状态展示及安全问题辅助恢复。用户页面 /account/index.html;后台前台用户工具栏提供账户与登录设置。配置私有保存于 db/identity.json,第三方与送达服务默认未启用。

部署、API、客户端更新、迁移和功能验证见 身份服务文档,实施记录见 实施方案。尚未验证真实第三方应用及短信/邮件,需网站配置自己的凭据。

短信支持注册式平台适配,内置阿里云、腾讯云、华为云、百度、云片、创蓝、容联、SUBMAIL 与通用 Webhook;验证码校验复用身份服务,通知使用后台模板。扩展和接入见 短信服务接口,真实运营商送达仍需配置凭据后验证。

联网搜索插件

plugin/web-search 提供博查和 z.ai 的统一会员搜索 API /api/v1/search,复用 JWT/Cookie、已验证联系方式和 CSRF;密钥仅存服务端,额度持久化,慢请求使用异步路由。后台插件管理启用后,菜单「联网搜索」管理密钥,插件配置管理平台和额度。部署、接口、平台差异与验证边界见 联网搜索服务文档。真实平台在线检索仍需配置自己的密钥验证。

验证

需要 Python 3,只有标准库依赖:

python tests/smoke.py --functional-only
python tests/smoke.py --functional-only --protected-entry
python tests/admin_session_settings.py
python tests/admin_session_settings.py --protected-entry
python tests/global_config_e2e.py
python tests/global_config_e2e.py --protected-entry

测试默认监听 127.0.0.1:19081,使用 tests/.runtime/ 下的独立数据库副本和临时账号,不写入根目录主库。也会校验 757 项 v1 页面、模板、静态资源及插件资产的 SHA-256。测试专用 URI 只存在于 tests/host.c,正式入口不包含它们。

tests/write_regression.py 随 smoke 测试自动执行,覆盖管理端写入失败、零影响行、失败后重试、删除账号撤销所有会话,以及权限关联迁移和余额流水的事务回滚;故障注入仅作用于测试库。

tests/admin_session_settings.py 默认使用端口 19181,覆盖旧配置兼容、两个保存入口的类型与范围校验、期限立即生效、续期、过期及撤销后不复活、启动恢复和无效配置回退;tests/mfa_e2e.py 同时验证两步验证登录使用当前 Cookie 保留期限。

tests/global_config_e2e.py 默认使用端口 19189,覆盖登录数量与锁定、验证码的存储/送达/接口期限和限流,以及系统任务唯一性、自动执行、故障重试、重启补跑、禁用、手动清理联动和同步失败报告;全部使用隔离数据库和测试送达适配器。

--port 可换端口;--keep-running 可保留隔离预览实例,并输出 PID 和路径。预览账号仅属于测试库:migration_smoke / Temporary-test-only-9081;不要把测试入口或测试目录用于部署。默认测试结束会停止自己启动的 xs,保留日志便于排错。

详细的范围、兼容约定和后续接入顺序见 迁移记录。

账号与身份服务开发

本批范围和实施顺序见 账号与身份服务实施方案。统一账号、已验证手机、已验证邮箱的登录,补充 JWT、持久会话及 GitHub、微信登录;全部会员接口使用 /api/v1,不加入搜索或模型业务。当前先完成 xs 依赖升级,应用身份流程按文档分批实施。

升级 xs 前可用候选产物运行隔离回归:python tests/smoke.py --functional-only --exe ../xserver/release/xs.exe;受保护后台入口另加 --protected-entry。--functional-only 跳过并行请求与大数据计时检查,保留功能、写入失败和生命周期回归。夹具关闭继承的邮件发送、计划任务和插件自动运行,避免执行用户数据库里的外部任务。

前后台已支持验证器两步验证、一次性恢复码和本地应急恢复。绑定后所有登录入口执行 2FA,使用方法、客户端接入和密钥备份要求见 两步验证说明。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages