Skip to content

fix(drivers/139): optimize login flow with cookie reuse and robust fallback#2067

Open
UcnacDx2 wants to merge 3 commits into
OpenListTeam:mainfrom
UcnacDx2:refactor-139-driver-optimized
Open

fix(drivers/139): optimize login flow with cookie reuse and robust fallback#2067
UcnacDx2 wants to merge 3 commits into
OpenListTeam:mainfrom
UcnacDx2:refactor-139-driver-optimized

Conversation

@UcnacDx2

@UcnacDx2 UcnacDx2 commented Feb 1, 2026

Copy link
Copy Markdown
Contributor

Summary / 摘要

Fix the 139Yun driver login loop and risk-control failures by avoiding unnecessary full password login attempts and making the credential fallback path explicit.

修复 139 云盘驱动在初始化时反复走完整密码登录、容易触发风控或登录死循环的问题。

User-visible behavior changes:

  • Existing Authorization is preferred; if present, the login flow is skipped and the normal refresh path handles renewal.
  • MailCookies can be reused through a fast path only when both required cookies exist: Os_SSo_Sid and RMKEY.
  • Full password login is used as fallback only when MailCookies, Username, and Password are all configured.
  • Partial username/password configuration now returns a clear validation error.

Important implementation changes:

  • Centralized cookie parsing, sanitizing, merging, and deterministic ordering.

  • Dropped stale JSESSIONID during password login when a fresh one cannot be fetched, because sending an expired value can trigger mail.10086.cn risk control.

  • Replaced resty redirect error string matching with explicit HTTP 3xx response status handling.

  • Removed sensitive login values from logs, including password/hash, cookies, passId/token/dycpwd/authToken, and decrypted auth response bodies.

  • Updated meta.go help text to match supported credential combinations.

  • Added unit tests for cookie sanitizing/merging, credential-state detection, and redirect status handling.

  • This PR has breaking changes.
    / 此 PR 包含破坏性变更。

  • This PR changes public API, config, storage format, or migration behavior.
    / 此 PR 修改了公开 API、配置、存储格式或迁移行为。

    This changes driver configuration validation/help text for 139Yun credentials, but it does not require storage migration.

  • This PR requires corresponding changes in related repositories.
    / 此 PR 需要关联仓库同步修改。

Related repository PRs / 关联仓库 PR:

Related Issues / 关联 Issue

Relates to #1534 comment

Testing / 测试

  • go test ./...

  • go test ./drivers/139

  • Manual test / 手动测试:

    • Ran gofmt on the changed Go files.
    • Performed a local real-account smoke test with temporary environment variables only:
      • confirmed the supplied cookie set did not contain RMKEY, so the fast path was correctly skipped;
      • confirmed the full password flow Step 1 -> Step 2 -> Step 3 completed successfully;
      • no real cookie, token, authorization, username, or password values were committed or added to this PR description.

Checklist / 检查清单

  • I have read CONTRIBUTING.
    / 我已阅读 CONTRIBUTING

  • I confirm this contribution follows the repository license, contribution policy, and code of conduct.
    / 我确认此贡献符合仓库许可证、贡献规范和行为准则。

  • I have formatted the changed code with gofmt, go fmt, or prettier where applicable.
    / 我已按适用情况使用 gofmtgo fmtprettier 格式化变更代码。

  • I have requested review from relevant maintainers or code owners where applicable.
    / 我已在适用情况下请求相关维护者或代码所有者审查。

    No specific code owner was identified from the PR page; maintainers, please review when convenient.

AI Disclosure / AI 使用声明

  • This PR includes AI-assisted content.
    / 此 PR 包含 AI 辅助内容。

Tools used / 使用工具:

  • ChatGPT
  • Codex
  • GitHub Copilot
  • Claude
  • Gemini
  • Other (please specify) / 其他(请注明):

Usage scope / 使用范围:

  • Code generation / 代码生成

  • Refactoring / 重构

  • Documentation / 文档

  • Tests / 测试

  • Translation / 翻译

  • Review assistance / 审查辅助

  • I have reviewed and validated all AI-assisted content included in this PR.
    / 我已审核并验证此 PR 中的所有 AI 辅助内容。

  • I have ensured that all AI-assisted commits include Co-Authored-By attribution.
    / 我已确保所有 AI 辅助提交都包含 Co-Authored-By 归属信息。

  • I can reproduce all AI-assisted content included in this PR without any AI tools.
    / 我可以在没有任何 AI 工具的情况下重现此 PR 中包含的 AI 辅助内容。

Copilot AI review requested due to automatic review settings February 1, 2026 15:01

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request optimizes the 139 cloud drive driver's authentication flow to address login loop errors and risk control triggers. The changes implement a prioritized login strategy: Authorization → Cookie reuse → Password login fallback.

Changes:

  • Introduced validateAndInitCredentials() to implement flexible credential validation with priority-based login attempts
  • Added sanitizeLoginCookies() to enforce strict cookie ordering and prevent authentication failures from stale session data
  • Enhanced step1_password_login() to fetch fresh JSESSIONID, detect risk control errors, and properly manage cookie state
  • Refactored error handling in the request() method to eliminate goto statements and streamline special case handling

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.

File Description
drivers/139/driver.go Simplified Init() to delegate credential validation to new helper function
drivers/139/util.go Core changes including new validation logic, cookie sanitization, enhanced password login with risk control detection, and cleaner error handling

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread drivers/139/util.go Outdated
Comment thread drivers/139/util.go Outdated
Comment thread drivers/139/util.go Outdated
Comment thread drivers/139/util.go Outdated
Comment thread drivers/139/util.go
@jyxjjj

jyxjjj commented Feb 1, 2026

Copy link
Copy Markdown
Member

不好意思 刚刚回复前没看到你是新建了新的PR 但确实还是需要团队再看的
另外下次建议在不同PR之间进行引用 如井号开头的ID

@UcnacDx2 UcnacDx2 changed the title feat(drivers/139): optimize login flow with cookie reuse and robust fallback fix(drivers/139): optimize login flow with cookie reuse and robust fallback Feb 2, 2026
@xrgzs xrgzs added bug Module: Driver Driver-Related Issue/PR labels Feb 19, 2026
@leishenws

Copy link
Copy Markdown

大佬🐂。我时刻待命协助逆向解决风控

@Suyunmeng Suyunmeng force-pushed the main branch 4 times, most recently from a31fd53 to 7bea29c Compare April 2, 2026 17:27
@mengnichangnb

Copy link
Copy Markdown

在文档里没有MailCookies的获取方式,该如何获取

…allback

- Cookie Reuse Strategy: Introduced a fast-path login mechanism. If valid MailCookies (containing Os_SSo_Sid) are present, the driver attempts to skip the full password login (Step 1) and directly exchange the SID for a token (Step 2 -> Step 3). This significantly reduces risk control triggers and improves initialization speed.
- Authorization Priority: Added a check to skip the entire login process if a valid Authorization string is already present in the configuration.
- Robust Fallback: Implemented a fallback mechanism. If the fast-path (cookie reuse) fails (e.g., expired cookie), the driver automatically falls back to the full password login flow (Step 1 -> Step 2 -> Step 3) to ensure service availability.
- Credential Validation: Refined validation logic. Now accepts configuration with only Authorization, or only MailCookies (for fast path), while strictly enforcing that if Username or Password is provided, all three credentials (including MailCookies) must be present to support the fallback password login.
- Security: Ensured that when falling back to password login, only necessary cookies are sent (via sanitizeLoginCookies) to avoid polluting the request.
- Code Cleanup: Removed unused imports and improved code formatting.
@UcnacDx2 UcnacDx2 force-pushed the refactor-139-driver-optimized branch 2 times, most recently from a765973 to 8e46007 Compare June 12, 2026 05:36
Co-Authored-By: OpenAI Codex <codex@openai.com>
@UcnacDx2 UcnacDx2 force-pushed the refactor-139-driver-optimized branch from 8e46007 to bec2306 Compare June 12, 2026 05:44
@UcnacDx2

Copy link
Copy Markdown
Contributor Author

@xrgzs 已优化代码,补充文档和测试,可以麻烦审查合并一下吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Module: Driver Driver-Related Issue/PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants