From c1ff55ffbfceed244d1336c82314dc3ac1476a7e Mon Sep 17 00:00:00 2001 From: truewhile <779943132@qq.com> Date: Wed, 30 Sep 2026 19:22:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- .zcodeignore | 114 +++++ docs/reader-plan.md | 4 +- internal/handler/reader_login_test.go | 307 +++++++++++++ internal/handler/reader_routes.go | 82 ++++ internal/helper/secret.go | 87 ++++ internal/model/model.go | 1 + internal/model/reader.go | 14 + internal/repository/reader_repository.go | 41 +- internal/repository/reader_state_test.go | 128 ++++++ internal/service/crypto.go | 74 +--- internal/service/reader/login.go | 291 +++++++++++++ internal/service/reader/login_test.go | 404 ++++++++++++++++++ internal/service/reader/reader.go | 308 ++++++++++--- internal/service/reader/reader_test.go | 4 + internal/service/reader/rule/bridge.go | 44 +- internal/service/reader/rule/goja.go | 158 ++++++- internal/service/reader/rule/jsobjects.go | 274 +++++++++--- .../service/reader/rule/sample_source_test.go | 317 ++++++++++++++ internal/service/reader/rule/state.go | 240 +++++++++++ .../reader/rule/testdata/sample_jsLib.js | 117 +++++ .../reader/rule/testdata/sample_loginUi.json | 46 ++ .../reader/rule/testdata/sample_loginUrl.js | 67 +++ internal/service/reader/source.go | 35 ++ internal/service/reader/state.go | 274 ++++++++++++ web/src/api/reader.ts | 55 +++ web/src/pages/reader/ReaderSourcesPage.tsx | 126 +++++- web/src/pages/reader/SourceLoginDialog.tsx | 379 ++++++++++++++++ 28 files changed, 3793 insertions(+), 201 deletions(-) create mode 100644 .zcodeignore create mode 100644 internal/handler/reader_login_test.go create mode 100644 internal/helper/secret.go create mode 100644 internal/repository/reader_state_test.go create mode 100644 internal/service/reader/login.go create mode 100644 internal/service/reader/login_test.go create mode 100644 internal/service/reader/rule/sample_source_test.go create mode 100644 internal/service/reader/rule/state.go create mode 100644 internal/service/reader/rule/testdata/sample_jsLib.js create mode 100644 internal/service/reader/rule/testdata/sample_loginUi.json create mode 100644 internal/service/reader/rule/testdata/sample_loginUrl.js create mode 100644 internal/service/reader/state.go create mode 100644 web/src/pages/reader/SourceLoginDialog.tsx diff --git a/.gitignore b/.gitignore index 64a5923..d2ca998 100644 --- a/.gitignore +++ b/.gitignore @@ -80,4 +80,5 @@ media/ tools/ verify-cache/ verify-data/ -.zcode/ \ No newline at end of file +.zcode/ +.tmp-src diff --git a/.zcodeignore b/.zcodeignore new file mode 100644 index 0000000..79c3199 --- /dev/null +++ b/.zcodeignore @@ -0,0 +1,114 @@ +# Binaries +bin/ +*.exe +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test +*.out + +# Go workspace +go.work + +# Dependency directories +node_modules/ + +# Build artifacts +web/dist/ +web/.vite/ +web/coverage/ +web/tsconfig.tsbuildinfo +dist-release/ + +# Data / runtime +data/ +cache/ +logs/ +.tmp-deploy-data/ +.tmp-deploy-smoke-data/ +.tmp-deploy-smoke-cache/ +.tmp-deploy-cache/ +.tmp-deploy-server.* +.tmp-live-server.* +.mebox.pid +*.log +*.db +*.db-journal +*.db-shm +*.db-wal + +# Editor / OS +.idea/ +.vscode/ +.DS_Store +Thumbs.db + +# Env files +.env +.env.local +.env.*.local + +# Local configs (keep examples) +config/secrets.yaml +config.yaml + +# WorkBuddy workspace (local AI assistant memory) +.workbuddy/ + +# Editor backups +*~ +.tmp_* + +# Runtime / local-only artifacts (清理补充) +.tmp/ +.tmp-live-backups/ +.tmp-* +.codex-* +.codex/ +downloads/ +media/ +*.pid + +# 本地开发运行产物 +.agents/ +.claude/ +.dev-cache/ +.dev-data/ +.dev-logs/ +tools/ +verify-cache/ +verify-data/ +.zcode/ + +# ===== ↑ 以上同步自 .gitignore(「从 .gitignore 同步」只重写以上部分)===== +.git/ +.hg/ +.svn/ +bower_components/ +jspm_packages/ +__pycache__/ +site-packages/ +venv/ +coverage/ +htmlcov/ +lcov-report/ +cmakefiles/ +cmake-build-*/ +bazel-*/ +pods/ +deriveddata/ +storybook-static/ +playwright-report/ +test-results/ +allure-results/ +allure-report/ +cdk.out/ +*.egg-info/ +*.dist-info/ +eggs/ +pip-wheel-metadata/ +wheels/ +# ----- ↑ 以上为 ZCode 默认排除规则(自定义规则请写在本行下方,不会被同步/恢复改动)----- +# 自定义规则写在下方(本行提示可删除) diff --git a/docs/reader-plan.md b/docs/reader-plan.md index 07937b5..74bed56 100644 --- a/docs/reader-plan.md +++ b/docs/reader-plan.md @@ -18,7 +18,8 @@ **不做(本期明确排除):** - `webView` 类规则(需要无头浏览器,识别后标记该源为不兼容并提示) -- 登录类书源(loginUrl / loginUi 交互) +- `webView` 真人校验类登录(loginUrl 走 WebView 人工过验证码的场景; + 纯 JS / 表单类登录已支持,见 P4.5) - RSS/订阅源、TTS 朗读、文件类型源(bookSourceType=3) - 本地 TXT/EPUB 导入(列为后续可选) @@ -122,6 +123,7 @@ web/src/ | P2 JS 与兼容率爬坡 ✅ | goja 接入 + `java.*` 桥(网络/编解码/摘要/对称加密全家桶/规则回调,函数名对齐 JsExtensions)+ URL 规则 JS(analyzeJs/{{}}/js/bodyJs)+ cookie jar + 用户替换净化规则(含正则超时保护)+ 替换净化页 + 结构化冒烟链路(SmokeChain)+ `cmd/reader-smoke` 冒烟 CLI | JS 源可用;冒烟 CLI 跑公开书源集出各阶段通过率报告 | | P3 音频源 ✅ | 正文按音频类型返回播放列表(绝对化)+ `/api/reader/media` 签名媒体代理(HMAC 防滥用、Range 透传支持拖动、m3u8 分片/密钥地址重写)+ 阅读器音频面板(hls.js 播 m3u8、直链 `