Commit Graph
100 Commits
Author SHA1 Message Date
19174616018 8c0403e0ff 安全增强: 增加日志敏感字段脱敏过滤器 2026-02-16 00:36:47 +08:00
19174616018 7d42f96e42 安全修复: 收敛认证与日志风险并补充基础测试 2026-02-16 00:34:52 +08:00
19174616018 7627885b1b fix(passkey): 修复安卓端 Credential Manager 异常并增强兼容
更新说明:\n1. 优化 Passkey 注册参数(residentKey/hints),提升安卓设备兼容性。\n2. 前台与后台统一增强 Passkey 错误提示,针对 NotReadableError/小米浏览器给出明确引导。\n3. 同步更新相关前端页面逻辑与构建产物。
2026-02-16 00:17:11 +08:00
19174616018 cb35df5f01 fix(front): 修复前台退出登录确认弹窗样式丢失
更新说明:\n1. 在用户端 AppLayout 显式引入 Element Plus 的 Message/MessageBox 样式。\n2. 修复退出登录确认弹窗偶发样式异常(看起来像 JS 未加载)的显示问题。\n3. 同步更新前台构建产物与 manifest。
2026-02-15 23:59:08 +08:00
19174616018 7007f5f6f5 feat: 完成 Passkey 能力与前后台加载优化
更新说明:\n1. 新增用户端与管理员端 Passkey 登录/注册/设备管理(最多3台,支持设备备注、删除设备)。\n2. 修复 Passkey 注册与登录流程中的浏览器/证书/CSRF相关问题,增强错误提示。\n3. 前台登录页改为独立入口,首屏仅加载必要资源,其他页面按需加载。\n4. 系统配置页改为静默获取金山文档状态,避免首屏阻塞,并优化状态展示为“检测中/已登录/未登录/异常”。\n5. 补充后端接口与页面渲染适配,修复多入口下样式依赖注入问题。\n6. 同步更新前后台构建产物与相关静态资源。
2026-02-15 23:51:46 +08:00
19174616018 ebfac7266b security: harden proxy IP trust, token flow, health and sessions 2026-02-09 09:14:47 +08:00
19174616018 f645a0f8ea perf(front): reduce login page preload and split frontend vendor chunks 2026-02-07 21:45:26 +08:00
19174616018 08864e51ba security: harden admin password change and production session headers 2026-02-07 21:37:55 +08:00
19174616018 7997a97a9a refactor(admin): remove legacy admin fallback page and routing 2026-02-07 19:50:15 +08:00
19174616018 122e12728c chore(repo): clean template leftovers and refresh README for current deployment 2026-02-07 19:01:10 +08:00
19174616018 225abbe7b6 fix(repo): restore runtime key/state files to avoid deploy breakage 2026-02-07 18:49:18 +08:00
19174616018 855b1e340b chore(repo): remove cleanup report and runtime state files from git 2026-02-07 18:48:20 +08:00
19174616018 ed0b74eae3 perf(report): avoid duplicate initial stats sync in dashboard loop 2026-02-07 18:39:11 +08:00
19174616018 4874aa37f6 perf(frontend): add api cache layer and reduce report polling pressure 2026-02-07 18:36:55 +08:00
19174616018 c285d1e348 fix(frontend): restore stable element-plus bootstrap to resolve admin crash 2026-02-07 18:11:23 +08:00
19174616018 06fe7f6f68 perf(frontend): on-demand element plus imports and dedupe stats requests 2026-02-07 17:43:18 +08:00
19174616018 99ecbcf55e perf(logging): reduce allow-strategy log noise via env switch 2026-02-07 17:35:28 +08:00
19174616018 43f1867033 perf(runtime): switch socketio to eventlet and optimize asset chunk caching 2026-02-07 16:09:21 +08:00
19174616018 9d1d4d701e feat(report): show live slow-sql threshold in header 2026-02-07 14:55:15 +08:00
19174616018 b84a5abb8a feat(config): add live slow-sql threshold setting 2026-02-07 14:31:24 +08:00
19174616018 6a9858cdec feat(report): add 24h slow-sql dashboard and metrics api 2026-02-07 14:07:07 +08:00
19174616018 52dd7ac9e5 fix(db): persist actual schema version after migrations 2026-02-07 13:47:47 +08:00
19174616018 dd7f03ef94 perf(db): add slow-query tracing and composite indexes 2026-02-07 13:44:58 +08:00
19174616018 ff67a9bbab perf(db): tune sqlite pool and add maintenance scheduler 2026-02-07 12:53:43 +08:00
19174616018 d77e439712 fix(build): stabilize vendor chunking to avoid element-plus init error 2026-02-07 12:30:13 +08:00
19174616018 e93db6fbf1 feat(report): add drilldown dialog for slow API details 2026-02-07 12:24:44 +08:00
19174616018 592d48dde0 feat(report): add slow API ranking module for admin 2026-02-07 12:19:53 +08:00
19174616018 a50294933b perf(stability): add request metrics and resilient API retries 2026-02-07 11:58:21 +08:00
19174616018 04b94d7fb2 perf: optimize polling, stats cache, and frontend chunk splitting 2026-02-07 11:41:49 +08:00
19174616018 21c537da10 feat(screenshots): serve thumbnails while keeping original for preview and copy 2026-02-07 11:02:16 +08:00
19174616018 2d5be0feb2 refactor(report): remove duplicated detail section and keep compact cards 2026-02-07 10:16:35 +08:00
19174616018 462e12ca0d feat(admin): align desktop report to compact module layout 2026-02-07 10:06:40 +08:00
19174616018 ce96b17392 fix(admin): include overview metrics in mobile report cards 2026-02-07 09:57:04 +08:00
19174616018 69e3e4c45c feat(admin): compact mobile cards for report center 2026-02-07 09:54:11 +08:00
19174616018 12e07962c7 chore(admin): remove manual refresh buttons across pages 2026-02-07 09:47:17 +08:00
19174616018 dd9cc5a76d fix: open mobile admin drawer from left side 2026-02-07 09:40:53 +08:00
19174616018 f7832c3c15 fix: use process uptime and host-service stats fallback 2026-02-07 09:13:20 +08:00
19174616018 d097571f62 fix: prevent report flicker on auto refresh 2026-02-07 09:06:52 +08:00
19174616018 121251a1f2 feat: smooth report refresh and redesign system settings mobile UI 2026-02-07 08:57:25 +08:00
19174616018 6eb0651e23 feat: redesign admin layout and stats dashboards 2026-02-07 01:59:29 +08:00
19174616018 9991834ccd feat: unify login UI and improve kdocs defaults 2026-02-07 01:27:00 +08:00
19174616018 bf29ac1924 refactor: optimize structure, stability and runtime performance 2026-02-07 00:35:11 +08:00
19174616018andClaude Opus 4.5 fae21329d7 优化 KDocs 上传器
- 删除死代码 (二分搜索相关方法,减少 ~186 行)
- 优化 sleep 等待时间,减少约 30% 的等待
- 添加缓存过期机制 (5分钟 TTL)
- 优化日志级别,减少调试日志噪音

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 20:09:46 +08:00
19174616018 f46f325518 fix(frontend): 修复登录失败时通知弹两次的问题
- 在登录页面不再由 http.js 拦截器弹出 401 通知
- 让 LoginPage.vue 自己处理登录错误的显示
- 避免同一错误消息重复弹出
2026-01-21 19:45:43 +08:00
19174616018andClaude Opus 4.5 156d3a97b2 fix(kdocs): 修复上传线程卡住和超时问题
1. 禁用无效的二分搜索 - _get_cell_value_fast() 使用的 DOM 选择器在金山文档中不存在
2. 移除 _upload_image_to_cell 中重复的导航调用
3. 为 expect_file_chooser 添加 15 秒超时防止无限阻塞
4. 包含看门狗自动恢复机制(之前已实现)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 17:02:08 +08:00
19174616018andClaude Opus 4.5 10be464265 fix: 修复连接池计数和任务调度器默认值问题
1. db_pool.py - 修复连接计数不一致问题
   - 将 _created_connections 递增移到 put() 成功之后
   - 确保 Full 异常和创建异常时正确关闭连接
   - 避免计数器永久偏高

2. services/tasks.py - 统一 _running_by_user 默认值
   - 将减少计数时的默认值从 1 改为 0
   - 与增加计数时的默认值保持一致
   - 添加注释说明

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 22:46:40 +08:00
19174616018andClaude Opus 4.5 e65485cb1e fix: 修复自动重试的竞态条件问题
问题:delayed_retry_submit 闭包捕获的是旧的 account 对象
- 5秒后检查 should_stop 时,可能检查的是旧对象
- 如果账户被删除/重建,会导致状态检查不可靠
- 可能导致重复任务提交

修复:
- 在 delayed_retry_submit 中重新调用 safe_get_account 获取最新账户对象
- 添加账户不存在的检查
- 添加取消时的日志输出,便于调试

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 22:32:37 +08:00
19174616018andClaude Opus 4.5 42609651bd fix: 修复截图登录检查逻辑的条件判断错误
问题:attempt > 0 应该是 attempt > 1
- attempt 从 range(1, max_retries + 1) 开始,值为 1, 2, 3
- 原条件 attempt > 0 在 attempt=1 时就为 True
- 导致 elif 分支(首次尝试逻辑)成为死代码

修复:
- 将 attempt > 0 改为 attempt > 1
- 更新注释使其更清晰准确

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 22:16:01 +08:00
19174616018andClaude Opus 4.5 722dccdc78 fix: 登录路由添加CSRF豁免,解决重启后无法登录的问题
- 添加 /yuyx/api/login, /api/login, /api/auth/login 路由的CSRF豁免
- 登录本身就是建立session的过程,不需要CSRF保护
- 解决服务重启后旧session导致CSRF验证失败的问题

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 13:29:32 +08:00
19174616018andClaude Opus 4.5 606cad43dc fix: 修复无附件文章无法标记已读的问题
- 发现标记已读的正确 API: /tools/submit_ajax.ashx?action=saveread
- 添加 mark_article_read 方法调用 saveread API 标记文章已读
- 修改 get_article_attachments 返回文章的 channel_id 和 article_id
- 对每篇文章都调用 mark_article_read,无论是否有附件
- 解决米米88、黄紫夏99等账号文章无法标记已读的问题

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 13:24:29 +08:00
19174616018andClaude Opus 4.5 6313631b09 fix: 改进分页逻辑,确保遍历所有页面不漏掉内容
- 当前页有新文章时,重新获取第1页(已读文章消失后页面上移)
- 当前页无新文章时,继续检查后续页面
- 遍历完所有页面后才结束循环
- 解决 mark_read 延迟导致后续页面内容被漏掉的问题

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 13:17:52 +08:00
19174616018andClaude Opus 4.5 09188b8765 fix: 防止浏览时无限循环重复处理已处理文章
- 添加 processed_hrefs 集合跟踪已处理的文章 href
- 处理文章前检查是否已处理过,避免重复处理
- 添加 new_articles_in_page 计数器,当前页无新文章时退出循环
- 解决 mark_read 未立即生效导致的无限循环问题

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 13:14:22 +08:00
19174616018andClaude Opus 4.5 b2b0dfd500 fix: 修复分页错位问题,改为循环获取第1页直到清空
问题:标记已读后文章从列表消失,导致后续页面上移,
造成按页码遍历时遗漏部分内容。

解决:每次处理完当前页后重新获取第1页,循环直到没有内容。

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 13:08:34 +08:00
19174616018andClaude Opus 4.5 2ff9e18842 fix: 修复附件解析正则,匹配 download2.ashx
正则从 download\.ashx 改为 download2?\.ashx
以同时支持新旧两种附件下载链接格式

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 12:48:58 +08:00
19174616018andClaude Opus 4.5 1bd49f804c docs: 更新浏览逻辑注释,反映网站参数变更
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 12:45:40 +08:00
19174616018andClaude Opus 4.5 f8bbe3da0d fix: 修复应读参数,bz=2 改为 bz=0(适配网站更新)
网站参数变更:
- bz=0: 应读
- bz=1: 已读
- bz=2: 已读(旧参数,已废弃)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 12:43:25 +08:00
19174616018andClaude Opus 4.5 1b85f34a0f fix: 恢复截图顺序,保持完整框架样式
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 12:38:52 +08:00
19174616018andClaude Opus 4.5 f04c5c1c8f fix: 适配网站结构更新
1. 标记已读改用预览通道 (download2.ashx)
2. 截图优先直接访问目标页面,避免 iframe 加载问题

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 12:31:22 +08:00
19174616018andClaude Opus 4.5 30b6e3144b fix: database.py 添加缺失的 kdocs_row_start/row_end 参数
修复保存金山文档配置时报 500 错误的问题

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 01:03:19 +08:00
19174616018andClaude Opus 4.5 da71b0ac5e docs: 修正 README 中截图引擎描述
- 截图使用 wkhtmltoimage(不是 Playwright)
- Playwright 仅用于金山文档表格操作
- 修正技术栈、项目结构、更新日志相关描述

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 01:00:08 +08:00
19174616018andClaude Opus 4.5 3c6799ce53 docs: 更新 README 文档至 v2.0
- 更新项目简介,添加新功能描述
- 更新技术栈(Vue 3, Playwright, Element Plus)
- 更新项目结构,添加新模块说明
- 添加更新日志章节,记录 v2.0 主要变更:
  - 金山文档集成
  - Vue 3 SPA 前端
  - 用户自定义定时任务
  - 安全防护系统
  - 邮件通知系统
  - 公告/反馈系统
  - 截图引擎升级等

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:58:16 +08:00
19174616018andClaude Opus 4.5 a3060e4cd9 feat: Vue SPA 添加 KDocs 在线状态显示 + 清理废弃模板
功能更新:
- AccountsPage.vue: 工具栏显示 KDocs 在线状态(就绪/离线)
- settings.js: 添加 fetchKdocsStatus API 函数
- 每60秒自动刷新状态

代码清理:
- 删除废弃的 legacy 模板文件(约170KB)
  - templates/index.html
  - templates/login.html
  - templates/register.html
  - templates/reset_password.html

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:31:42 +08:00
19174616018andClaude Opus 4.5 be9ec5e9a2 feat: 用户端显示金山文档在线状态
- 新增 /api/kdocs/status 接口(用户端简化版)
- 工具栏显示"表格上传:  就绪"或"⚠️ 离线"
- 页面加载时获取状态,每60秒自动刷新
- 系统未启用时不显示

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 23:56:16 +08:00
19174616018andClaude Opus 4.5 b0fe325154 feat: KDocs 上传增强 + 离线监控 + Bug修复
KDocs 上传功能增强:
- 搜索优化:只用姓名搜索 + C列验证,避免匹配到错误单元格
- 有效行范围:支持配置起始行/结束行,限制上传区域
- 图片覆盖:支持覆盖单元格已有图片(Escape + Delete)
- 配置持久化:kdocs_row_start/row_end 保存到数据库(v18迁移)

二次登录功能:
- 登录后立即再次登录,让"上次登录时间"显示为刚刚

KDocs 离线监控:
- 每5分钟检测金山文档登录状态
- 离线时发送邮件通知管理员(每次掉线只通知一次)
- 恢复在线后重置通知状态

Bug 修复:
- 任务日志搜索账号关键词报错500:添加异常处理

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 23:40:46 +08:00
19174616018 13544867aa Fix clipboard permissions for KDocs 2026-01-07 17:46:28 +08:00
19174616018 5fd13fa152 Read KDocs cells via clipboard 2026-01-07 17:40:29 +08:00
19174616018 a36fa3370b Show KDocs upload status 2026-01-07 17:31:50 +08:00
19174616018 2ec0c7cb58 Speed up KDocs QR retrieval 2026-01-07 17:15:46 +08:00
19174616018 3841358bc2 Add KDocs action feedback 2026-01-07 17:03:03 +08:00
19174616018 6bd00021b8 Fix KDocs login detection 2026-01-07 16:53:44 +08:00
19174616018 f2652af8fb Fix kdocs upload status restore 2026-01-07 15:16:04 +08:00
19174616018 950af0efda Improve KDocs search matching 2026-01-07 15:03:51 +08:00
19174616018 45cbdc51b4 Show upload status and log KDocs skips 2026-01-07 14:28:58 +08:00
19174616018 703a62b6ad Increase KDocs QR timeout 2026-01-07 14:17:01 +08:00
19174616018 ad847888f8 Avoid live KDocs status on page load 2026-01-07 14:12:54 +08:00
19174616018 8c150dcb7c Auto poll KDocs login status 2026-01-07 14:04:09 +08:00
19174616018 ec90404194 Validate and log QR capture 2026-01-07 13:56:16 +08:00
19174616018 6af8f46129 Log and save KDocs QR screenshot 2026-01-07 13:49:37 +08:00
19174616018 19f083df7b Auto click KDocs login and confirm 2026-01-07 13:44:15 +08:00
19174616018 a04cbfa55f Broaden KDocs login click and modal capture 2026-01-07 13:33:26 +08:00
19174616018 b78bc7935f Trigger KDocs WeChat login flow 2026-01-07 13:26:31 +08:00
19174616018 d8897f893a Expand KDocs QR detection 2026-01-07 13:21:19 +08:00
19174616018 95d7cbc825 Improve KDocs QR capture 2026-01-07 13:14:02 +08:00
19174616018 6b416dc5f1 Force KDocs QR fetch and improve login detection 2026-01-07 13:07:57 +08:00
19174616018 28e86b1147 Fix kdocs login status detection 2026-01-07 12:57:03 +08:00
19174616018 1e216ea356 Fix kdocs runtime logger call 2026-01-07 12:49:54 +08:00
19174616018 3bae759afc Integrate KDocs auto-upload 2026-01-07 12:32:41 +08:00
19174616018 5137addacc Optimize scheduler status lookups 2026-01-06 15:58:23 +08:00
19174616018 4c492122dd feat: support announcement image upload
# Conflicts:
#	database.py
#	db/migrations.py
#	routes/admin_api/core.py
#	static/admin/.vite/manifest.json
#	static/admin/assets/AnnouncementsPage-Btl9JP7M.js
#	static/admin/assets/EmailPage-CwqlBGU2.js
#	static/admin/assets/FeedbacksPage-B_qDNL3q.js
#	static/admin/assets/LogsPage-DzdymdrQ.js
#	static/admin/assets/ReportPage-Bp26gOA-.js
#	static/admin/assets/SettingsPage-__r25pN8.js
#	static/admin/assets/SystemPage-C1OfxrU-.js
#	static/admin/assets/UsersPage-DhnABKcY.js
#	static/admin/assets/email-By53DCWv.js
#	static/admin/assets/email-ByiJ74rd.js
#	static/admin/assets/email-DkWacopQ.js
#	static/admin/assets/index-D5wU2pVd.js
#	static/admin/assets/tasks-1acmkoIX.js
#	static/admin/assets/update-DdQLVpC3.js
#	static/admin/assets/users-B1w166uc.js
#	static/admin/assets/users-CPJP5r-B.js
#	static/admin/assets/users-CnIyvFWm.js
#	static/admin/index.html
#	static/app/.vite/manifest.json
#	static/app/assets/AccountsPage-C48gJL8c.js
#	static/app/assets/AccountsPage-D387XNsv.js
#	static/app/assets/AccountsPage-DBJCAsJz.js
#	static/app/assets/LoginPage-BgK_Vl6X.js
#	static/app/assets/RegisterPage-CwADxWfe.js
#	static/app/assets/ResetPasswordPage-CVfZX_5z.js
#	static/app/assets/SchedulesPage-CWuZpJ5h.js
#	static/app/assets/SchedulesPage-Dw-mXbG5.js
#	static/app/assets/SchedulesPage-DwzGOBuc.js
#	static/app/assets/ScreenshotsPage-C6vX2U3V.js
#	static/app/assets/ScreenshotsPage-CreOSjVc.js
#	static/app/assets/ScreenshotsPage-DuTeRzLR.js
#	static/app/assets/VerifyResultPage-BzGlCgtE.js
#	static/app/assets/VerifyResultPage-CN_nr4V6.js
#	static/app/assets/VerifyResultPage-CNbQc83z.js
#	static/app/assets/accounts-BFaVMUve.js
#	static/app/assets/accounts-BYq3lLev.js
#	static/app/assets/accounts-Bc9j2moH.js
#	static/app/assets/auth-Dk_ApO4B.js
#	static/app/assets/index-BIng7uZJ.css
#	static/app/assets/index-CDxVo_1Z.js
#	static/app/index.html
2026-01-06 12:15:16 +08:00
19174616018 82acc3470f Ensure menu expanded in screenshots 2025-12-31 21:28:28 +08:00
19174616018 2e44afde30 Capture full-page wkhtmltoimage shots 2025-12-31 20:50:02 +08:00
19174616018 28f4e807a9 Fix wkhtmltoimage viewport crop 2025-12-31 20:23:31 +08:00
19174616018 3b04f04a31 feat: 全屏截图改用管理后台框架 2025-12-31 20:12:39 +08:00
19174616018 ea1c7e8a00 feat: wkhtmltoimage支持自定义高度 2025-12-31 20:05:39 +08:00
19174616018 d269a99d3c fix: wkhtmltoimage使用安全cookie 2025-12-31 19:41:34 +08:00
19174616018 7c3d0a0947 fix: wkhtmltoimage兼容UA参数 2025-12-31 19:13:20 +08:00
19174616018 7cf39f80bc fix: 兼容旧浏览器后台与截图开关 2025-12-31 19:04:42 +08:00
19174616018 d108f3b51d bust spa asset cache by build id 2025-12-31 18:22:03 +08:00
19174616018 41ead4bead replace screenshot pipeline and update admin 2025-12-31 16:50:35 +08:00
19174616018andClaude Opus 4.5 2d98ab66a3 fix: 修复公告关闭功能 - 当次关闭与永久关闭区分
问题:不管选择"当次关闭"还是"永久关闭",都会永久关闭公告

修复:
- 当次关闭:使用 sessionStorage + pageToken
  - pageToken 基于 performance.timeOrigin 生成
  - 刷新页面后 token 变化,公告重新显示
- 永久关闭:使用 localStorage
  - 持久化存储,刷新/重开后不再显示

修改文件:
- app-frontend/src/layouts/AppLayout.vue
- templates/index.html

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 21:51:28 +08:00