qing
ec1eb1e805
docs(gateway): 补充前端接入图形验证码说明
...
- README.md v0.5.4 变更记录补充前端改动(register.html/register.js 接入图形验证码)
- SECURITY_AUDIT_20260801.md P0-1 修复说明补充第 5 项前端同步,改动文件清单补全
2026-08-01 02:43:06 +08:00
qing
6ee1eca789
feat(static): 注册页获取验证码接入图形验证码
...
配合 gateway v0.5.4 邮件轰炸防护(/register/send_code 强制 CAPTCHA):
- register.html: 邮箱与邮箱验证码之间新增图形验证码区块(图片+输入框,复用 login 页结构)
- register.js:
- 新增 refreshCaptcha() 复用 /captcha/image 代理路由(与 login.js 一致)
- 新增 checkCaptcha() 校验图形验证码非空且 Token 已加载
- 获取验证码按钮点击时先校验图形验证码,再携带 captcha_token + captcha_answer 发送
- 无论发送成败都刷新图形验证码(Token 一次性消费)
- 重置表单时清空图形验证码并刷新
方案 A:仅在「获取验证码」时要求 CAPTCHA,注册提交不加(邮箱验证码已是二次验证)
2026-08-01 02:42:15 +08:00
qing
0ef96c28f6
docs(confs): 新增服务 README
...
含功能特性、协议路由、缓存/安全机制、集成关系与项目结构
2026-08-01 02:38:20 +08:00
qing
49f0698b9d
fix(gateway,smtp): 修复邮件轰炸漏洞(审计 P0-1)
...
gateway v0.5.3 → v0.5.4:
1. gateway/src/main.cpp
- /register/send_code 强制 CAPTCHA 校验(经 captcha:8009,Token 一次性消费,fail-closed)
- 新增邮箱级双窗口限流(3 次/小时 + 10 次/天,CAPTCHA 通过后才计入配额)
- 新增 _EMAIL_ADDR_RATE_HOUR / _EMAIL_ADDR_RATE_DAY 限流器实例
2. smtp/smtp_v2.py
- 新增邮箱级长期限流兜底(EMAIL_HOURLY_LIMIT / EMAIL_DAILY_LIMIT,默认 3/10)
- 新增全局熔断(SMTP_HOURLY_LIMIT,默认 100 封/小时,防 smtp 账号被封)
- 预占/回滚与 60s 冷却同模式,发送失败不计入配额
3. gateway/docs/SECURITY_AUDIT_20260801.md
- 新增带日期的安全审计报告
- P0-1 标记为已修复 v0.5.4
4. gateway/README.md
- 更新 /register/send_code 接口文档(CAPTCHA 必填 + 5 层防护)
- 更新版本变更日志
防护层次:IP 限流 → CAPTCHA → 邮箱级限流(gateway)→ 60s 冷却 → 邮箱级限流(smtp)→ 全局熔断
2026-08-01 02:37:15 +08:00
qing
2774c3471f
docs(readme): 补充 confs 统一配置服务说明
...
- 架构总览/服务表格/端口表新增 confs(8010),日志链路加入 confs,新增配置链路
- 新增 confs 小节:路由说明、mtime 自动重载、消费方接入约定
- static 配置说明更新为 confs 分发 + 本地回退
- 修正安装序列(补 captcha/confs)、init.txt 启动顺序与实际一致
2026-08-01 02:34:51 +08:00
qing
287cab189d
feat(static): 配置接入 confs 统一配置服务
...
- fsys.py 启动时优先从 confs(127.0.0.1:8010)拉取 static.ini,
支持 CONFS_HOST/CONFS_PORT 环境变量覆盖
- confs 不可用时 fail-safe 回退本地 config.ini
- static.ini 纳入 confs/configs/ 统一分发
2026-08-01 02:30:14 +08:00
qing
7d7e3dc10a
fix(confs): 删除错放的 .env 文件
...
confs.py 不读取 .env(无 dotenv 依赖),该文件实为 SMTP 凭据,
被误放入 confs 目录且会导致 python-dotenv 解析报错。
2026-08-01 02:20:46 +08:00
qing
55fbe2f1f1
feat(confs): 统一配置服务(pymsg/TCP :8010)
...
- confs.py 重写为统一配置服务:get/list/reload/health 路由,
内存缓存 + mtime 自动重载,路径遍历防护,ini/json 按键提取
- 复制 log_client.py,新增 configs/example.ini 示例配置
- 注册到 core/init.txt(db 之后启动)与 _inst.sh 安装序列
2026-08-01 02:15:04 +08:00
qing
ae92a6edde
perf(pymsg): send/recv 零拷贝优化
...
send: sendmsg 散射-聚集 I/O 替代 header+payload 拼接,内核直接
从两块内存读取,省掉大消息的用户态拷贝。
recv: recv_into 写入预分配 bytearray 替代 bytearray 逐步 extend,
省掉 realloc 和 bytes() 转换。
2026-08-01 02:08:03 +08:00
qing
267d572906
fix(pymsg): 修复消息长度无上限导致 OOM DoS 漏洞
...
Python/Go 端 recv 缺失消息大小上限检查,恶意客户端发送 4 字节
超大长度头即可触发 OOM。新增 64 MiB 上限(与 C++ 端 Msg.hpp
对齐),在分配内存前拒绝并断开连接。新增 5 个单元测试覆盖。
2026-08-01 01:55:44 +08:00
qing
e248290860
统一配置模块
2026-08-01 01:54:25 +08:00
qing
48b45cb44a
修复网关bug
2026-07-31 22:19:56 +08:00
qing
e7f435dc4e
refix
2026-07-31 21:07:41 +08:00
qing
ada2af47af
增加handle_exp包装器
2026-07-31 19:47:27 +08:00
qing
ea670adde2
feat(static): dnfs 内容输入框随内容自动调整高度
...
- textarea 输入时自动增长,最小 120px,最大 400px
- 超过最大高度后出现滚动条,避免页面无限撑开
- 编辑已有节点时自动适配内容高度
- 提交/重置/退出编辑后恢复初始高度
- 禁用手动拖拽 resize,由自动增长统一控制
2026-07-30 22:21:24 +08:00
qing
5839172dae
迁移/whoami视图
2026-07-30 22:05:12 +08:00
qing
3f97dd92ef
update
2026-07-30 21:57:04 +08:00
qing
f935448389
refix
2026-07-30 21:33:03 +08:00
qing
32d3a5a19f
重构db
2026-07-30 20:15:02 +08:00
qing
74610c32c8
微调
2026-07-30 19:03:34 +08:00
qing
eec869a28d
style(dnfs): 增大节点表单输入框尺寸
2026-07-30 15:56:06 +08:00
qing
d309f41e47
refix
2026-07-30 15:52:18 +08:00
qing
7589b77916
docs: 更新 README.md - 补充 bot4cj、libtry、tests 等缺失模块说明
2026-07-30 12:44:29 +08:00
qing
e4831522a4
docs: 新增 libhttp/libtry/pymsg/README.robot.md 技术手册,更新 BotOps/README.md
2026-07-30 12:38:31 +08:00
qing
8a14247aed
docs(BotOps): 安装指引改用脚本 + 补全项目结构树 + 新增 Nuitka 编译说明
...
- 安装章节改用 bash _set.sh / _run.sh 一键脚本
- 新增 _inst.sh Nuitka 编译为 botops.bin 单文件的说明
- 项目结构树补全 _set.sh / _run.sh / _inst.sh / requirements.txt / __init__.py
2026-07-30 12:38:14 +08:00
qing
803d176066
docs(db): 修正 log_client 描述并补充 message/extra 截断说明
...
- "纯标准库实现" → "无第三方依赖(仅依赖 pymsg 项目内置库)",更准确
- 新增长度保护说明:message 上限 8KB、extra 上限 4KB,超长自动截断
fix(db): _set.sh Nuitka 注释 main.py → dbv2.py
2026-07-30 12:34:37 +08:00
qing
ac8f3da9df
docs(libcrypt): 完整 README,覆盖 5 个类 API、构建、示例与注意事项
...
- 5 个类的完整 API 文档(Crypto_Basic/AES_CBC/Base64/SHA256/MyRSA)
- 架构层级图与 header-only 设计说明
- 构建/安装/链接指引(含 OpenSSL 3.x 依赖说明)
- 可运行的使用示例
- Private_Key 私有继承、链接 -lssl -lcrypto 等注意事项
fix(libcrypt): SHA256.hpp 删除重复 bytes_to_hex,改用基类版本
- 私有 static bytes_to_hex 与 Crypto_Basic::bytes_to_hex 重复,已删除
- include 路径统一为 "Crypto_Basic.hpp"(与其他三文件一致)
- 移除随之无用的 <iomanip> <sstream> 头文件
fix(libcrypt): AES_CBC.hpp 补充缺失的 #include <iomanip>
2026-07-30 12:26:15 +08:00
qing
6649b31e17
feat(static): add frontend token auto-refresh for dnfs page
...
- New token_manager.js: silent refresh timer (80% lifetime) + global
fetch 401 interceptor with one-shot retry.
- dnfs.py /whoami now returns iat, created_at, keep_time for expiry
estimation.
- Dnfs.html loads token_manager.js before dnfs.js (zero change to dnfs.js).
- Graceful fallback: stale tokens without new fields, refresh failures,
and /refresh_token 401 itself all degrade to the existing 401→login flow.
2026-07-30 12:25:11 +08:00
qing
254fbf4628
docs(aibox): 更新 README.md 并新增 README.robot.md 技术手册
...
README.md 修复:
- 新增 ask_user 工具到工具列表
- 补充配置表中缺失的 17 个字段(system/scheduler/api/context/memo/files/commands/web/memory/conversation/tools/compressor/proxy)
- 补充对话压缩完整配置项
README.robot.md 新增:
- 17 章节完整技术手册(~500 行)
- 架构图、数据流、协议详情
- 19 个工具的完整实现信息
- 配置参考(含所有字段说明)
- 已知限制与安全建议
- 部署与故障排查指南
2026-07-30 12:08:17 +08:00
qing
931e134796
docs(smtp): 新建完整 README,覆盖协议、路由、配置与安全机制
...
- 3 个路由的完整请求/响应文档(send_email / verify_email / health)
- .env 配置项说明(4 种格式支持、必填/可选字段)
- 验证码生命周期:生成→冷却→消费→过期→作废→失败回滚
- 安全机制:发送冷却、失败次数上限防枚举、SMTP 失败回滚
- 集成关系:gateway 调用流程、core 守护、log_client 日志推送
- 旧版 smtp.py 的安全风险标注
fix(smtp): _set.sh 中 nuitka 编译目标 smtp.py → smtp_v2.py
2026-07-30 12:02:25 +08:00
qing
63a80694ae
docs(core): 新增代码审查日志 CODE_REVIEW_LOG_20260730.md
...
- 审查日期:2026-07-30 14:30:00 (Asia/Shanghai)
- 发现 16 个问题(4 Critical / 6 Medium / 6 Low)
- 核心风险:命令注入、无鉴权、空指针解引用
- 包含分阶段修复计划与优先级建议
2026-07-30 12:01:04 +08:00
qing
4506601773
docs(libth): 完整的 README 文档,覆盖 API、架构、构建与使用示例
...
- 新增 4 个类的完整 API 说明(Thread/Fsm/ITask/Cv_wait)
- "回字形"执行循环和两阶段构造的设计说明
- 构建、安装、链接、卸载的完整指引
- 可运行的使用示例代码
- 设计要点与注意事项(死锁风险、单次使用限制等)
- 修正 C++ 标准版本为 C++20(与 Makefile 一致)
fix(libth): Cv_wait.hpp 中 lcok 拼写错误修正为 lock
2026-07-30 11:58:26 +08:00
qing
f214c862d3
docs(bot4cj): 新增 README.robot.md 完整技术手册
...
- 补充 5 层架构分层图(脚本→解析器→结构构建→硬件实现→系统库)
- 详解 .mt 脚本语法、块类型、占位符规则
- 补充 PCA9685/Servo/MPU6050/Speaker 各硬件寄存器与校准参数
- 说明执行流程:stdin→FSM 解析→链表→build/play/free
- 列出 I2C 总线保护、GC 析构、pthread_cancel 等安全限制
- 补充 11 条已知缺陷清单(D1-D11)
- 新增 NN/CNN 测试命令与 DRL 预留接口说明
2026-07-30 11:54:51 +08:00
qing
a8a190571c
feat(gateway): add /refresh_token API with grace window + refresh limit
...
- POST /refresh_token: accept current Bearer token (or Cookie fallback),
verify RSA signature, check grace window (iat + keep_time * multiplier)
and refresh count limit, then issue a new token.
- Token payload extended with iat, refresh_count, max_refresh fields.
- iat preserves original issue time; created_at updates on each refresh.
- Rate limited: 5 req / 5 min / IP via RateLimiter.
- Config: Token.refresh_grace_multiplier (default 2), Token.max_refresh (default 10).
- Backward compatible: old tokens without new fields still pass proxy checks.
2026-07-30 11:54:31 +08:00
qing
aa3a99825c
docs(captcha): 项目结构树和安装指引补全遗漏项
...
- 安装章节新增 bash _set.sh 初始化步骤
- 项目结构树补全 _set.sh 和 requirements.txt
2026-07-30 11:53:30 +08:00
qing
dcfdbcb9f2
docs(waf): 更新 README 文档与代码实现对齐
...
- 新增「安全响应头」章节,列出 7 个 WAF 注入的响应头及说明
- 修正「已知限制」中响应体检测描述,明确响应头检测已启用
- 澄清拦截日志等级区分(WARNING 命中拦截 / ERROR 加载错误)及 extra 字段类型
- 补充规则 ID 分段表的 CRS 可选说明
- 更新目录结构列表补充 logclient 子包
- 请求处理流程新增 ModifyResponse 步骤
2026-07-30 11:49:10 +08:00
qing
62007e7848
docs(static): README 路由表、架构图、配置、依赖与实际代码同步
...
- 修正根路径 / 描述:index.html → login.html
- 补全全部 19 个路由(原仅 6 个),分组为核心/内部工具/OAuth/代理
- 架构图补全 waf:443 → gateway:8443 → static:9200 完整链路
- 配置示例新增 [cors] 段
- 依赖列表补全 waitress 和 pymsg
- 页面和功能列表补全遗漏项
2026-07-30 11:48:54 +08:00
qing
91e6659dac
docs(waf): 拦截日志章节更新为 logclient 推送 db Logs 表的说明
2026-07-30 11:01:34 +08:00
qing
9765edac9b
fix(static): 前端脚本识别 WAF 拦截响应并正确提示
...
- validation.js 新增 WafTip 公共检测:403 + 响应体含 blocked by WAF 双重特征,
与 gateway 白名单拒绝的 403(JSON 错误消息)精确区分
- login/register/dnfs/view 各请求点在 JSON 解析前识别拦截,统一提示
「请求被 WAF 安全规则拦截,请检查输入内容」
- 修复 dnfs getNode 被 WAF 拦截时落入 catch 误跳登录页的问题
- 验证码图片加载识别 403 拦截,alt 提示点击重试
- __view.html 补充引入 validation.js
2026-07-30 11:01:34 +08:00
qing
40175eddb5
Revert "style(dnfs): 用户信息面板移到左边中间,与右侧 minimap 镜像对称"
...
This reverts commit 5c33dbe027 .
2026-07-30 09:52:08 +08:00
qing
5c33dbe027
style(dnfs): 用户信息面板移到左边中间,与右侧 minimap 镜像对称
2026-07-30 09:44:15 +08:00
qing
a58a0f97e3
feat(dnfs): minimap 与用户面板按视口宽度决定初始折叠态
...
新增 PANEL_EXPAND_MIN_WIDTH=768 断点:宽屏默认展开、窄屏默认折叠避免
遮挡内容;仅决定初始状态,用户手动折叠/展开不被 resize 覆盖。
2026-07-30 09:40:58 +08:00
qing
55b127747a
fix(dnfs): 用户面板用户名/角色改为纯展示,去除手型光标与 hover 变色
...
新增 .tag.no-hover 修饰类还原交互态;折叠按钮与退出登录保持可点样式。
2026-07-30 09:34:53 +08:00
qing
8c1956cdeb
feat(dnfs): 左上角用户信息面板(默认折叠),新增 /whoami 身份接口
...
dnfs 新增 POST /whoami:解 Token payload 返回 user/is_admin,无或畸形
Token 返回 login=false(HttpOnly Cookie 模式下 JS 无法读 Token,身份
必须由后端下发);static 加 /whoami 代理(Cookie 转 Bearer);前端
dnfs.html 左上新增 userpanel,镜像 minimap 样式默认折叠,展开显示
用户名/角色/退出登录(POST /logout 清 Cookie 后跳登录页)。
2026-07-30 09:31:28 +08:00
qing
1388fcb72b
feat(dnfs): 卡片移动按钮一并纳入 can_operate 权限显隐
...
编辑/移动/删除三个按钮合并为单次权限判断(移动本质也是 update_note),
未登录或无权时不渲染整个按钮组。
2026-07-30 09:21:15 +08:00
qing
b4e1cf462a
feat(dnfs): get_notes 按当前用户注入 can_operate,前端按权显隐编辑/删除按钮
...
dnfs get_notes 可选解析 Authorization(畸形 Token try 兜底),为每个节点
附带 can_operate 标记(is_admin 或 owner,口径与 delete/update 一致);
dnfs.js 卡片编辑/删除按钮仅 can_operate === true 时渲染,未登录或无权隐藏。
2026-07-30 09:17:28 +08:00
qing
46c3a197be
refactor(auth): 管理员判定上移至 gateway,经 Token payload 下发 is_admin
...
gateway 登录签发 Token 时,账号命中 [Admin] users 白名单即在 payload
写入 is_admin=true(随 RSA 签名保护);dnfs 移除本地 ADMIN_USERS 硬编码,
delete_note/update_note 豁免判断改读 payload 的 is_admin 字段。
旧 Token 无此字段按非管理员处理(安全方向)。
2026-07-30 09:08:33 +08:00
qing
e9f9860fe1
fix(dnfs): review_content 兼容布尔/字符串审核结果,修复安全内容误拦
...
仅明确判定安全(布尔 false 或字符串 "false")才放行,其余一律拦截,
保持 fail-closed;同时消除 invalid 字段缺失时的 KeyError。
2026-07-30 08:38:14 +08:00
qing
949d274c22
获取节点失败后跳转
2026-07-30 08:22:53 +08:00
qing
bcd6c84e3b
Merge branch 'dev_qing' of https://git.cancerai.top/qing/micro_servers into dev_qing
2026-07-29 21:57:47 +08:00