yml2213
|
0b4fe1daa2
|
继续优化登录逻辑
|
2026-06-25 08:40:00 +08:00 |
|
yml2213
|
a62e7c192f
|
优化白名单逻辑
|
2026-06-25 08:19:18 +08:00 |
|
yml2213
|
ef12dcf4a3
|
优化代理相关, 移除旧的死代码
|
2026-06-25 08:04:56 +08:00 |
|
yml2213
|
9b66a4fcd9
|
登录任务最大重试次数改为 20 次
|
2026-06-25 07:18:10 +08:00 |
|
yml2213
|
b9481d49ee
|
修复登录任务无限重试导致文件描述符耗尽问题
1. docker-compose.yml:增加文件描述符限制 ulimits (65536)
2. login_service.py:限制最大重试次数为 10 次,避免无限重试
3. 解决 [Errno 24] Too many open files 错误
|
2026-06-25 06:58:18 +08:00 |
|
yml2213
|
a4b04e7733
|
修复 TypeScript 编译错误:删除未使用的 canViewAll 变量
|
2026-06-24 22:17:53 +08:00 |
|
yml2213
|
50f90eeeb8
|
实现账号信息隐藏权限系统
1. 拆分 account:view_all 和 account:view_full 权限
2. 运营只能看用户名、标签、分配,隐藏密码/邮箱等敏感信息
3. 管理员可看完整字段(需 account:view_full 权限)
4. 所有人都可分配账号给客服
5. 前端添加上传时间列
|
2026-06-24 22:15:46 +08:00 |
|
yml2213
|
09f9ab7165
|
用户管理和分配管理:分页按钮优化,支持切换每页条数并持久化
|
2026-06-24 20:24:04 +08:00 |
|
yml2213
|
4a38b06192
|
账号管理:分页按钮优化,支持切换每页条数并持久化
|
2026-06-24 20:21:30 +08:00 |
|
yml2213
|
492360b097
|
Cookie 导出自定义格式:换行符改为 Windows 格式(CRLF)
|
2026-06-24 18:46:58 +08:00 |
|
yml2213
|
c0d4dceb17
|
登录按钮防重复点击:添加 WebSocket 错误回调重置 starting 状态
|
2026-06-24 16:58:30 +08:00 |
|
yml2213
|
f61794592f
|
登录按钮防重复点击:任务运行期间禁用开始登录和重试按钮
|
2026-06-24 16:38:28 +08:00 |
|
yml2213
|
a7ebfc9678
|
登录任务:开始登录按钮在任务运行中禁用,防止重复点击
|
2026-06-24 16:33:02 +08:00 |
|
yml2213
|
77914eb182
|
deploy.sh: 启动前先down旧容器避免名称冲突
|
2026-06-24 16:14:50 +08:00 |
|
yml2213
|
2966d0d577
|
Dockerfile: uv改用pip安装,避免ghcr.io网络不通
|
2026-06-24 16:12:27 +08:00 |
|
yml2213
|
ab84355cdc
|
合并启动脚本到deploy.sh,支持reset重置数据
- 删除 start_web.sh,统一使用 deploy.sh(Docker部署)
- 新增子命令:reset(删除所有数据需确认)、logs、stop、restart
- 更新 README 文档
|
2026-06-24 16:11:00 +08:00 |
|
yml2213
|
a7da949d9c
|
修复Roundcube空URL和白名单重复同步
1. ROUNDCUBE_URL: os.getenv返回空字符串时不回退默认值,改为 or 默认值
2. ProxyFetcher: 缓存已同步白名单IP,后续线程跳过重复同步
|
2026-06-24 16:04:21 +08:00 |
|
yml2213
|
a697e8735a
|
修复启动卡住:加密迁移解密失败时跳过而非崩溃
未设置 APP_ENCRYPTION_KEY 时使用临时密钥,重启后密钥变更导致旧密文解密失败。
改为跳过无法解密的值并记录警告,不再阻塞启动。
|
2026-06-24 16:00:07 +08:00 |
|
yml2213
|
e478ac4d09
|
简化登录流程:砍掉代理池,极验不内部切代理
- 新建 ProxyFetcher 替代 ProxyManager,每次从API取1个代理,无池无锁无冷却
- 极验最多3次尝试,失败直接抛异常回到login整体重试取新代理
- 删掉极验内部的 refresh_proxy/proxy_switches/_soft_fail_streak 逻辑
- login整体重试时取新代理从头走完整流程
- 代理验证超时从(5,8)缩短为(3,5),白名单同步后立即重试不等待
- login_service 删掉60行代理池预检/等待代码
- 修复邮件验证码日期比较:Roundcube分钟精度与秒级时间戳对齐
|
2026-06-24 15:37:48 +08:00 |
|
yml2213
|
ca5bf3531d
|
优化代理相关的
|
2026-06-24 14:44:09 +08:00 |
|
yml2213
|
83345dfdc5
|
增加了代理平台和日志
|
2026-06-24 14:22:29 +08:00 |
|
yml2213
|
0d03b2c242
|
优化登录重试与配置清理
|
2026-06-24 10:20:33 +08:00 |
|
yml2213
|
72248eb3cc
|
拆分补CK逻辑
|
2026-06-24 09:38:17 +08:00 |
|
yml2213
|
d87aa7c1e6
|
移除HTTP详情请求日志
|
2026-06-24 09:29:47 +08:00 |
|
yml2213
|
7bb50a9bbf
|
增强登录稳定性
|
2026-06-24 09:17:15 +08:00 |
|
yml2213
|
177ec42416
|
加密敏感数据并优化补CK流程
|
2026-06-24 09:10:31 +08:00 |
|
yml2213
|
8e65af538c
|
完全对齐目标 ck
|
2026-06-24 08:28:37 +08:00 |
|
yml2213
|
ae92cd2441
|
cvl_csrf_token 是有了, 但是 acf_ccn 还没有
|
2026-06-24 08:15:15 +08:00 |
|
yml2213
|
4813eb039d
|
feat: 极验验证默认无限重试,由登录整体超时兜底
- max_proxy_retries 默认值从10改为0(无限重试)
- _solve_geetest 增加 deadline 参数,超时则主动退出
- login() 计算 deadline 并传递给极验验证
- 前端/Schema/Service 默认值同步更新
|
2026-06-23 23:40:40 +08:00 |
|
yml2213
|
7711111015
|
fix: 极验异常日志中 _truncate_error 缺少 self. 前缀导致 NameError
|
2026-06-23 22:50:39 +08:00 |
|
yml2213
|
4a07905edf
|
fix: Cookie批量删除路由顺序修正(/batch必须在/{task_id}前)+ Statistic valueStyle改为styles.content
|
2026-06-23 22:37:26 +08:00 |
|
yml2213
|
527c0c8ff8
|
feat: Cookie管理页面增加批量删除功能
|
2026-06-23 22:31:51 +08:00 |
|
yml2213
|
57c0d4af6e
|
fix: Cookie管理页面分页选择无法保存,pageSize改为state管理+localStorage持久化
|
2026-06-23 22:16:11 +08:00 |
|
yml2213
|
cc30697c97
|
feat: 登录流程整体重试机制 + 代理池耗尽等待恢复
- DouyuLogin.login() 添加整体重试循环,失败时换新代理从头重跑
- 新增 max_login_retries(默认3次)和 max_total_time(默认300秒)
- 重试前重置 session cookies + 换新代理,避免残留状态
- 成功后归还代理到池;失败时标记代理坏
- 代理池耗尽时不再立即放弃账号,等待最多60秒恢复后再试
- API代理模式改为 DouyuLogin 内部通过 proxy_manager 自治管理
登录过程中的代理切换(极验、整体重试)不再由服务层预取
- Schema/LoginBatchRequest 添加 max_login_retries 和 max_total_time
- 前端 API 调用改为对象参数形式,透传新参数
|
2026-06-23 22:06:00 +08:00 |
|
yml2213
|
0a68632c8a
|
fix: 远程http访问时复制Cookie失败,添加execCommand fallback兼容非安全上下文
|
2026-06-23 21:12:37 +08:00 |
|
yml2213
|
02b92a9af5
|
fix: 启动时初始化loguru写文件,控制台日志不再丢失
- 调用setup_logger将日志同时输出到logs/app.log
- 默认DEBUG级别,可通过LOG_LEVEL环境变量覆盖
- 10MB轮转、7天保留、UTF-8编码
- 之前只有http_detail.jsonl(http_logger自己写的),loguru日志全在控制台看完就没了
|
2026-06-23 10:02:01 +08:00 |
|
yml2213
|
74251c48c7
|
fix: 日志等级选择器不再误触发折叠展开
- 折叠onClick从整个标题栏div移到标题文字span上
- 移除不再需要的stopPropagation
|
2026-06-23 09:50:08 +08:00 |
|
yml2213
|
65683350ea
|
feat: 实时日志面板增加日志等级选择器
- 4级过滤:错误/警告+/成功+/全部
- inline模式和card模式均支持
- 点击Select时不触发折叠事件(stopPropagation)
- 条数统计仍显示全部日志数(不过滤)
|
2026-06-23 09:45:59 +08:00 |
|
yml2213
|
36d55ed685
|
fix: 代理验证增加极验api.geetest.com连通性测试
- 原来只验证douyu.com,能过但极验不通的代理会入池后立即失败
- 现在两关验证:先过douyu.com,再过api.geetest.com
- 日志中09:04:03验证10/10全通过但极验连续失败的问题不会再出现
- 极验超时/不可达的代理在入池前就被过滤掉
|
2026-06-23 09:40:44 +08:00 |
|
yml2213
|
e778acbccd
|
fix: 极验重试区分代理死亡和临时波动,减少无效换代理
- 新增 _is_proxy_connection_error 判断异常类型
- 代理连接类错误(ProxyError/超时/502):立即换代理+标记坏
- 临时波动(slide/网络不给力/KeyError):先用原代理重试2次,才换代理
- _refresh_proxy 新增 mark_bad 参数,临时换代理不标记坏
- 解决日志中'网络不给力'反复换代理导致池枯竭的问题
|
2026-06-23 09:39:43 +08:00 |
|
yml2213
|
ab4b5e7f08
|
fix: mark_bad改为带冷却期的软隔离,防止代理池快速枯竭
- 失败1次: 冷却30s后可重新入池(指数退避:30s→60s→120s)
- 连续失败3次: 才永久移出池
- 选代理时优先跳过冷却中的代理,池子全冷却时退而求其次
- 成功归还代理时清除失败记录(release_proxy)
- 解决日志中09:02:23后代理被逐个误杀导致池枯竭的问题
|
2026-06-23 09:36:57 +08:00 |
|
yml2213
|
3b36175bbb
|
fix: 改用Roundcube API获取验证码,修复邮件时间解析不可靠问题
- 新增Roundcube Webmail登录+JSON API读取邮件列表(含精确日期)
- Roundcube优先,read.php降为备用回退
- 解析Roundcube返回的中文日期格式(今天/昨天/星期X HH:MM)
- 修复read.php时间字段被MIME编码Subject污染导致'保守拒绝'误判
- 修复邮件时间UTC/本地时区8小时偏差导致正常邮件被跳过的问题
- read.php备用模式下解析不到时间不再保守拒绝,改为放行
|
2026-06-23 09:34:44 +08:00 |
|
yml2213
|
3a065dfd98
|
优化启动脚本
|
2026-06-23 09:06:06 +08:00 |
|
yml2213
|
98728bee87
|
fix: 修复前端7处eslint错误和6处警告
- AccountsPage/CookiePage/UsersPage/LoginTasksPage/ProxyPage:
将数据加载函数改为useCallback包裹,补全useEffect依赖项
- LoginTasksPage: loadAccounts和loadTasks改为useCallback
- MainLayout: 补全navigate依赖
- eslint.config.js: 关闭react-hooks/set-state-in-effect(对初始
数据获取场景过严),降级react-refresh/only-export-components为warn
(Provider/Hook/Type共存文件是合理设计)
|
2026-06-23 08:42:00 +08:00 |
|
yml2213
|
dd56de9bd4
|
fix: 修复proxy_service和account_service中不当的顶层import
- proxy_service.py: 将requests和WhitelistManager改为函数内延迟import,
避免启动时加载不需要的依赖;移除未使用的get_exit_ip_via_proxy导入
- account_service.py: 移除未使用的func、joinedload、AuditLog、
user_has_permission顶层导入
|
2026-06-23 08:35:29 +08:00 |
|
yml2213
|
2ab6724543
|
refactor: 补全services层+消除core/models.py冗余+修复network.py缩进错误
高优先级问题1 - Router层业务逻辑泄漏:
- 新建 services/proxy_service.py: 从routers/proxy.py提取ProxyService类,
封装代理/白名单测试逻辑、全局状态管理、所有core/ import
- 新建 services/account_service.py: 从routers/accounts.py提取
split_account_line、cookie_account_ids_query、parse_and_build_accounts,
封装core.douyu.email_verifier的import
- 重写routers/proxy.py为薄HTTP/WS层,移除所有core/直接依赖
- 精简routers/accounts.py,从account_service导入业务函数
- 将_active_batches全局状态移入login_service.py的BatchRegistry类
- routers/login.py改为使用batch_registry单例
高优先级问题2 - 两套models.py冗余:
- 删除core/models.py(Account dataclass + ProxyConfig死代码)
- 在core/douyu/login.py新增AccountLike Protocol替代Account dataclass
- login_service.py中Account(...)构造改为SimpleNamespace(...)
- 清理core/__init__.py导出
附带修复:
- core/geetest/common/network.py的get_picture()函数缩进错误
(缺少if match:块和data赋值语句)
|
2026-06-23 07:34:17 +08:00 |
|
yml2213
|
12c31c2e09
|
refactor: 消除前端52处any类型+删除冗余requirements.txt+调试print改日志
- 删除 requirements.txt,pyproject.toml 为唯一依赖源(含 requests[socks] extra)
- core/geetest 下 5 处 print() 替换为 loguru logger.debug()
- api/modules.ts 新增 13 个响应接口,消除所有 api.xxx<any, any>
- 新建 utils/error.ts 提供 getErrorMessage(e: unknown) 安全取消息
- 11 个页面组件 catch (e: any) 改为 catch (e: unknown)
- useState<any[]>、columns: any[]、render 参数全部类型化
- TypeScript 类型检查零错误通过
|
2026-06-23 07:14:08 +08:00 |
|
yml2213
|
453a637480
|
refactor: 修复9项中等架构问题
安全修复:
- WebSocket 端点添加认证(cookie/token),防止未授权窃听日志
- SPA serve_spa 添加路径遍历防护(resolve + relative_to 检查)
- Token 改用 httpOnly Cookie 存储,移除前端 localStorage token(防 XSS 窃取)
- 添加安全响应头中间件(X-Content-Type-Options/X-Frame-Options/Referrer-Policy)
- HTTP 请求日志脱敏请求体中的 password/secret/token 等敏感字段
- 权限检查统一使用 user_has_permission(考虑自定义权限,修复 has_permission 忽略 custom_permissions 的缺陷)
性能与稳定性:
- cookies.py 列表接口修复 N+1 查询(改为批量查询 Account)
- login_service.py run() 结束时关闭 DB Session(防止连接泄漏)
- _active_batches/_active_tests 全局字典添加 threading.Lock(防止并发竞态)
配置优化:
- CORS 源支持环境变量 CORS_ORIGINS 配置
- Uvicorn reload 支持环境变量 UVICORN_RELOAD 控制(生产环境默认关闭)
- Cookie 安全标志支持环境变量 COOKIE_SECURE 配置(HTTPS 部署时启用)
- logs.py 权限不足返回 HTTP 403(原来返回 200 + message)
|
2026-06-23 06:51:01 +08:00 |
|
yml2213
|
db384701a9
|
fix(security): JWT密钥与默认账号改用环境变量,清理泄露凭据
- JWT_SECRET_KEY 改从环境变量读取,未设置时使用临时随机密钥并告警
- 默认管理员账号密码改用 ADMIN_USERNAME/ADMIN_PASSWORD 环境变量配置
- 移除登录页及启动/部署脚本中的默认密码明文提示
- docker-compose.yml 添加环境变量支持(从 .env 文件读取)
- 新增 .env.example 配置文档,.gitignore 添加 .env 规则
- git rm --cached 清理已追踪的 data/accounts.json 和 data/cookies/敏感文件
|
2026-06-23 06:42:37 +08:00 |
|
yml2213
|
2ccc2a9336
|
修复并发账号分配到同一个代理的问题
问题:get_proxy每次返回池中第一个代理,导致并发账号用同一个代理,
容易触发斗鱼/极验风控。
修复:
- 增加_in_use集合,get_proxy取代理时标记为使用中,避免重复分配
- 代理池空但所有代理都在使用中时,允许复用(兜底)
- 新增release_proxy方法,登录完成后归还代理到池
- login.py的finally块中调用release_proxy,确保成功/失败都归还
- mark_bad同时从_in_use移除
|
2026-06-23 01:41:46 +08:00 |
|