Skip to content

feat(drivers/139): user authentication and file batch operations#1534

Merged
PIKACHUIM merged 7 commits intoOpenListTeam:mainfrom
UcnacDx2:139yun-commit2
Dec 15, 2025
Merged

feat(drivers/139): user authentication and file batch operations#1534
PIKACHUIM merged 7 commits intoOpenListTeam:mainfrom
UcnacDx2:139yun-commit2

Conversation

@UcnacDx2
Copy link
Copy Markdown
Contributor

@UcnacDx2 UcnacDx2 commented Oct 24, 2025

  • Added Username and Password fields to the Addition struct for user authentication.
  • Implemented loginWithPassword method to handle user login via password and cookies.
  • Introduced new request types for batch operations and document modifications.
  • Enhanced error handling in request methods to provide better debugging information.
  • Added AES encryption and decryption utilities for secure communication.
  • Implemented methods for handling album requests and group copying operations.
  • Updated logging for better traceability of requests and responses.

Description / 描述

增加了账户密码登录的功能。
增加了家庭云和共享群的复制,移动功能。
更换了更快速的上传端点。

Motivation and Context / 背景

authorization有效期太短。
家庭云和共享群功能缺失,上传速度慢。

How Has This Been Tested? / 测试

使用本地 debug 进行密码登录流程验证(创建临时用户 -> 调用 loginWithPassword -> 检查 Cookie/Session)。

Checklist / 检查清单

  • I have read the CONTRIBUTING document.
    我已阅读 CONTRIBUTING 文档。
  • I have formatted my code with go fmt or prettier.
    我已使用 go fmtprettier 格式化提交的代码。
  • I have added appropriate labels to this PR (or mentioned needed labels in the description if lacking permissions).
    我已为此 PR 添加了适当的标签(如无权限或需要的标签不存在,请在描述中说明,管理员将后续处理)。
  • I have requested review from relevant code authors using the "Request review" feature when applicable.
    我已在适当情况下使用"Request review"功能请求相关代码作者进行审查。
  • I have updated the repository accordingly (If it’s needed).
    我已相应更新了相关仓库(若适用)。

- Added support for password-based login in the 139 driver.
- Introduced RootPath field to store the root directory path.
- Updated Init method to handle family and group types more effectively.
- Implemented new methods for handling file operations in family and group contexts.
- Enhanced error handling and logging for better debugging.
- Added new request and response structures for batch operations and document modifications.
- Improved encryption and decryption methods for secure communication.
@ILoveScratch2
Copy link
Copy Markdown
Member

勾选框请删掉空格直接写x

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR implements password-based authentication for the 139 cloud driver to address short authorization token validity periods. The implementation adds a multi-step login flow involving password hashing, session token exchange, and third-party authentication with AES encryption for secure communication.

Key Changes:

  • Added username/password fields to the Addition struct for authentication
  • Implemented a three-step password login flow with AES encryption/decryption utilities
  • Enhanced error handling and logging throughout request methods
  • Added support for batch operations (move, copy, rename) in family and group cloud types

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 8 comments.

File Description
drivers/139/meta.go Added Username, Password, and MailCookies fields to Addition struct for authentication
drivers/139/driver.go Integrated password login fallback in Init, added Move/Copy/Rename support for family/group clouds
drivers/139/util.go Implemented password login flow (3 steps), AES encryption utilities, and new request handlers
drivers/139/types.go Added new request/response types for batch operations and document modifications
Comments suppressed due to low confidence (1)

drivers/139/util.go:1

  • Magic string value for x-deviceinfo header lacks explanation. Add a comment explaining the format and purpose of this device information string.
package _139

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

@UcnacDx2 UcnacDx2 changed the title feat(139): Enhance 139 driver with user authentication and new reques… feat(139): Enhance 139 driver with user authentication and file batch operations Oct 25, 2025
UcnacDx2 and others added 5 commits October 25, 2025 11:20
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
@xrgzs
Copy link
Copy Markdown
Member

xrgzs commented Oct 25, 2025

换成 139 邮箱了?

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

换成 139 邮箱了?

云盘本身的登录接口要短信验证,这是取巧的办法。
需要139邮箱网页操作,在邮箱那边登记成可信设备提取header string格式cookie,
然后在这边填入邮箱cookie和填写账号密码。
理论上云盘和邮箱两者账号密码通用的

@jyxjjj
Copy link
Copy Markdown
Member

jyxjjj commented Nov 21, 2025

May a fix of #1680

@jyxjjj jyxjjj requested a review from KirCute December 15, 2025 08:41
@jyxjjj
Copy link
Copy Markdown
Member

jyxjjj commented Dec 15, 2025

Just waiting for @KirCute to check again

@ILoveScratch2 ILoveScratch2 changed the title feat(139): Enhance 139 driver with user authentication and file batch operations feat(drivers/139): user authentication and file batch operations Dec 15, 2025
@PIKACHUIM PIKACHUIM merged commit b454275 into OpenListTeam:main Dec 15, 2025
@Losalado
Copy link
Copy Markdown

移动云盘似乎马上要进行调整,不知道这个PR是否需要等待调整完成呢?

image

@PHCSJC
Copy link
Copy Markdown

PHCSJC commented Jan 2, 2026

“更换了更快速的上传端点”
请问这个功能需要使用新的邮箱登录方式吗?
再就是怎么登记成可信设备呢?

@GraysonSmith

This comment has been minimized.

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

UcnacDx2 commented Jan 7, 2026

请问可以指导一下在139邮箱的网页版中该抓取cookie中的具体什么字段吗?还是把cookie整体填进去就可以了呢?我测试的时候一直报错失败 init storage:刷新后未能用密码登录失败 失败:未能从登录中提取SID或CGUID,回复请问是什么原因呢?谢谢大佬解答!

我测试用的是Cookie-Editor导出的Header String

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

UcnacDx2 commented Jan 7, 2026

“更换了更快速的上传端点” 请问这个功能需要使用新的邮箱登录方式吗? 再就是怎么登记成可信设备呢?

①不需要
②邮箱登陆的具体步骤是:
1.手动在邮箱登录一遍,在此次登录会要求短信验证码进行认证
2.登录成功待页面不再跳转后,从页面获取Header String格式的cookie填入(控制台复制或者使用插件均可)
3.填入账户名和密码,测试是否工作正常

相较之前的登录方式,目前的方案会自动续期Authorization

@UcnacDx2 UcnacDx2 deleted the 139yun-commit2 branch January 9, 2026 06:53
@gaoyuyun
Copy link
Copy Markdown

我把139邮箱控制台的cookie导入了,但是提示Failed init storage: failed to login with password after refresh failed: failed to extract sid or cguid from login response,请问是什么原因呢

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

我把139邮箱控制台的cookie导入了,但是提示Failed init storage: failed to login with password after refresh failed: failed to extract sid or cguid from login response,请问是什么原因呢

你可以脱敏发出来cookie填了什么

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

我把139邮箱控制台的cookie导入了,但是提示Failed init storage: failed to login with password after refresh failed: failed to extract sid or cguid from login response,请问是什么原因呢

以及填入的cookie,得是手动在网页端登陆成功过后的

@SENyiAi
Copy link
Copy Markdown

SENyiAi commented Jan 14, 2026

{1B666642-A9B8-42E8-A372-1A77565F8FAE} 全部填了一遍都是Failed init storage: login with password failed: failed to extract sid or cguid from login response 已完成短信认证

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

{1B666642-A9B8-42E8-A372-1A77565F8FAE} 全部填了一遍都是Failed init storage: login with password failed: failed to extract sid or cguid from login response 已完成短信认证

我本地测试也复现了,可能移动加强了风控,我需要评估一下
可以回退使用文档的Authorization方法登录

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

{1B666642-A9B8-42E8-A372-1A77565F8FAE} 全部填了一遍都是Failed init storage: login with password failed: failed to extract sid or cguid from login response 已完成短信认证

我再次尝试了一下,也觉得很玄学
在本地使用--dev启动获取调试信息,正常填入cookie、账号和密码,没有出现报错

首次登录成功并获取到Authorization,后续登录报错Failed init storage: login with password failed: failed to extract sid or cguid from login response

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

{1B666642-A9B8-42E8-A372-1A77565F8FAE} 全部填了一遍都是Failed init storage: login with password failed: failed to extract sid or cguid from login response 已完成短信认证

使用我更正后的步骤试一下

邮箱登陆的具体步骤是:
1.手动在邮箱登录一遍,在此次登录会要求短信验证码进行认证
2.登录成功待页面不再跳转后,从邮箱右上角头像处退出登录
3.回到待登录页面,从页面获取Header String格式的cookie填入(控制台复制或者使用插件均可)
3.填入账户名和密码,测试是否工作正常

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

todo:

问题背景 (Problem Statement)

目前 139 云盘驱动在处理初始化登录时存在逻辑闭环缺陷:

  1. 重复登录触发风控: 驱动在已有有效 a_l/a_l2 令牌的情况下,仍会尝试执行 password_login(密码登录),导致短时间内频繁请求移动登录接口,触发 ec=PML401010062(频率限制/风控)错误。
  2. 设备指纹丢失/污染: 驱动未将“设备指纹(静态)”与“会话令牌(动态)”分离。登录成功后的 Cookie 会覆盖初始状态,导致再次登录时缺失关键的指纹字段(如 DEVICE_INFO_DIGEST),进而被判别为异常脚本。
  3. 非法状态请求: 在请求登录接口(Login.ashx)时,如果 Header 携带了旧的 a_l/a_l2 令牌,会触发服务器的安全保护机制,导致重定向链接中缺失 sid 参数。

需求清单 (Requirement List)

1. 引入登录预检机制 (Pre-auth Validation)

  • 逻辑: 在执行 Init 流程时,应首先检查配置中是否存在 a_l2 授权令牌。
  • 动作: 如果存在,先调用一个轻量级接口(如 GetDirectoryUserInfo)测试存活性。
  • 结果: * 若测试成功,直接沿用当前 Authorization,禁止进入密码登录流程。
  • 仅当测试返回 401 Unauthorized 或令牌过期时,才触发重新登录。

2. 实现静态设备指纹持久化 (Persistent Device Fingerprints)

  • 逻辑: 将 Cookie 划分为“永久指纹”与“动态会话”两个维度。
  • 要求: * 静态部分: UUIDTokenDEVICE_INFO_DIGESTS_DEVICE_TOKENclientid 等设备标识,在首次生成或手动填入后,应永久保存于 Addition 配置中。
  • 动态部分: a_la_l2RMKEYOs_SSo_Sid 等随登录状态变化的字段,仅在成功登录后更新,但不应覆盖/删除静态指纹。

3. 优化密码登录请求头管理 (Header Sanitization)

  • 逻辑: 执行 step1_password_login 时,必须严格过滤请求头。
  • 要求: * 发送至 Login.ashx 的请求中,必须包含静态设备指纹 Cookie。
  • 发送至 Login.ashx 的请求中,严禁携带旧的 a_la_l2 字段,以规避“会话固定攻击”检测。
  • 必须先执行一次 GET 操作获取最新的 JSESSIONID,再执行 POST 登录。

4. 增强风控错误处理 (Risk Control Handling)

  • 逻辑: 识别移动云盘特有的错误代码。
  • 动作: 当响应 Location 包含 ec=PML401010062default.html 且缺失 sid 时,驱动应:
  • 立即停止重试,避免封禁 IP。
  • 在后端状态(Status)明确提示:“需要短信验证”。

预期效果 (Expected Outcome)

  • 减少接口撞击: 通过预检机制,使驱动在令牌有效期内(通常 15-30 天)仅需执行一次登录。
  • 模拟真实环境: 持久化的设备指纹使脚本行为更接近真实浏览器,降低被判定为恶意爬虫的风险。
  • 提高成功率: 修复因 Header 携带旧令牌导致的 sid 提取失败问题。

日志参考 (Reference Logs)

// 错误示例:缺失 sid 且触发风控代码
Location:[https://mail.10086.cn/default.html?...&ec=PML401010062&cguid=...]
// 原因分析:未分离指纹与令牌,且在已有 a_l2 时重复请求登录接口。

@SENyiAi
Copy link
Copy Markdown

SENyiAi commented Feb 20, 2026

邮箱登陆的具体步骤是:
1.手动在邮箱登录一遍,在此次登录会要求短信验证码进行认证
2.登录成功待页面不再跳转后,从邮箱右上角头像处退出登录
3.回到待登录页面,从页面获取Header String格式的cookie填入(控制台复制或者使用插件均可)
3.填入账户名和密码,测试是否工作正常

新步骤有效

推荐插件:https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc

@PHCSJC
Copy link
Copy Markdown

PHCSJC commented Feb 20, 2026

v4.1.10版本,还是提示这个:Failed init storage: login with password failed: failed to extract sid or cguid from login response

严格按步骤操作的,登录成功,再退出登录后获取的Header String格式的cookie,填入用户名密码和邮箱cookie
S_DEVICE_TOKEN=***********; DEVICE_INFO_DIGEST=***********; Login_UserNumber=***********; _139_login_version=70; JSESSIONID=***********; cbauto=always; _139_login_agreement=1; _139_login_agreementCloud=0; _139_login_showBtn=0; behaviorid=1003_9; cookiepartid1123=12; ut1123=2; cookiepartid=12; UserData={}; SkinPath21123=***********; rmUin1123=***********; provCode1123=17; areaCode1123=1710; UserNowState1123=0; UserNowState=0; cookieLen=13; agentid=***********; UUIDToken=***********; _139_index_login=***********; _139_index_isLoginType=0; Os_SSo_Sid=***********

@PHCSJC
Copy link
Copy Markdown

PHCSJC commented Feb 20, 2026

成功了,但是上行速度还是只有3,4M,这是移动做限制了吗?我这还是钻石会员

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

UcnacDx2 commented Feb 21, 2026

邮箱登陆的具体步骤是: 1.手动在邮箱登录一遍,在此次登录会要求短信验证码进行认证 2.登录成功待页面不再跳转后,从邮箱右上角头像处退出登录 3.回到待登录页面,从页面获取Header String格式的cookie填入(控制台复制或者使用插件均可) 3.填入账户名和密码,测试是否工作正常

新步骤有效

推荐插件:https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc

这种方式可以验证cookie有效性,但在下次token失效执行登录步骤仍会复现问题,导致无法登录
目前建议直接用Authorization
或者等待下一次pr合并再使用邮箱cookie方式

(又或者自行用我维护的分支构建一下使用..?)

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

成功了,但是上行速度还是只有3,4M,这是移动做限制了吗?我这还是钻石会员

有可能,移动有几套接口,每个接口策略可能不一样

@PHCSJC
Copy link
Copy Markdown

PHCSJC commented Feb 21, 2026

@UcnacDx2 还是等大佬PR合并吧👍️,另外我之前用Authorization登录的一个账号,在更新到新版本后,发现邮箱cookie里也有内容了,这个内容是自动生成的?那利用新接口了吗?

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

UcnacDx2 commented Feb 21, 2026

@UcnacDx2 还是等大佬PR合并吧👍️,另外我之前用Authorization登录的一个账号,在更新到新版本后,发现邮箱cookie里也有内容了,这个内容是自动生成的?那利用新接口了吗?

①不应该,具体是什么内容
②接口相关:
背景是原先代码使用的家庭云接口我能明显感觉到降速。
此次commit仅更换了家庭云的接口,个人云方面并未变动。
你也可以传家庭云测试速度,好用的话迂回转存个人云

@PHCSJC
Copy link
Copy Markdown

PHCSJC commented Feb 21, 2026

@UcnacDx2 这样的:
RMKEY=**********; behaviorid=1003_9; Os_SSo_Sid=**********; cookiepartid1123=12; ut1123=2; cookiepartid=12; Login_UserNumber=**********; UserData={}; SkinPath21123=**********; rmUin1123=**********; provCode1123=17; areaCode1123=1710; UserNowState1123=0; UserNowState=0; a_l=**********; a_l2=**********

@UcnacDx2
Copy link
Copy Markdown
Contributor Author

UcnacDx2 commented Feb 21, 2026

@UcnacDx2 这样的: RMKEY=**********; behaviorid=1003_9; Os_SSo_Sid=**********; cookiepartid1123=12; ut1123=2; cookiepartid=12; Login_UserNumber=**********; UserData={}; SkinPath21123=**********; rmUin1123=**********; provCode1123=17; areaCode1123=1710; UserNowState1123=0; UserNowState=0; a_l=**********; a_l2=**********

可能是你保存串了,Authorization的值并不能/不会换取邮箱cookie

(更正:研究了一下,能换取邮箱cookie。换取到的cookie的特性是有效期比云盘Authorization久。具体来说可以用于单Authorization登录长期续期。实现方式是补充写个step4,不过我懒得写了,能跑就行)

@SENyiAi
Copy link
Copy Markdown

SENyiAi commented Feb 21, 2026

经你们一说也是,这套接口特别卡,正常网页版可以跑满千兆视频秒开,这个接口需要大量时间缓冲

@SENyiAi
Copy link
Copy Markdown

SENyiAi commented Feb 21, 2026

容我撤回,速度并没问题,下载时单线程可以跑满千兆,预估是视频编码问题,钻石会员,邮箱cookie登录

handazao pushed a commit to handazao/OpenList that referenced this pull request Feb 27, 2026
…nListTeam#1534)

* feat(139): Enhance 139 driver with password login and root path handling

- Added support for password-based login in the 139 driver.
- Introduced RootPath field to store the root directory path.
- Updated Init method to handle family and group types more effectively.
- Implemented new methods for handling file operations in family and group contexts.
- Enhanced error handling and logging for better debugging.
- Added new request and response structures for batch operations and document modifications.
- Improved encryption and decryption methods for secure communication.

* Update drivers/139/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>

* Update drivers/139/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>

* Update drivers/139/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>

* Update drivers/139/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>

* Update drivers/139/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>

---------

Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Wodlie added a commit to Wodlie/openlist_123 that referenced this pull request Feb 28, 2026
* fix(drivers): free space underflow if used larger than total space (OpenListTeam#1407)

* fix(189pc/189tv): `request` panic when login failed (OpenListTeam#1428)

* fix(ilanzou): wrong total capacity (OpenListTeam#1433)

* feat(pikpak): support disk usage (OpenListTeam#1426)

* feat(pikpak): support disk usage

* fix(alias): cannot list with details

* refactor: rename `NewDiskUsageFromUsedAndTotal`

* fix(disk-usage): get details of storages that is not initialized

* feat(offline_download): add 123 open (OpenListTeam#1427)

* feat(http3|quic): add http3|quic support (OpenListTeam#1466)

* feat(http3|quic): add http3|quic support

* revert(ai): fix ai error

* fix(shutdown): shutdown was using close

* feat(http3|quic): add config if needs h3

* feat(http3|quic): add Alt-Svc to expose h3

* chore(frontend): optimize user operations (OpenListTeam#1449)

* feat(drivers): add halalcloud_open driver (OpenListTeam#1430)

* 新增清真云Open驱动,支持最新的轻量SDK

* Change Go version in go.mod

Downgrade Go version from 1.24.2 to 1.23.4

Signed-off-by: zzzhr1990 <zzzhr@hotmail.com>

* Apply suggestions from code review

* Removed unnecessary comments
* Downgraded the Go version to 1.23.4.
* Not sure whether FileStream supports concurrent read and write operations, so currently using single-threaded upload to ensure safety.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: zzzhr1990 <zzzhr@hotmail.com>

* feat(halalcloud_open): support disk usage

* Set useSingleUpload to true for upload safety

Not sure whether FileStream supports concurrent read and write operations, so currently using single-threaded upload to ensure safety.

Signed-off-by: zzzhr1990 <zzzhr@hotmail.com>

* Update meta.go

Change required for RefreshToken, If using a personal API approach, the RefreshToken is not required.

Signed-off-by: zzzhr1990 <zzzhr@hotmail.com>

* remove debug logs

* bump halalcloud SDK version

* fix unnecessary params

* Update drivers/halalcloud_open/driver_init.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: zzzhr1990 <zzzhr@hotmail.com>

* Fixed spelling errors; changed hardcoded retry parameters to constants.

* remove pointer in get link function in utils.go

---------

Signed-off-by: zzzhr1990 <zzzhr@hotmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: KirCute <951206789@qq.com>

* feat(http3|quic): Set Alt-Svc header only for HTTPS requests (OpenListTeam#1469)

* feat(local): move deleted files to corresponding locations (OpenListTeam#1281)

* fix(fs):fix retry task after restart (OpenListTeam#1467)

* fix retry task after restart

* fix: initialize SrcStorage and DstStorage in tasks to prevent nil pointer dereference

* feat: implement storage load signal mechanism for improved synchronization

* fix:  update StoragesLoaded logic

* refactor: reorganize storage loading logic and improve synchronization handling

---------

Co-authored-by: j2rong4cn <j2rong@qq.com>

* feat(cache): improve cache management (OpenListTeam#1339)

* feat(cache): improve cache management

* feat(disk-usage): add cache

* feat(disk-usage): add refresh

* fix(disk-usage): cache with ttl

* feat(cache): implement KeyedCache and TypedCache for improved caching mechanism

* fix(copy): update object retrieval to use Get instead of GetUnwrap

* refactor(cache): simplify DirectoryCache structure and improve object management

* fix(cache): correct cache entry initialization and key deletion logic in TypedCache

* refactor(driver): remove GetObjInfo interface and simplify Link function logic
https://github.com/OpenListTeam/OpenList/pull/888/files#r2430925783

* fix(link): optimize link retrieval and caching logic

* refactor(cache): consolidate cache management and improve directory cache handling

* fix(cache): add cache control based on storage configuration in List function

* .

* refactor: replace fmt.Sprintf with strconv for integer conversions

* refactor(cache): enhance cache entry management with Expirable interface

* fix(cache): improve link reference acquisition logic to handle expiration

* refactor: replace OnlyLinkMFile with NoLinkSF in driver configurations and logic

* refactor(link): enhance link caching logic with dynamic type keys based on IP and User-Agent

* feat(drivers): add LinkCacheType to driver configurations for enhanced caching

* refactor(cache): streamline directory object management in cache operations

* refactor(cache): remove unnecessary 'dirty' field from CacheEntry structure

* refactor(cache): replace 'dirty' field with bitwise flags

* refactor(io): 调高SyncClosers.AcquireReference的优先级

* refactor(link): 优化链接获取逻辑,增加重

* refactor(link): 添加RequireReference字段以增强链接管理

* refactor(link): 移除MFile字段,改用RangeReader

* refactor: 移除不必要的NoLinkSF字段

* refactor(cache): 修改目录缓存的脏标志定义和更新逻辑

* feat(cache): add expiration gc

---------

Co-authored-by: KirCute <951206789@qq.com>
Co-authored-by: KirCute <kircute@foxmail.com>
Co-authored-by: j2rong4cn <j2rong@qq.com>

* feat(onedrive): add ref support (OpenListTeam#1435)

* feat(onedrive): add ref support

* fix(onedrive): remove redundant token assignment from reference

---------

Co-authored-by: j2rong4cn <j2rong@qq.com>

* feat(drivers): add ProtonDrive driver (OpenListTeam#1368)

* feat(drivers): add ProtonDrive driver

- Implement complete ProtonDrive storage driver with end-to-end encryption support
- Add authentication via username/password with credential caching and reusable login
- Support all core operations: List, Link, Put, Copy, Move, Remove, Rename, MakeDir
- Include encrypted file operations with PGP key management and node passphrase handling
- Add temporary HTTP server for secure file downloads with range request support
- Support media streaming using temp server range requests
- Implement progress tracking for uploads and downloads
- Support directory operations with circular move detection
- Add proper error handling and panic recovery for external library integration
- Support buffered upload for specific sequential and encrypted, but optimized transmission.

* Update drivers/proton_drive/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: D@' 3z K!7 <99719341+Da3zKi7@users.noreply.github.com>

* chore

* feat(drivers): enhance ProtonDrive temp server

- Implement separate listen and public port configuration for complex network deployments
- Add intelligent port detection with 8080 as preferred default, fallback to auto-assignment
- Support Container/NAT/VM environments through configurable external host and port mapping
- Add port availability validation with graceful fallback to listen port
- Enable users to specify external domain/IP for client connections (e.g., 192.168.1.5)
- Follow FTP server configuration patterns for network flexibility
- Maintain localhost development simplicity while supporting production deployments

* feat(proton_drive): refactor directory handling and improve link retrieval

* fix(proton_drive): add NoLinkURL configuration option

* fix(proton_drive): update file size retrieval and enforce TwoFACode requirement

* feat(proton_drive): add expiration to link response

* fix(proton_drive): handle empty RootFolderID in Init method

* fix(proton_drive): update credential handling to use email and reusable login

* fix(proton_drive): update credential handling to use reusableCredential variable

* fix(proton_drive): update DirectRename to use GetLink for source object retrieval

* fix(proton_drive): refactor uploadFile to return model.Obj and handle errors correctly

* fix(proton_drive): refactor DirectMove to use getLink for source retrieval and simplify destination handling

* fix(proton_drive): simplify Copy method by removing temporary file creation and directly using FileStream

* refactor(proton_drive): remove unused temporary server and related code

* chore

* fix(proton_drive): fix driver

- Handle fresh login if ProtonDrive rejects AccessToken or RefreshToken
- Update stored credentials

* fix(proton_drive): simplify reusable login handling in Init method

* fix(proton_drive): fix driver

- Update stored credentials, now is failing

* feat(proton_drive): improve authentication handling and remove unused variables

* fix(proton_drive): fix driver

- Update stored credentials, now is failing

* fix(proton_drive): improve authentication handling

* refactor(proton_drive): move client initialization to initClient method

* feat(proton_drive): move addrs and addrKRs

* feat(proton_drive): optimize upload threads

- Change ConcurrentBlockUploadCount to user configured upload threads number
- Comment ConcurrentFileCryptoCount, default is runtime.GOMAXPROCS(0)

---------

Signed-off-by: D@' 3z K!7 <99719341+Da3zKi7@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: KirCute <951206789@qq.com>
Co-authored-by: j2rong4cn <j2rong@qq.com>
Co-authored-by: KirCute <kircute@foxmail.com>

* feat(openlist): add PassIPToUpsteam to driver (OpenListTeam#1498)

* fix(share): remove share when user delete (OpenListTeam#1493)

* fix(aliyundrive_open): use safe disk usage calculation (OpenListTeam#1510)

* feat(command): add --config flag to set custom config path (OpenListTeam#1479)

* fix(alias): nil panic in `ResolveLinkCacheMode` (OpenListTeam#1527)

* fix(alias): Check the driver path during initialization

* fix(alias): Don't check the driver path during initialization anymore.

* feat(123): allow modification of the platform header (OpenListTeam#1542)

* feat(drivers/123): Allow modification of the platform field

* feat(drivers/123): Set login platfrom as web

* fix(drivers/123): update platform field help value

* feat(strm): strm local file (OpenListTeam#1127)

* feat(strm): strm local file

* feat: 代码优化

* feat: 访问被strm挂载路径时也更新

* fix: 路径最后带/判断缺失

* fix: 路径最后带/判断缺失

* refactor

* refactor

* fix: close seekable-stream in `generateStrm`

* refactor: lazy create local file

* 优化路径判断

---------

Co-authored-by: KirCute <kircute@foxmail.com>

* feat(thunder): allow setting space (OpenListTeam#1219)

allows access to files on remote devices via Thunder's tunneling service.

* feat(net): support proxy configuration via config file (OpenListTeam#1359)

* support proxy

* debug

* debug2

* del debug

* add proxy configuration with env var fallback

* comments to en

* refactor(env): fallback env

---------

Co-authored-by: jyxjjj <773933146@qq.com>

* fix(google_driver): fix google link file display size (OpenListTeam#1335)

* fix file link display size

* fix performance and field

* cn to en notes

---------

Co-authored-by: ShenLin <773933146@qq.com>

* chore(strm): Built-in file types support modification (OpenListTeam#1483)

* fix(baidu_netdisk): support resuming uploads when an error occurs (OpenListTeam#1279)

support resuming uploads when an error occurs

* feat(stream): enhance GetRangeReaderFromLink rate limiting (OpenListTeam#1528)

* feat(stream): enhance GetRangeReaderFromLink rate limiting

* refactor(stream): update GetRangeReaderFromMFile to return *model.FileRangeReader

* refactor(stream): simplify context error handling in RateLimitReader, RateLimitWriter, and RateLimitFile

* refactor(net): replace custom LimitedReadCloser with readers.NewLimitedReadCloser

* fix(model): update Link.ContentLength JSON tag for correct serialization

* docs(model): add clarification to FileRangeReader usage comment

* fix(backup-restore): add shares (OpenListTeam#1500)

* perf(stream): optimize CacheFullAndWriter for better memory management (OpenListTeam#1584)

* perf(stream): optimize CacheFullAndWriter for better memory management

* fix(stream): ensure proper seek handling in CacheFullAndWriter for improved data integrity

* fix(baidu_netdisk): improve upload experience (OpenListTeam#1562)

* fix(baidu_netdisk): improve upload experience

* fix(typo): URL should be uppercase, apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: ShenLin <773933146@qq.com>

* fix(typo): URL should be uppercase, apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: ShenLin <773933146@qq.com>

* fix(baidu_netdisk): use "UploadAPI" as a fallback when using dynamic upload api

* fix(baidu_netdisk): all uploads share the same upload url cache

* fix(drivers/baidu_netdisk): defer uploadUrlMu unlock

* update driver.go to main

---------

Signed-off-by: ShenLin <773933146@qq.com>
Signed-off-by: jenfonro <799170122@qq.com>
Co-authored-by: ShenLin <773933146@qq.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: jenfonro <799170122@qq.com>

* feat(github_release): support Source code (zip/tar.gz) (OpenListTeam#1581)

* support Github Release Source code (zip/tar.gz)

* fix TarballUrl and ZipballUrl

* fix show source code by allversion

---------

Co-authored-by: nibazshab <44338441+nibazshab@users.noreply.github.com>

* fix(189): disk-usage unmarshal failed when used capacity overflow (OpenListTeam#1577)

* refactor(stream): simplify code (OpenListTeam#1590)

* refactor(stream): simplify Close method and update SeekableStream to use RangeReader interface

* refactor(stream):  improve RangeRead comments for clarity

* fix(strm): non-specified type generates strm (OpenListTeam#1585)

* fix(strm): non-specified type generates strm

* fix(strm): only insert to strmTrie if SaveStrmToLocal is enabled

* fix(strm): update suffix handling in convert2strmObjs function

* fix(strm): refactor generateStrm to use range reader

---------

Co-authored-by: j2rong4cn <j2rong@qq.com>

* feat(onedrive): support frontend direct upload (OpenListTeam#1532)

* OneDrive添加直连上传

* refactor

* fix: duplicate root path join

---------

Co-authored-by: KirCute <951206789@qq.com>

* refactor(fs): implement immediate retry within task execution cycle (OpenListTeam#1575)

* fix(baidu_netdisk): Fix Baidu Netdisk resume uploads sticking to the same upload host (OpenListTeam#1609)

Fix Baidu Netdisk resume uploads sticking to the same upload host

* Initial plan

* Initial plan for qihoo360 driver implementation

Co-authored-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* Implement qihoo360 driver with basic file operations

Co-authored-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* Remove OpenList binary from repository

Co-authored-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* Fix security issue: remove sensitive data from debug logs

Co-authored-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* Clean up: remove binary and update gitignore

Co-authored-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* fix(terabox): wrong return code used (OpenListTeam#1547)

fix(terabox): rename, delete, copy operations sometimes failed

Signed-off-by: yuyamionini <46483865+yuyamionini@users.noreply.github.com>

* fix(archive/zip): user specific encoding for non-EFS zips (OpenListTeam#1599)

* fix(archive/zip): user specific encoding for non-EFS zips

* fix(stream): simplify head cache initialization and improve reader retrieval logic

* fix: support multipart zips (.z01)

* chore(deps): update github.com/KirCute/zip to v1.0.1

---------

Co-authored-by: j2rong4cn <j2rong@qq.com>
Co-authored-by: Pikachu Ren <40362270+PIKACHUIM@users.noreply.github.com>

* feat(doubao): Add rate limiting (OpenListTeam#1618)

* chore(issue templates): require logs (OpenListTeam#1626)

* Fix infinite loop in authentication flow

Move auth check inside method validation to prevent infinite recursion when getAuth() calls request(). Now request() only checks authentication when method is not empty, breaking the circular dependency.

Co-authored-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* feat(s3): support frontend direct upload (OpenListTeam#1631)

* feat(s3): support frontend direct upload

* feat(s3): support custom direct upload host

* fix: apply suggestions of Copilot

* fix(link): correct link cache mode bitwise comparison (OpenListTeam#1635)

* fix(link): correct link cache mode bitwise comparison

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* refactor(link): use explicit flag equality for link cache mode bitmask checks

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

---------

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* feat(upload): add optional system file filtering for uploads (OpenListTeam#1634)

* fix(driver/123): initialize Platform field (OpenListTeam#1644)

* fix(driver/123): initialization the Platform field

Signed-off-by: MoYan <1561515308@qq.com>

* Fix formatting of Platform field in Pan123

Signed-off-by: MoYan <1561515308@qq.com>

---------

Signed-off-by: MoYan <1561515308@qq.com>

* fix(openlist_driver): ensure UA is correctly propagated (OpenListTeam#1679)

* feat(fs): support manually trigger objs update hook (OpenListTeam#1620)

* feat(fs): support manually trigger objs update hook

* fix: support driver internal copy & move case

* fix

* fix: apply suggestions of Copilot

* fix(misskey): folderId format validation and root directory handling (OpenListTeam#1647)

fix(misskey): Fix folderId format validation and root directory handling

* fix(strm): fix the name and type issue (OpenListTeam#1630)

* fix(strm): fix the name and type issue

* fix(strm): update version

* feat(strm): custom path prefixes (OpenListTeam#1697)

fix(strm): custom path prefixes

Signed-off-by: ShenLin <773933146@qq.com>
Co-authored-by: ShenLin <773933146@qq.com>

* feat(baidu_netdisk): Add shard upload timeout setting (OpenListTeam#1682)

add timeout

* fix(local): assign non-CoW copy requests to the task module (OpenListTeam#1669)

* fix(local): assign non-CoW copy requests to the task module

* fix build

* fix cross device

* feat(fs): Add skipExisting option to move and copy, merge option to copy (OpenListTeam#1556)

* fix(fs): Add skipExisting option to move and copy.

* feat(fs): Add merge option to copy.

* feat(fs): Code smell.

* feat(fs): Code smell.

* feat(archive): support non-overwrite decompress (OpenListTeam#1701)

* feat(search): Add task queue for Meilisearch to prevent race conditions (OpenListTeam#1423)

* Add task queue for Meilisearch to prevent race conditions

- Implement TaskQueueManager for async index operations
- Queue update tasks and process them in batches every 30 seconds
- Check pending task status before executing new operations
- Optimize batch indexing and deletion logic
- Fix type assertion bug in buildSearchDocumentFromResults

* fix(search): re-enqueue skipped tasks to prevent task loss

When tasks are skipped due to pending dependencies, they are now
re-enqueued if not already in queue. This prevents task loss while
avoiding overwriting newer snapshots for the same parent.

* fix(copilot-comment): Invoke Stop() & err of SliceConvert

---------

Co-authored-by: ImoutoHeaven <noreply@imoutoheaven.org>
Co-authored-by: jyxjjj <773933146@qq.com>

* fix(search): fix duplicated variable init (OpenListTeam#1703)

* chore(archive): fix struct literal uses unkeyed fields (OpenListTeam#1704)

* chore(pkg/aria2): simplify context cancellation handling in RPC calls (OpenListTeam#1705)

* fix(pkg/aria2): use pointer receivers for Call methods (OpenListTeam#1706)

* feat(strm): keep local download file (OpenListTeam#1707)

* fix(onedrive_shareurl): Reduce temporary file errors (OpenListTeam#1686)

* fix onedrive_shareurl

* .

* chore(strm): avoid generating empty folders (OpenListTeam#1720)

chore(strm): empty folders are not generated locally

* refactor:  improve upload handling (OpenListTeam#1455)

* fix(quark): refactor upPart to use http.NewRequest

* fix(quark): improved upload handling

* fix(quark_open): improved upload handling

* fix: add retry context to multiple upload functions

* fix: optimize hash calculation in multipart upload to avoid blocking

* fix: update error handling in lifecycle functions for better clarity

* fix: update upload progress calculation to improve accuracy

* fix: simplify error handling in lifecycle functions for improved readability

* fix: remove unnecessary mutex for part uploads to simplify code

* fix(stream): simplify file handling in NewStreamSectionReader and improve error messages

* fix(terabox): optimize chunk count calculation in Put method

* perf(chaoxing): 表单上传文件0拷贝

* fix(cnb_releases): improve file upload progress tracking

* fix(baidu_netdisk): improve upload handling

* fix(upload): optimize buffer initialization for file uploads

* fix(baidu_netdisk): add retry condition to skip ErrUploadIDExpired in upload loop

* fix(drivers/crypt): remove hard dependency on RemotePath (OpenListTeam#1713)

* fix(mediafire): enable automatic session token acquisition and fix gzip parsing (OpenListTeam#1661)

* fix(mediafire): enable automatic session token acquisition and fix gzip parsing

- Fix Init() method to allow automatic session token retrieval from cookie
- Change SessionToken from required to optional in configuration
- Add proper gzip decompression support for API responses
- Improve error handling for session token acquisition failures
- Update help text to clarify authentication requirements

Resolves initialization failure and JSON parsing errors when session token
can be automatically obtained from browser cookie.

* fix(mediafire): ensure driver files end with newline

* chore: gofmt drivers/mediafire/*.go

* refactor(op): remove automatic Path assignment (OpenListTeam#1734)

* refactor: 移除 ObjResp 中的 Id 和 Path 字段

* 移除op.List的自动设置Path
Path和Id只在驱动内使用,不应由op.List设置Path

* cnb_releases:将 Addition 结构体中的 RootPath 字段为 RootID
当List方法加载二级目录时,若使用的是Id,应对使用driver.RootID

* doubao_share: 添加潜在bug注释

* 添加 GetRootPath 方法到多个驱动

* refactor!(userAgent): merge most userAgent into base (OpenListTeam#1722)

refactor!(userAgent): merge all userAgent into base

1. change var to const
2. remove duplicated ua definetion after original Resty R
3. upgrade Chrome and OS versions

* feat(fs): Support customizing the cache time for a specific path (OpenListTeam#1533)

* feat(fs): Support customizing the cache time for a specific path

* feat(fs): Get the cache rule for driver information.

* feat(fs): Support globbing.

* feat(fs): Add log.

---------

Signed-off-by: ShenLin <773933146@qq.com>
Co-authored-by: ShenLin <773933146@qq.com>

* feat(driver): add AList v3 (OpenListTeam#1721)

* feat(driver/openlist): compatible with AList v3

* Revert "feat(driver/openlist): compatible with AList v3"

This reverts commit 90f3f80.

* feat(driver): add AList v3

* Revert "feat(patch): add migration from Alist V3 driver to OpenList (OpenListTeam#919)"

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

---------

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>
Co-authored-by: MadDogOwner <xiaoran@xrgzs.top>

* feat(utils): add support for ignoring '@eadir' system files (OpenListTeam#1779)

* fix(task): tasks keep being cancelled (OpenListTeam#1745)

* fix_cancel

* update(go.mod): update tache version

* tache v0.2.2

---------

Co-authored-by: j2rong4cn <j2rong@qq.com>

* feat(model): add object mask support and enhance cache/task handling (OpenListTeam#1743)

* fix(ilanzou): parse vip size (OpenListTeam#1792)

* fix(halalcloud_open): halal-cloud upload issues (OpenListTeam#1800)

fix halal-cloud upload issues

* refactor(bootstrap): move booting logic to bootstrap package (OpenListTeam#1773)

* refactor(bootstrap): move booting to bootstrap package

* chore(log): reduce level of some callings of `utils.Log.Fatal`

* fix(s3): no shutdown after SIGTERM received

* fix: add handle hook

* fix(openlist): disable status check for openlist driver (OpenListTeam#1757)

* fix(openlist): disable status check to avoid network stability issues

* fix(alist_v3): disable status check to avoid network stability issues

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

---------

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* feat(ldap): support webdav, ftp and sftp login (OpenListTeam#1746)

* feat(ldap): support webdav, ftp and sftp login

* fix: apply suggestions of Copilot

* feat(ldap) support ftp, sftp and webdav auto-register

* feat(drivers/139): user authentication and file batch operations (OpenListTeam#1534)

* feat(139): Enhance 139 driver with password login and root path handling

- Added support for password-based login in the 139 driver.
- Introduced RootPath field to store the root directory path.
- Updated Init method to handle family and group types more effectively.
- Implemented new methods for handling file operations in family and group contexts.
- Enhanced error handling and logging for better debugging.
- Added new request and response structures for batch operations and document modifications.
- Improved encryption and decryption methods for secure communication.

* Update drivers/139/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>

* Update drivers/139/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>

* Update drivers/139/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>

* Update drivers/139/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>

* Update drivers/139/util.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>

---------

Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(139): disk-usage unmarshal failed when used capacity overflow (OpenListTeam#1718)

Co-authored-by: Pikachu Ren <40362270+PIKACHUIM@users.noreply.github.com>

* feat(driver): add personal / business wps drive support (OpenListTeam#1802)

* feat(driver): add wps drive support

* feat(driver): add wps drive support

* fix(wps): update personal mode string to English

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(wps): remove trailing slash from drive origin URL

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(wps): correct order of options in mode selection

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(wps): enable local sort and upload overwrite

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(wps): resolve put bugs, fix file op problems and optimize list logic

- Fix uploading bugs. Support all uploading methods based on 8825.85d3c864.js
- Fix issues in delete/copy/move while opearting big folders.
- Use cache to optimize performance of list, especially in a deep path.

---------

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>
Co-authored-by: MadDogOwner <xiaoran@xrgzs.top>

* feat(cloudreve_v4): add ks3 support (OpenListTeam#1828)

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(strm): support generate strm with sign (OpenListTeam#1832)

* feat(115_open): support custom pagesize (OpenListTeam#1822)

* docs: add VPS.Town as sponsor to all README (OpenListTeam#1842)

Co-authored-by: XZB-1248 <i@1248.ink>

* fix(s3): incorrect copy key with plus sign (OpenListTeam#1820)

* docs: update README for zh-CN (OpenListTeam#1844)

* fix(weiyun): update sdk and support getDetails (OpenListTeam#1845)

* feat(strm): add save local mode (OpenListTeam#1814)

* feat(strm): add KeepSameNameOnly logic

* chore(strm): skip update strm file when keepLocalDownloadFile

* feat(strm): add save local mode

* docs(readme): add demo site (OpenListTeam#1850)

Last Sync: 2025-12-22 12:39

* refactor(bootstrap): fix OpenList-Mobile compile failed (OpenListTeam#1857)

* feat(alias): support load balance (OpenListTeam#1767)

* feat(alias): support load balance

* feat(alias): support storage match for load balance

* feat(patch): add alias addition upgrade patch

* fix bugs

* fix(op/balance): optimize compatibility

* chore: change default read conflict policy

* feat(alias): refactor Alias initialization and enhance path handling

* feat(alias): enhance object masking and add support for operation restrictions

* feat(alias): enhance object masking

* feat(fs): add permission checks

* improve parsing

* update object masks

* feat(fs): enhance virtual file handling

* feat(storage): enhance virtual file retrieval and path handling

* refactor(alias): rename path handling functions for clarity and consistency

* fix(alias): update path handling in Other method to use balanced path

* fix bug

* feat(alias): add file size validation

* feat(alias): add hash consistency check

* 移除哈希合并,

* fix(alias): wrong behavior for all_strict/deterministic_or_all

* Revert "fix(alias): wrong behavior for all_strict/deterministic_or_all"

This reverts commit f001f2d.

* fix(alias): wrong behavior for all_strict/deterministic_or_all

* feat(alias): support part-based read load balance

* fix(alias): list panic when leak conflict path

* fix(alias): remove Other load balance

* fix(alias): 修复 Link 方法中 resultLink 的返回类型和内容复制问题

* fix(alias): 更好的下载并发?

* chore(alias): all tips

* fix(alias): moving paths mismatch

---------

Co-authored-by: j2rong4cn <j2rong@qq.com>
Co-authored-by: ShenLin <773933146@qq.com>

* fix(s3): use current time as default modified time (OpenListTeam#1860)

* fix(driver): fix file copy failure to 123pan due to incorrect etag (OpenListTeam#1874)

* ci(lang): sync only new fields (OpenListTeam#1881)

* fix(123_open): infinite recursive call (OpenListTeam#1854)

fix(123_open): token refresh logic

Fix token handling logic to avoid deadlock. Token method took reference of Alist's implementation.

* feat(qihoo360): fix bugs made by copliot

* fix(doubao_share): use new download info (OpenListTeam#1890)

fix(doubao_share): update file URL retrieval to use new download info structure

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* feat(qihoo360): implement file upload functionality and enhance request handling

* fix(qihoo360): update user-agent

* feat(qihoo360): add User-Agent header for Sync.getVerifiedDownLoadUrl request

* feat(drivers/mega): support getting disk usage (OpenListTeam#1903)

* feat(drivers/mega): support getting disk usage

* fix

* feat(qihoo360): implement GetDetails and user detail retrieval functions

* feat(drivers/mega): support permanently deleting files (OpenListTeam#1913)

* feat(123pan): add offline download (OpenListTeam#1911)

* feat(123网盘): 添加123网盘离线下载功能

- 新增123网盘离线下载实现
- 添加相关API接口和常量配置
- 在路由和工具集中集成123网盘支持

* refactor(offline_download): 重构123网盘离线下载状态处理和类型定义

- 将离线下载相关类型定义从util.go移至types.go
- 更新状态获取api

* 移除了备选方案(/offline_download/task/status)

* feat(qihoo360): enhance GetDetails function and update UserDetailResp structure

* chore(strm): remove redundant param (OpenListTeam#1929)

* feat(drivers): support getting disk usage of some drivers (OpenListTeam#1905)

* feat(drivers): support getting disk usage of some drivers

* feat(drivers/degoo): implement GetDetails

* fix(fs/storage-details): fill used space rather than free space

* fix mega

* fix bsize type

* fix(cloudreve): Manually set path to avoid empty path (OpenListTeam#1933)

* fix(drivers/alist_v3): failed to unmarshal MeResp (OpenListTeam#1931)

* feat(drivers/webdav): add support for 302 redirects (OpenListTeam#1952)

* Remove the `OnlyProxy` restriction and obtain the redirected link to support 302

* Add `driver.Config` `PreferProxy` to recommend user to enable the proxy by default

---------

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(fs): panic when failed to get storage details (OpenListTeam#1964)

* chore(.github): update issue templates [no ci] (OpenListTeam#1976)

chore(.github): update issue templates

* fix(drivers/ftp): failed to get objs (OpenListTeam#1948)

fix(drivers/ftp): failed get objs

* feat(drivers/cloudreve_v4): implement Getter interface (OpenListTeam#1937)

feat(cloudreve_v4): implement Getter interface

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(drivers/github): failed to get objs (OpenListTeam#1915)

fix(drivers/github): failed get objs

* fix(drivers/strm): delete extra local directories in sync mode (OpenListTeam#1980)

* fix(ci): change unchecked regex (OpenListTeam#1993)

fix(ci/issue): change unchecked regex

Signed-off-by: KirCute <951206789@qq.com>

* feat(drivers): add autoindex driver (OpenListTeam#1978)

* feat(drivers): add autoindex driver

* fix

* add NoUpload

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* add TestParseSize

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* go mod tidy

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* use base.RestyClient

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix: support evaluate size and modified time

* fix apache

* perf

* feat: support ignore size and modified time

* rename driver

---------

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>
Co-authored-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(fs): handle non-existent destination directory in file transfer (OpenListTeam#1898)

* fix(FileTransferTask): skip copying if destination directory does not exist

* pass only object not found error

---------

Co-authored-by: cyk <dr_arc@163.com>
Co-authored-by: KirCute <951206789@qq.com>

* feat(drivers/cloudreve): implement GetDetails (OpenListTeam#1960)

* fix(driver/quark_uc): Fix display of non-compliant filenames (OpenListTeam#2000)

* fix(webdav/move): fix source file still exist after moving file by webdav (OpenListTeam#1979)

* perf(baidu_netdisk): reduce the number of file listing requests (OpenListTeam#2016)

* 本优化减少了百度网盘驱动下文件列表的请求次数,能加快文件浏览速度。此前只要文件夹下有至少一个文件,都会至少发出2次列表请求。

Signed-off-by: hcrgm <hcrgm@qq.com>

* fix(drivers/seafile): object not found when RootFolderPath != "/" (OpenListTeam#2010)

* fix(driver/seafile): object not found when RootFolderPath != "/"

* refactor(seafile): restructure Seafile driver for improved library handling and error management

* add IsDir method to LibraryInfo type

* improve initialization

* add repoID to RepoItemResp and update List method to set repoID

---------

Co-authored-by: Khoray <hhkorm@gmail.com>
Co-authored-by: j2rong4cn <j2rong@qq.com>

* fix(drivers/alias): default sort & substitute link (OpenListTeam#1917)

* fix(drivers/alias): default sort & substitute link

* fix

* fix

* fix(drivers/cloudreve_v4): add IsFolder attribute to Getter response (OpenListTeam#2035)

* fix(drivers/cloudreve_v4): add IsFolder attribute to Getter response

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* refactor(drivers/cloudreve_v4): implement File.fileToObject method

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(drivers/cloudreve_v4): implement 404 not found for getter

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

---------

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(drivers/quark): apply html escaping in quark (OpenListTeam#2046)

* fix(drivers/quark): apply html escaping in quark

* fix(api/remove): add validation for empty items in delete file list (OpenListTeam#1617)

* fix(FsRemove): add validation for empty items in delete file list

If Req.Names contains an empty string item, the whole directory will be removed. As a result we need add a simple guard to prevent such cases.

Signed-off-by: huyuantao <huyuantao@ultrarisc.com>

* fix(FsRemove): enhance validation to prevent unintended directory deletion

1. Use `utils.FixAndCleanPath` to correctly identify and block invalid names.
2. Change error handling from `return` to `continue`.

Signed-off-by: huyuantao <huyuantao@ultrarisc.com>

---------

Signed-off-by: huyuantao <huyuantao@ultrarisc.com>
Co-authored-by: Pikachu Ren <40362270+PIKACHUIM@users.noreply.github.com>

* Merge commit from fork

Co-authored-by: KirCute <951206789@qq.com>

* Merge commit from fork

Co-authored-by: KirCute <951206789@qq.com>

* fix(drivers/teldrive): enhance file listing and upload functionality with pagination and random chunk naming (OpenListTeam#2034)

* fix(drivers/teldrive): enhance file listing and upload functionality with pagination and random chunk naming

* fix(drivers/teldrive): optimize file listing by removing unnecessary mutex and restructuring data handling

* Update drivers/teldrive/meta.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Chaloemchai <chaloemchai.yy@gmail.com>

---------

Signed-off-by: Chaloemchai <chaloemchai.yy@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(115_share): adjust 115 share driver for official API update (OpenListTeam#2068)

* fix(115_share): add user agent support and update driver dependency

* fix(115): fix download error

* feat: add thumbnail support for 115 driver and 115 share

- Add Thumb() method to FileObj in 115 driver to return thumbnail URL
- Add ThumbURL field to FileObj struct in 115 share utility
- Update 115driver dependency from v1.2.2 to v1.2.3 to support thumbnail functionality
- Implement Thumb() method for 115 share FileObj to return thumbnail URL

* chore(ci): add breaking change guideline to PR title check (OpenListTeam#2087)

* feat(ci): add PR title validation for breaking changes

Updated regex to allow '!' for breaking changes in PR titles.

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* chore(pr): Update PR template

Add bilingual instructions for PR title formatting.

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

---------

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* feat(drivers/123open): support sha1 reuse api (OpenListTeam#2089)

* feat(drivers/123open): support sha1 reuse api

* fix(drivers/123open): fix typos

* fix(deps): update go4.org digest to a507140 (OpenListTeam#2095)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(‎drivers/quark_uc_tv) : Update error code judgment (OpenListTeam#2080)

* fix error code

* add ErrorInfo check

* chore(typo): fix typo in UpdateFileReq field name (OpenListTeam#2133)

Fix typo in UpdateFileReq field name

ref: OpenListTeam/115-sdk-go#3

Signed-off-by: LXY <767763591@qq.com>

* fix(driver/wps): fetch all files via multiple API invocations (OpenListTeam#2139)

fix(driver/wps): wps list all files in one request

* feat(security): add SECURITY.md (OpenListTeam#2147)

[skip ci]

Add SECURITY.md

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* chore(handles/auth): improve error response (OpenListTeam#2148)

* chore(handles/auth): improve error response

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* Apply suggestion from @xrgzs

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

---------

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* feat(drivers/thunder*): implement GetDetails (OpenListTeam#2113)

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* Fix critical auth bug: treat access_token_expire as absolute timestamp

The API returns access_token_expire as an absolute Unix timestamp, not a duration. The old code was adding it to current time, causing tokens to "expire" in year 2082. This meant tokens appeared valid even after actual expiration (1 hour), causing all API calls to fail after the program ran for some time.

Also added retry limit protection to prevent infinite recursion in error handling.

Co-authored-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

---------

Signed-off-by: zzzhr1990 <zzzhr@hotmail.com>
Signed-off-by: D@' 3z K!7 <99719341+Da3zKi7@users.noreply.github.com>
Signed-off-by: ShenLin <773933146@qq.com>
Signed-off-by: jenfonro <799170122@qq.com>
Signed-off-by: yuyamionini <46483865+yuyamionini@users.noreply.github.com>
Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>
Signed-off-by: MoYan <1561515308@qq.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>
Signed-off-by: KirCute <951206789@qq.com>
Signed-off-by: hcrgm <hcrgm@qq.com>
Signed-off-by: huyuantao <huyuantao@ultrarisc.com>
Signed-off-by: Chaloemchai <chaloemchai.yy@gmail.com>
Signed-off-by: LXY <767763591@qq.com>
Co-authored-by: NewbieOrange <NewbieOrange@users.noreply.github.com>
Co-authored-by: KirCute <951206789@qq.com>
Co-authored-by: ShenLin <773933146@qq.com>
Co-authored-by: zzzhr1990 <zzzhr@hotmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Tursom K. Ulefits <33368546+tursom@users.noreply.github.com>
Co-authored-by: jenfonro <799170122@qq.com>
Co-authored-by: j2rong4cn <j2rong@qq.com>
Co-authored-by: ILoveScratch <ilovescratch@foxmail.com>
Co-authored-by: KirCute <kircute@foxmail.com>
Co-authored-by: jerrita <je5r1ta@icloud.com>
Co-authored-by: D@' 3z K!7 <99719341+Da3zKi7@users.noreply.github.com>
Co-authored-by: MadDogOwner <xiaoran@xrgzs.top>
Co-authored-by: walloo <51254954+varg1714@users.noreply.github.com>
Co-authored-by: MoYan <1561515308@qq.com>
Co-authored-by: Seven <53081179+Seven66677731@users.noreply.github.com>
Co-authored-by: ex-hentai <96158157+ex-hentai@users.noreply.github.com>
Co-authored-by: j2rong4cn <36783515+j2rong4cn@users.noreply.github.com>
Co-authored-by: hcrgm <hcrgm@qq.com>
Co-authored-by: nibazshab <44338441+nibazshab@users.noreply.github.com>
Co-authored-by: ASLant <77436463+Y-ASLant@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Wodlie <86234536+Wodlie@users.noreply.github.com>
Co-authored-by: yuyamionini <46483865+yuyamionini@users.noreply.github.com>
Co-authored-by: Pikachu Ren <40362270+PIKACHUIM@users.noreply.github.com>
Co-authored-by: VXTLS <187420201+vxtls@users.noreply.github.com>
Co-authored-by: ImoutoHeaven <github_main@imoutoheaven.org>
Co-authored-by: ImoutoHeaven <noreply@imoutoheaven.org>
Co-authored-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Co-authored-by: wongz <wongz@users.noreply.github.com>
Co-authored-by: Mako (XSpy) <127767602+x-spy@users.noreply.github.com>
Co-authored-by: hshpy <hshpy.pengyu@gmail.com>
Co-authored-by: XZB-1248 <28593573+XZB-1248@users.noreply.github.com>
Co-authored-by: XZB-1248 <i@1248.ink>
Co-authored-by: TwoOnefour <lys214412@gmail.com>
Co-authored-by: foxxorcat <95907542+foxxorcat@users.noreply.github.com>
Co-authored-by: Seven <53081179+sevxn007@users.noreply.github.com>
Co-authored-by: 绎泽 <yize@tencent.to>
Co-authored-by: 我怎么就不是一只猫呢? <26274059+dezhishen@users.noreply.github.com>
Co-authored-by: Tron <ironboxplus@gmail.com>
Co-authored-by: Edward <73746306+WangEdward@users.noreply.github.com>
Co-authored-by: mcxiedidi <113833419+mcxiedidi@users.noreply.github.com>
Co-authored-by: Ljcbaby <46277145+ljcbaby@users.noreply.github.com>
Co-authored-by: cyk <dr_arc@163.com>
Co-authored-by: Cp0204 <Cp0204@qq.com>
Co-authored-by: mkitsdts <136291922+mkitsdts@users.noreply.github.com>
Co-authored-by: Rui Huang <1251433731@qq.com>
Co-authored-by: Khoray <hhkorm@gmail.com>
Co-authored-by: Hu Yuantao <130338111+datao2001@users.noreply.github.com>
Co-authored-by: Chaloemchai <chaloemchai.yy@gmail.com>
Co-authored-by: Shelton Zhu <498220739@qq.com>
Co-authored-by: gdm257 <gdm@disroot.org>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: LXY <767763591@qq.com>
Wodlie added a commit to Wodlie/openlist_123 that referenced this pull request Feb 28, 2026
* fix(drivers): free space underflow if used larger than total space (OpenListTeam#1407)

* fix(189pc/189tv): `request` panic when login failed (OpenListTeam#1428)

* fix(ilanzou): wrong total capacity (OpenListTeam#1433)

* feat(pikpak): support disk usage (OpenListTeam#1426)

* feat(pikpak): support disk usage

* fix(alias): cannot list with details

* refactor: rename `NewDiskUsageFromUsedAndTotal`

* fix(disk-usage): get details of storages that is not initialized

* feat(offline_download): add 123 open (OpenListTeam#1427)

* feat(http3|quic): add http3|quic support (OpenListTeam#1466)

* feat(http3|quic): add http3|quic support

* revert(ai): fix ai error

* fix(shutdown): shutdown was using close

* feat(http3|quic): add config if needs h3

* feat(http3|quic): add Alt-Svc to expose h3

* chore(frontend): optimize user operations (OpenListTeam#1449)

* feat(drivers): add halalcloud_open driver (OpenListTeam#1430)

* 新增清真云Open驱动,支持最新的轻量SDK

* Change Go version in go.mod

Downgrade Go version from 1.24.2 to 1.23.4



* Apply suggestions from code review

* Removed unnecessary comments
* Downgraded the Go version to 1.23.4.
* Not sure whether FileStream supports concurrent read and write operations, so currently using single-threaded upload to ensure safety.




* feat(halalcloud_open): support disk usage

* Set useSingleUpload to true for upload safety

Not sure whether FileStream supports concurrent read and write operations, so currently using single-threaded upload to ensure safety.



* Update meta.go

Change required for RefreshToken, If using a personal API approach, the RefreshToken is not required.



* remove debug logs

* bump halalcloud SDK version

* fix unnecessary params

* Update drivers/halalcloud_open/driver_init.go




* Fixed spelling errors; changed hardcoded retry parameters to constants.

* remove pointer in get link function in utils.go

---------





* feat(http3|quic): Set Alt-Svc header only for HTTPS requests (OpenListTeam#1469)

* feat(local): move deleted files to corresponding locations (OpenListTeam#1281)

* fix(fs):fix retry task after restart (OpenListTeam#1467)

* fix retry task after restart

* fix: initialize SrcStorage and DstStorage in tasks to prevent nil pointer dereference

* feat: implement storage load signal mechanism for improved synchronization

* fix:  update StoragesLoaded logic

* refactor: reorganize storage loading logic and improve synchronization handling

---------



* feat(cache): improve cache management (OpenListTeam#1339)

* feat(cache): improve cache management

* feat(disk-usage): add cache

* feat(disk-usage): add refresh

* fix(disk-usage): cache with ttl

* feat(cache): implement KeyedCache and TypedCache for improved caching mechanism

* fix(copy): update object retrieval to use Get instead of GetUnwrap

* refactor(cache): simplify DirectoryCache structure and improve object management

* fix(cache): correct cache entry initialization and key deletion logic in TypedCache

* refactor(driver): remove GetObjInfo interface and simplify Link function logic
https://github.com/OpenListTeam/OpenList/pull/888/files#r2430925783

* fix(link): optimize link retrieval and caching logic

* refactor(cache): consolidate cache management and improve directory cache handling

* fix(cache): add cache control based on storage configuration in List function

* .

* refactor: replace fmt.Sprintf with strconv for integer conversions

* refactor(cache): enhance cache entry management with Expirable interface

* fix(cache): improve link reference acquisition logic to handle expiration

* refactor: replace OnlyLinkMFile with NoLinkSF in driver configurations and logic

* refactor(link): enhance link caching logic with dynamic type keys based on IP and User-Agent

* feat(drivers): add LinkCacheType to driver configurations for enhanced caching

* refactor(cache): streamline directory object management in cache operations

* refactor(cache): remove unnecessary 'dirty' field from CacheEntry structure

* refactor(cache): replace 'dirty' field with bitwise flags

* refactor(io): 调高SyncClosers.AcquireReference的优先级

* refactor(link): 优化链接获取逻辑,增加重

* refactor(link): 添加RequireReference字段以增强链接管理

* refactor(link): 移除MFile字段,改用RangeReader

* refactor: 移除不必要的NoLinkSF字段

* refactor(cache): 修改目录缓存的脏标志定义和更新逻辑

* feat(cache): add expiration gc

---------





* feat(onedrive): add ref support (OpenListTeam#1435)

* feat(onedrive): add ref support

* fix(onedrive): remove redundant token assignment from reference

---------



* feat(drivers): add ProtonDrive driver (OpenListTeam#1368)

* feat(drivers): add ProtonDrive driver

- Implement complete ProtonDrive storage driver with end-to-end encryption support
- Add authentication via username/password with credential caching and reusable login
- Support all core operations: List, Link, Put, Copy, Move, Remove, Rename, MakeDir
- Include encrypted file operations with PGP key management and node passphrase handling
- Add temporary HTTP server for secure file downloads with range request support
- Support media streaming using temp server range requests
- Implement progress tracking for uploads and downloads
- Support directory operations with circular move detection
- Add proper error handling and panic recovery for external library integration
- Support buffered upload for specific sequential and encrypted, but optimized transmission.

* Update drivers/proton_drive/util.go




* chore

* feat(drivers): enhance ProtonDrive temp server

- Implement separate listen and public port configuration for complex network deployments
- Add intelligent port detection with 8080 as preferred default, fallback to auto-assignment
- Support Container/NAT/VM environments through configurable external host and port mapping
- Add port availability validation with graceful fallback to listen port
- Enable users to specify external domain/IP for client connections (e.g., 192.168.1.5)
- Follow FTP server configuration patterns for network flexibility
- Maintain localhost development simplicity while supporting production deployments

* feat(proton_drive): refactor directory handling and improve link retrieval

* fix(proton_drive): add NoLinkURL configuration option

* fix(proton_drive): update file size retrieval and enforce TwoFACode requirement

* feat(proton_drive): add expiration to link response

* fix(proton_drive): handle empty RootFolderID in Init method

* fix(proton_drive): update credential handling to use email and reusable login

* fix(proton_drive): update credential handling to use reusableCredential variable

* fix(proton_drive): update DirectRename to use GetLink for source object retrieval

* fix(proton_drive): refactor uploadFile to return model.Obj and handle errors correctly

* fix(proton_drive): refactor DirectMove to use getLink for source retrieval and simplify destination handling

* fix(proton_drive): simplify Copy method by removing temporary file creation and directly using FileStream

* refactor(proton_drive): remove unused temporary server and related code

* chore

* fix(proton_drive): fix driver

- Handle fresh login if ProtonDrive rejects AccessToken or RefreshToken
- Update stored credentials

* fix(proton_drive): simplify reusable login handling in Init method

* fix(proton_drive): fix driver

- Update stored credentials, now is failing

* feat(proton_drive): improve authentication handling and remove unused variables

* fix(proton_drive): fix driver

- Update stored credentials, now is failing

* fix(proton_drive): improve authentication handling

* refactor(proton_drive): move client initialization to initClient method

* feat(proton_drive): move addrs and addrKRs

* feat(proton_drive): optimize upload threads

- Change ConcurrentBlockUploadCount to user configured upload threads number
- Comment ConcurrentFileCryptoCount, default is runtime.GOMAXPROCS(0)

---------







* feat(openlist): add PassIPToUpsteam to driver (OpenListTeam#1498)

* fix(share): remove share when user delete (OpenListTeam#1493)

* fix(aliyundrive_open): use safe disk usage calculation (OpenListTeam#1510)

* feat(command): add --config flag to set custom config path (OpenListTeam#1479)

* fix(alias): nil panic in `ResolveLinkCacheMode` (OpenListTeam#1527)

* fix(alias): Check the driver path during initialization

* fix(alias): Don't check the driver path during initialization anymore.

* feat(123): allow modification of the platform header (OpenListTeam#1542)

* feat(drivers/123): Allow modification of the platform field

* feat(drivers/123): Set login platfrom as web

* fix(drivers/123): update platform field help value

* feat(strm): strm local file (OpenListTeam#1127)

* feat(strm): strm local file

* feat: 代码优化

* feat: 访问被strm挂载路径时也更新

* fix: 路径最后带/判断缺失

* fix: 路径最后带/判断缺失

* refactor

* refactor

* fix: close seekable-stream in `generateStrm`

* refactor: lazy create local file

* 优化路径判断

---------



* feat(thunder): allow setting space (OpenListTeam#1219)

allows access to files on remote devices via Thunder's tunneling service.

* feat(net): support proxy configuration via config file (OpenListTeam#1359)

* support proxy

* debug

* debug2

* del debug

* add proxy configuration with env var fallback

* comments to en

* refactor(env): fallback env

---------



* fix(google_driver): fix google link file display size (OpenListTeam#1335)

* fix file link display size

* fix performance and field

* cn to en notes

---------



* chore(strm): Built-in file types support modification (OpenListTeam#1483)

* fix(baidu_netdisk): support resuming uploads when an error occurs (OpenListTeam#1279)

support resuming uploads when an error occurs

* feat(stream): enhance GetRangeReaderFromLink rate limiting (OpenListTeam#1528)

* feat(stream): enhance GetRangeReaderFromLink rate limiting

* refactor(stream): update GetRangeReaderFromMFile to return *model.FileRangeReader

* refactor(stream): simplify context error handling in RateLimitReader, RateLimitWriter, and RateLimitFile

* refactor(net): replace custom LimitedReadCloser with readers.NewLimitedReadCloser

* fix(model): update Link.ContentLength JSON tag for correct serialization

* docs(model): add clarification to FileRangeReader usage comment

* fix(backup-restore): add shares (OpenListTeam#1500)

* perf(stream): optimize CacheFullAndWriter for better memory management (OpenListTeam#1584)

* perf(stream): optimize CacheFullAndWriter for better memory management

* fix(stream): ensure proper seek handling in CacheFullAndWriter for improved data integrity

* fix(baidu_netdisk): improve upload experience (OpenListTeam#1562)

* fix(baidu_netdisk): improve upload experience

* fix(typo): URL should be uppercase, apply suggestion from @Copilot




* fix(typo): URL should be uppercase, apply suggestion from @Copilot




* fix(baidu_netdisk): use "UploadAPI" as a fallback when using dynamic upload api

* fix(baidu_netdisk): all uploads share the same upload url cache

* fix(drivers/baidu_netdisk): defer uploadUrlMu unlock

* update driver.go to main

---------







* feat(github_release): support Source code (zip/tar.gz) (OpenListTeam#1581)

* support Github Release Source code (zip/tar.gz)

* fix TarballUrl and ZipballUrl

* fix show source code by allversion

---------



* fix(189): disk-usage unmarshal failed when used capacity overflow (OpenListTeam#1577)

* refactor(stream): simplify code (OpenListTeam#1590)

* refactor(stream): simplify Close method and update SeekableStream to use RangeReader interface

* refactor(stream):  improve RangeRead comments for clarity

* fix(strm): non-specified type generates strm (OpenListTeam#1585)

* fix(strm): non-specified type generates strm

* fix(strm): only insert to strmTrie if SaveStrmToLocal is enabled

* fix(strm): update suffix handling in convert2strmObjs function

* fix(strm): refactor generateStrm to use range reader

---------



* feat(onedrive): support frontend direct upload (OpenListTeam#1532)

* OneDrive添加直连上传

* refactor

* fix: duplicate root path join

---------



* refactor(fs): implement immediate retry within task execution cycle (OpenListTeam#1575)

* fix(baidu_netdisk): Fix Baidu Netdisk resume uploads sticking to the same upload host (OpenListTeam#1609)

Fix Baidu Netdisk resume uploads sticking to the same upload host

* Initial plan

* Initial plan for qihoo360 driver implementation



* Implement qihoo360 driver with basic file operations



* Remove OpenList binary from repository



* Fix security issue: remove sensitive data from debug logs



* Clean up: remove binary and update gitignore



* fix(terabox): wrong return code used (OpenListTeam#1547)

fix(terabox): rename, delete, copy operations sometimes failed



* fix(archive/zip): user specific encoding for non-EFS zips (OpenListTeam#1599)

* fix(archive/zip): user specific encoding for non-EFS zips

* fix(stream): simplify head cache initialization and improve reader retrieval logic

* fix: support multipart zips (.z01)

* chore(deps): update github.com/KirCute/zip to v1.0.1

---------




* feat(doubao): Add rate limiting (OpenListTeam#1618)

* chore(issue templates): require logs (OpenListTeam#1626)

* Fix infinite loop in authentication flow

Move auth check inside method validation to prevent infinite recursion when getAuth() calls request(). Now request() only checks authentication when method is not empty, breaking the circular dependency.



* feat(s3): support frontend direct upload (OpenListTeam#1631)

* feat(s3): support frontend direct upload

* feat(s3): support custom direct upload host

* fix: apply suggestions of Copilot

* fix(link): correct link cache mode bitwise comparison (OpenListTeam#1635)

* fix(link): correct link cache mode bitwise comparison



* refactor(link): use explicit flag equality for link cache mode bitmask checks



---------



* feat(upload): add optional system file filtering for uploads (OpenListTeam#1634)

* fix(driver/123): initialize Platform field (OpenListTeam#1644)

* fix(driver/123): initialization the Platform field



* Fix formatting of Platform field in Pan123



---------



* fix(openlist_driver): ensure UA is correctly propagated (OpenListTeam#1679)

* feat(fs): support manually trigger objs update hook (OpenListTeam#1620)

* feat(fs): support manually trigger objs update hook

* fix: support driver internal copy & move case

* fix

* fix: apply suggestions of Copilot

* fix(misskey): folderId format validation and root directory handling (OpenListTeam#1647)

fix(misskey): Fix folderId format validation and root directory handling

* fix(strm): fix the name and type issue (OpenListTeam#1630)

* fix(strm): fix the name and type issue

* fix(strm): update version

* feat(strm): custom path prefixes (OpenListTeam#1697)

fix(strm): custom path prefixes




* feat(baidu_netdisk): Add shard upload timeout setting (OpenListTeam#1682)

add timeout

* fix(local): assign non-CoW copy requests to the task module (OpenListTeam#1669)

* fix(local): assign non-CoW copy requests to the task module

* fix build

* fix cross device

* feat(fs): Add skipExisting option to move and copy, merge option to copy (OpenListTeam#1556)

* fix(fs): Add skipExisting option to move and copy.

* feat(fs): Add merge option to copy.

* feat(fs): Code smell.

* feat(fs): Code smell.

* feat(archive): support non-overwrite decompress (OpenListTeam#1701)

* feat(search): Add task queue for Meilisearch to prevent race conditions (OpenListTeam#1423)

* Add task queue for Meilisearch to prevent race conditions

- Implement TaskQueueManager for async index operations
- Queue update tasks and process them in batches every 30 seconds
- Check pending task status before executing new operations
- Optimize batch indexing and deletion logic
- Fix type assertion bug in buildSearchDocumentFromResults

* fix(search): re-enqueue skipped tasks to prevent task loss

When tasks are skipped due to pending dependencies, they are now
re-enqueued if not already in queue. This prevents task loss while
avoiding overwriting newer snapshots for the same parent.

* fix(copilot-comment): Invoke Stop() & err of SliceConvert

---------




* fix(search): fix duplicated variable init (OpenListTeam#1703)

* chore(archive): fix struct literal uses unkeyed fields (OpenListTeam#1704)

* chore(pkg/aria2): simplify context cancellation handling in RPC calls (OpenListTeam#1705)

* fix(pkg/aria2): use pointer receivers for Call methods (OpenListTeam#1706)

* feat(strm): keep local download file (OpenListTeam#1707)

* fix(onedrive_shareurl): Reduce temporary file errors (OpenListTeam#1686)

* fix onedrive_shareurl

* .

* chore(strm): avoid generating empty folders (OpenListTeam#1720)

chore(strm): empty folders are not generated locally

* refactor:  improve upload handling (OpenListTeam#1455)

* fix(quark): refactor upPart to use http.NewRequest

* fix(quark): improved upload handling

* fix(quark_open): improved upload handling

* fix: add retry context to multiple upload functions

* fix: optimize hash calculation in multipart upload to avoid blocking

* fix: update error handling in lifecycle functions for better clarity

* fix: update upload progress calculation to improve accuracy

* fix: simplify error handling in lifecycle functions for improved readability

* fix: remove unnecessary mutex for part uploads to simplify code

* fix(stream): simplify file handling in NewStreamSectionReader and improve error messages

* fix(terabox): optimize chunk count calculation in Put method

* perf(chaoxing): 表单上传文件0拷贝

* fix(cnb_releases): improve file upload progress tracking

* fix(baidu_netdisk): improve upload handling

* fix(upload): optimize buffer initialization for file uploads

* fix(baidu_netdisk): add retry condition to skip ErrUploadIDExpired in upload loop

* fix(drivers/crypt): remove hard dependency on RemotePath (OpenListTeam#1713)

* fix(mediafire): enable automatic session token acquisition and fix gzip parsing (OpenListTeam#1661)

* fix(mediafire): enable automatic session token acquisition and fix gzip parsing

- Fix Init() method to allow automatic session token retrieval from cookie
- Change SessionToken from required to optional in configuration
- Add proper gzip decompression support for API responses
- Improve error handling for session token acquisition failures
- Update help text to clarify authentication requirements

Resolves initialization failure and JSON parsing errors when session token
can be automatically obtained from browser cookie.

* fix(mediafire): ensure driver files end with newline

* chore: gofmt drivers/mediafire/*.go

* refactor(op): remove automatic Path assignment (OpenListTeam#1734)

* refactor: 移除 ObjResp 中的 Id 和 Path 字段

* 移除op.List的自动设置Path
Path和Id只在驱动内使用,不应由op.List设置Path

* cnb_releases:将 Addition 结构体中的 RootPath 字段为 RootID
当List方法加载二级目录时,若使用的是Id,应对使用driver.RootID

* doubao_share: 添加潜在bug注释

* 添加 GetRootPath 方法到多个驱动

* refactor!(userAgent): merge most userAgent into base (OpenListTeam#1722)

refactor!(userAgent): merge all userAgent into base

1. change var to const
2. remove duplicated ua definetion after original Resty R
3. upgrade Chrome and OS versions

* feat(fs): Support customizing the cache time for a specific path (OpenListTeam#1533)

* feat(fs): Support customizing the cache time for a specific path

* feat(fs): Get the cache rule for driver information.

* feat(fs): Support globbing.

* feat(fs): Add log.

---------




* feat(driver): add AList v3 (OpenListTeam#1721)

* feat(driver/openlist): compatible with AList v3

* Revert "feat(driver/openlist): compatible with AList v3"

This reverts commit 90f3f80.

* feat(driver): add AList v3

* Revert "feat(patch): add migration from Alist V3 driver to OpenList (OpenListTeam#919)"



---------




* feat(utils): add support for ignoring '@eadir' system files (OpenListTeam#1779)

* fix(task): tasks keep being cancelled (OpenListTeam#1745)

* fix_cancel

* update(go.mod): update tache version

* tache v0.2.2

---------



* feat(model): add object mask support and enhance cache/task handling (OpenListTeam#1743)

* fix(ilanzou): parse vip size (OpenListTeam#1792)

* fix(halalcloud_open): halal-cloud upload issues (OpenListTeam#1800)

fix halal-cloud upload issues

* refactor(bootstrap): move booting logic to bootstrap package (OpenListTeam#1773)

* refactor(bootstrap): move booting to bootstrap package

* chore(log): reduce level of some callings of `utils.Log.Fatal`

* fix(s3): no shutdown after SIGTERM received

* fix: add handle hook

* fix(openlist): disable status check for openlist driver (OpenListTeam#1757)

* fix(openlist): disable status check to avoid network stability issues

* fix(alist_v3): disable status check to avoid network stability issues



---------



* feat(ldap): support webdav, ftp and sftp login (OpenListTeam#1746)

* feat(ldap): support webdav, ftp and sftp login

* fix: apply suggestions of Copilot

* feat(ldap) support ftp, sftp and webdav auto-register

* feat(drivers/139): user authentication and file batch operations (OpenListTeam#1534)

* feat(139): Enhance 139 driver with password login and root path handling

- Added support for password-based login in the 139 driver.
- Introduced RootPath field to store the root directory path.
- Updated Init method to handle family and group types more effectively.
- Implemented new methods for handling file operations in family and group contexts.
- Enhanced error handling and logging for better debugging.
- Added new request and response structures for batch operations and document modifications.
- Improved encryption and decryption methods for secure communication.

* Update drivers/139/util.go




* Update drivers/139/util.go




* Update drivers/139/util.go




* Update drivers/139/util.go




* Update drivers/139/util.go




---------




* fix(139): disk-usage unmarshal failed when used capacity overflow (OpenListTeam#1718)



* feat(driver): add personal / business wps drive support (OpenListTeam#1802)

* feat(driver): add wps drive support

* feat(driver): add wps drive support

* fix(wps): update personal mode string to English



* fix(wps): remove trailing slash from drive origin URL



* fix(wps): correct order of options in mode selection



* fix(wps): enable local sort and upload overwrite



* fix(wps): resolve put bugs, fix file op problems and optimize list logic

- Fix uploading bugs. Support all uploading methods based on 8825.85d3c864.js
- Fix issues in delete/copy/move while opearting big folders.
- Use cache to optimize performance of list, especially in a deep path.

---------




* feat(cloudreve_v4): add ks3 support (OpenListTeam#1828)



* fix(strm): support generate strm with sign (OpenListTeam#1832)

* feat(115_open): support custom pagesize (OpenListTeam#1822)

* docs: add VPS.Town as sponsor to all README (OpenListTeam#1842)



* fix(s3): incorrect copy key with plus sign (OpenListTeam#1820)

* docs: update README for zh-CN (OpenListTeam#1844)

* fix(weiyun): update sdk and support getDetails (OpenListTeam#1845)

* feat(strm): add save local mode (OpenListTeam#1814)

* feat(strm): add KeepSameNameOnly logic

* chore(strm): skip update strm file when keepLocalDownloadFile

* feat(strm): add save local mode

* docs(readme): add demo site (OpenListTeam#1850)

Last Sync: 2025-12-22 12:39

* refactor(bootstrap): fix OpenList-Mobile compile failed (OpenListTeam#1857)

* feat(alias): support load balance (OpenListTeam#1767)

* feat(alias): support load balance

* feat(alias): support storage match for load balance

* feat(patch): add alias addition upgrade patch

* fix bugs

* fix(op/balance): optimize compatibility

* chore: change default read conflict policy

* feat(alias): refactor Alias initialization and enhance path handling

* feat(alias): enhance object masking and add support for operation restrictions

* feat(alias): enhance object masking

* feat(fs): add permission checks

* improve parsing

* update object masks

* feat(fs): enhance virtual file handling

* feat(storage): enhance virtual file retrieval and path handling

* refactor(alias): rename path handling functions for clarity and consistency

* fix(alias): update path handling in Other method to use balanced path

* fix bug

* feat(alias): add file size validation

* feat(alias): add hash consistency check

* 移除哈希合并,

* fix(alias): wrong behavior for all_strict/deterministic_or_all

* Revert "fix(alias): wrong behavior for all_strict/deterministic_or_all"

This reverts commit f001f2d.

* fix(alias): wrong behavior for all_strict/deterministic_or_all

* feat(alias): support part-based read load balance

* fix(alias): list panic when leak conflict path

* fix(alias): remove Other load balance

* fix(alias): 修复 Link 方法中 resultLink 的返回类型和内容复制问题

* fix(alias): 更好的下载并发?

* chore(alias): all tips

* fix(alias): moving paths mismatch

---------




* fix(s3): use current time as default modified time (OpenListTeam#1860)

* fix(driver): fix file copy failure to 123pan due to incorrect etag (OpenListTeam#1874)

* ci(lang): sync only new fields (OpenListTeam#1881)

* fix(123_open): infinite recursive call (OpenListTeam#1854)

fix(123_open): token refresh logic

Fix token handling logic to avoid deadlock. Token method took reference of Alist's implementation.

* feat(qihoo360): fix bugs made by copliot

* fix(doubao_share): use new download info (OpenListTeam#1890)

fix(doubao_share): update file URL retrieval to use new download info structure



* feat(qihoo360): implement file upload functionality and enhance request handling

* fix(qihoo360): update user-agent

* feat(qihoo360): add User-Agent header for Sync.getVerifiedDownLoadUrl request

* feat(drivers/mega): support getting disk usage (OpenListTeam#1903)

* feat(drivers/mega): support getting disk usage

* fix

* feat(qihoo360): implement GetDetails and user detail retrieval functions

* feat(drivers/mega): support permanently deleting files (OpenListTeam#1913)

* feat(123pan): add offline download (OpenListTeam#1911)

* feat(123网盘): 添加123网盘离线下载功能

- 新增123网盘离线下载实现
- 添加相关API接口和常量配置
- 在路由和工具集中集成123网盘支持

* refactor(offline_download): 重构123网盘离线下载状态处理和类型定义

- 将离线下载相关类型定义从util.go移至types.go
- 更新状态获取api

* 移除了备选方案(/offline_download/task/status)

* feat(qihoo360): enhance GetDetails function and update UserDetailResp structure

* chore(strm): remove redundant param (OpenListTeam#1929)

* feat(drivers): support getting disk usage of some drivers (OpenListTeam#1905)

* feat(drivers): support getting disk usage of some drivers

* feat(drivers/degoo): implement GetDetails

* fix(fs/storage-details): fill used space rather than free space

* fix mega

* fix bsize type

* fix(cloudreve): Manually set path to avoid empty path (OpenListTeam#1933)

* fix(drivers/alist_v3): failed to unmarshal MeResp (OpenListTeam#1931)

* feat(drivers/webdav): add support for 302 redirects (OpenListTeam#1952)

* Remove the `OnlyProxy` restriction and obtain the redirected link to support 302

* Add `driver.Config` `PreferProxy` to recommend user to enable the proxy by default

---------



* fix(fs): panic when failed to get storage details (OpenListTeam#1964)

* chore(.github): update issue templates [no ci] (OpenListTeam#1976)

chore(.github): update issue templates

* fix(drivers/ftp): failed to get objs (OpenListTeam#1948)

fix(drivers/ftp): failed get objs

* feat(drivers/cloudreve_v4): implement Getter interface (OpenListTeam#1937)

feat(cloudreve_v4): implement Getter interface



* fix(drivers/github): failed to get objs (OpenListTeam#1915)

fix(drivers/github): failed get objs

* fix(drivers/strm): delete extra local directories in sync mode (OpenListTeam#1980)

* fix(ci): change unchecked regex (OpenListTeam#1993)

fix(ci/issue): change unchecked regex



* feat(drivers): add autoindex driver (OpenListTeam#1978)

* feat(drivers): add autoindex driver

* fix

* add NoUpload



* add TestParseSize



* go mod tidy



* use base.RestyClient



* fix: support evaluate size and modified time

* fix apache

* perf

* feat: support ignore size and modified time

* rename driver

---------




* fix(fs): handle non-existent destination directory in file transfer (OpenListTeam#1898)

* fix(FileTransferTask): skip copying if destination directory does not exist

* pass only object not found error

---------




* feat(drivers/cloudreve): implement GetDetails (OpenListTeam#1960)

* fix(driver/quark_uc): Fix display of non-compliant filenames (OpenListTeam#2000)

* fix(webdav/move): fix source file still exist after moving file by webdav (OpenListTeam#1979)

* perf(baidu_netdisk): reduce the number of file listing requests (OpenListTeam#2016)

* 本优化减少了百度网盘驱动下文件列表的请求次数,能加快文件浏览速度。此前只要文件夹下有至少一个文件,都会至少发出2次列表请求。



* fix(drivers/seafile): object not found when RootFolderPath != "/" (OpenListTeam#2010)

* fix(driver/seafile): object not found when RootFolderPath != "/"

* refactor(seafile): restructure Seafile driver for improved library handling and error management

* add IsDir method to LibraryInfo type

* improve initialization

* add repoID to RepoItemResp and update List method to set repoID

---------




* fix(drivers/alias): default sort & substitute link (OpenListTeam#1917)

* fix(drivers/alias): default sort & substitute link

* fix

* fix

* fix(drivers/cloudreve_v4): add IsFolder attribute to Getter response (OpenListTeam#2035)

* fix(drivers/cloudreve_v4): add IsFolder attribute to Getter response



* refactor(drivers/cloudreve_v4): implement File.fileToObject method



* fix(drivers/cloudreve_v4): implement 404 not found for getter



---------



* fix(drivers/quark): apply html escaping in quark (OpenListTeam#2046)

* fix(drivers/quark): apply html escaping in quark

* fix(api/remove): add validation for empty items in delete file list (OpenListTeam#1617)

* fix(FsRemove): add validation for empty items in delete file list

If Req.Names contains an empty string item, the whole directory will be removed. As a result we need add a simple guard to prevent such cases.



* fix(FsRemove): enhance validation to prevent unintended directory deletion

1. Use `utils.FixAndCleanPath` to correctly identify and block invalid names.
2. Change error handling from `return` to `continue`.



---------




* Merge commit from fork



* Merge commit from fork



* fix(drivers/teldrive): enhance file listing and upload functionality with pagination and random chunk naming (OpenListTeam#2034)

* fix(drivers/teldrive): enhance file listing and upload functionality with pagination and random chunk naming

* fix(drivers/teldrive): optimize file listing by removing unnecessary mutex and restructuring data handling

* Update drivers/teldrive/meta.go




---------




* fix(115_share): adjust 115 share driver for official API update (OpenListTeam#2068)

* fix(115_share): add user agent support and update driver dependency

* fix(115): fix download error

* feat: add thumbnail support for 115 driver and 115 share

- Add Thumb() method to FileObj in 115 driver to return thumbnail URL
- Add ThumbURL field to FileObj struct in 115 share utility
- Update 115driver dependency from v1.2.2 to v1.2.3 to support thumbnail functionality
- Implement Thumb() method for 115 share FileObj to return thumbnail URL

* chore(ci): add breaking change guideline to PR title check (OpenListTeam#2087)

* feat(ci): add PR title validation for breaking changes

Updated regex to allow '!' for breaking changes in PR titles.



* chore(pr): Update PR template

Add bilingual instructions for PR title formatting.



---------



* feat(drivers/123open): support sha1 reuse api (OpenListTeam#2089)

* feat(drivers/123open): support sha1 reuse api

* fix(drivers/123open): fix typos

* fix(deps): update go4.org digest to a507140 (OpenListTeam#2095)



* fix(‎drivers/quark_uc_tv) : Update error code judgment (OpenListTeam#2080)

* fix error code

* add ErrorInfo check

* chore(typo): fix typo in UpdateFileReq field name (OpenListTeam#2133)

Fix typo in UpdateFileReq field name

ref: OpenListTeam/115-sdk-go#3



* fix(driver/wps): fetch all files via multiple API invocations (OpenListTeam#2139)

fix(driver/wps): wps list all files in one request

* feat(security): add SECURITY.md (OpenListTeam#2147)

[skip ci]

Add SECURITY.md



* chore(handles/auth): improve error response (OpenListTeam#2148)

* chore(handles/auth): improve error response



* Apply suggestion from @xrgzs



---------



* feat(drivers/thunder*): implement GetDetails (OpenListTeam#2113)



* Fix critical auth bug: treat access_token_expire as absolute timestamp

The API returns access_token_expire as an absolute Unix timestamp, not a duration. The old code was adding it to current time, causing tokens to "expire" in year 2082. This meant tokens appeared valid even after actual expiration (1 hour), causing all API calls to fail after the program ran for some time.

Also added retry limit protection to prevent infinite recursion in error handling.



---------

Signed-off-by: zzzhr1990 <zzzhr@hotmail.com>
Signed-off-by: D@' 3z K!7 <99719341+Da3zKi7@users.noreply.github.com>
Signed-off-by: ShenLin <773933146@qq.com>
Signed-off-by: jenfonro <799170122@qq.com>
Signed-off-by: yuyamionini <46483865+yuyamionini@users.noreply.github.com>
Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>
Signed-off-by: MoYan <1561515308@qq.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>
Signed-off-by: KirCute <951206789@qq.com>
Signed-off-by: hcrgm <hcrgm@qq.com>
Signed-off-by: huyuantao <huyuantao@ultrarisc.com>
Signed-off-by: Chaloemchai <chaloemchai.yy@gmail.com>
Signed-off-by: LXY <767763591@qq.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewbieOrange <NewbieOrange@users.noreply.github.com>
Co-authored-by: KirCute <951206789@qq.com>
Co-authored-by: ShenLin <773933146@qq.com>
Co-authored-by: zzzhr1990 <zzzhr@hotmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Tursom K. Ulefits <33368546+tursom@users.noreply.github.com>
Co-authored-by: jenfonro <799170122@qq.com>
Co-authored-by: j2rong4cn <j2rong@qq.com>
Co-authored-by: ILoveScratch <ilovescratch@foxmail.com>
Co-authored-by: KirCute <kircute@foxmail.com>
Co-authored-by: jerrita <je5r1ta@icloud.com>
Co-authored-by: D@' 3z K!7 <99719341+Da3zKi7@users.noreply.github.com>
Co-authored-by: MadDogOwner <xiaoran@xrgzs.top>
Co-authored-by: walloo <51254954+varg1714@users.noreply.github.com>
Co-authored-by: MoYan <1561515308@qq.com>
Co-authored-by: Seven <53081179+Seven66677731@users.noreply.github.com>
Co-authored-by: ex-hentai <96158157+ex-hentai@users.noreply.github.com>
Co-authored-by: j2rong4cn <36783515+j2rong4cn@users.noreply.github.com>
Co-authored-by: hcrgm <hcrgm@qq.com>
Co-authored-by: nibazshab <44338441+nibazshab@users.noreply.github.com>
Co-authored-by: ASLant <77436463+Y-ASLant@users.noreply.github.com>
Co-authored-by: yuyamionini <46483865+yuyamionini@users.noreply.github.com>
Co-authored-by: Pikachu Ren <40362270+PIKACHUIM@users.noreply.github.com>
Co-authored-by: VXTLS <187420201+vxtls@users.noreply.github.com>
Co-authored-by: ImoutoHeaven <github_main@imoutoheaven.org>
Co-authored-by: ImoutoHeaven <noreply@imoutoheaven.org>
Co-authored-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Co-authored-by: wongz <wongz@users.noreply.github.com>
Co-authored-by: Mako (XSpy) <127767602+x-spy@users.noreply.github.com>
Co-authored-by: hshpy <hshpy.pengyu@gmail.com>
Co-authored-by: XZB-1248 <28593573+XZB-1248@users.noreply.github.com>
Co-authored-by: XZB-1248 <i@1248.ink>
Co-authored-by: TwoOnefour <lys214412@gmail.com>
Co-authored-by: foxxorcat <95907542+foxxorcat@users.noreply.github.com>
Co-authored-by: Seven <53081179+sevxn007@users.noreply.github.com>
Co-authored-by: 绎泽 <yize@tencent.to>
Co-authored-by: 我怎么就不是一只猫呢? <26274059+dezhishen@users.noreply.github.com>
Co-authored-by: Tron <ironboxplus@gmail.com>
Co-authored-by: Edward <73746306+WangEdward@users.noreply.github.com>
Co-authored-by: mcxiedidi <113833419+mcxiedidi@users.noreply.github.com>
Co-authored-by: Ljcbaby <46277145+ljcbaby@users.noreply.github.com>
Co-authored-by: cyk <dr_arc@163.com>
Co-authored-by: Cp0204 <Cp0204@qq.com>
Co-authored-by: mkitsdts <136291922+mkitsdts@users.noreply.github.com>
Co-authored-by: Rui Huang <1251433731@qq.com>
Co-authored-by: Khoray <hhkorm@gmail.com>
Co-authored-by: Hu Yuantao <130338111+datao2001@users.noreply.github.com>
Co-authored-by: Chaloemchai <chaloemchai.yy@gmail.com>
Co-authored-by: Shelton Zhu <498220739@qq.com>
Co-authored-by: gdm257 <gdm@disroot.org>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: LXY <767763591@qq.com>
Wodlie added a commit to Wodlie/openlist_123 that referenced this pull request Feb 28, 2026
* chore: 删除不再使用的工作流文件并更新相关配置

* Revert

Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* chore:fixed ci build

* chore: clean up workflow files by removing unused release configurations

* refactor(workflows): clean up Docker release workflows and remove obsolete files

* revert

Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* revert

Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* feat(ci): enhance Docker release workflow with manual tagging options and lite builds

* Delete .github/workflows/test_docker.yml

Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* Delete .github/workflows/sync_repo.yml

Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* Delete .github/workflows/sync_repo.yml

Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* Delete .github/workflows/test_docker.yml

Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>

* feat(onedrive): add TenantID field and update token refresh logic

* feat(qihoo360)!: add qihoo360 driver (#14)

* fix(drivers): free space underflow if used larger than total space (OpenListTeam#1407)

* fix(189pc/189tv): `request` panic when login failed (OpenListTeam#1428)

* fix(ilanzou): wrong total capacity (OpenListTeam#1433)

* feat(pikpak): support disk usage (OpenListTeam#1426)

* feat(pikpak): support disk usage

* fix(alias): cannot list with details

* refactor: rename `NewDiskUsageFromUsedAndTotal`

* fix(disk-usage): get details of storages that is not initialized

* feat(offline_download): add 123 open (OpenListTeam#1427)

* feat(http3|quic): add http3|quic support (OpenListTeam#1466)

* feat(http3|quic): add http3|quic support

* revert(ai): fix ai error

* fix(shutdown): shutdown was using close

* feat(http3|quic): add config if needs h3

* feat(http3|quic): add Alt-Svc to expose h3

* chore(frontend): optimize user operations (OpenListTeam#1449)

* feat(drivers): add halalcloud_open driver (OpenListTeam#1430)

* 新增清真云Open驱动,支持最新的轻量SDK

* Change Go version in go.mod

Downgrade Go version from 1.24.2 to 1.23.4



* Apply suggestions from code review

* Removed unnecessary comments
* Downgraded the Go version to 1.23.4.
* Not sure whether FileStream supports concurrent read and write operations, so currently using single-threaded upload to ensure safety.




* feat(halalcloud_open): support disk usage

* Set useSingleUpload to true for upload safety

Not sure whether FileStream supports concurrent read and write operations, so currently using single-threaded upload to ensure safety.



* Update meta.go

Change required for RefreshToken, If using a personal API approach, the RefreshToken is not required.



* remove debug logs

* bump halalcloud SDK version

* fix unnecessary params

* Update drivers/halalcloud_open/driver_init.go




* Fixed spelling errors; changed hardcoded retry parameters to constants.

* remove pointer in get link function in utils.go

---------





* feat(http3|quic): Set Alt-Svc header only for HTTPS requests (OpenListTeam#1469)

* feat(local): move deleted files to corresponding locations (OpenListTeam#1281)

* fix(fs):fix retry task after restart (OpenListTeam#1467)

* fix retry task after restart

* fix: initialize SrcStorage and DstStorage in tasks to prevent nil pointer dereference

* feat: implement storage load signal mechanism for improved synchronization

* fix:  update StoragesLoaded logic

* refactor: reorganize storage loading logic and improve synchronization handling

---------



* feat(cache): improve cache management (OpenListTeam#1339)

* feat(cache): improve cache management

* feat(disk-usage): add cache

* feat(disk-usage): add refresh

* fix(disk-usage): cache with ttl

* feat(cache): implement KeyedCache and TypedCache for improved caching mechanism

* fix(copy): update object retrieval to use Get instead of GetUnwrap

* refactor(cache): simplify DirectoryCache structure and improve object management

* fix(cache): correct cache entry initialization and key deletion logic in TypedCache

* refactor(driver): remove GetObjInfo interface and simplify Link function logic
https://github.com/OpenListTeam/OpenList/pull/888/files#r2430925783

* fix(link): optimize link retrieval and caching logic

* refactor(cache): consolidate cache management and improve directory cache handling

* fix(cache): add cache control based on storage configuration in List function

* .

* refactor: replace fmt.Sprintf with strconv for integer conversions

* refactor(cache): enhance cache entry management with Expirable interface

* fix(cache): improve link reference acquisition logic to handle expiration

* refactor: replace OnlyLinkMFile with NoLinkSF in driver configurations and logic

* refactor(link): enhance link caching logic with dynamic type keys based on IP and User-Agent

* feat(drivers): add LinkCacheType to driver configurations for enhanced caching

* refactor(cache): streamline directory object management in cache operations

* refactor(cache): remove unnecessary 'dirty' field from CacheEntry structure

* refactor(cache): replace 'dirty' field with bitwise flags

* refactor(io): 调高SyncClosers.AcquireReference的优先级

* refactor(link): 优化链接获取逻辑,增加重

* refactor(link): 添加RequireReference字段以增强链接管理

* refactor(link): 移除MFile字段,改用RangeReader

* refactor: 移除不必要的NoLinkSF字段

* refactor(cache): 修改目录缓存的脏标志定义和更新逻辑

* feat(cache): add expiration gc

---------





* feat(onedrive): add ref support (OpenListTeam#1435)

* feat(onedrive): add ref support

* fix(onedrive): remove redundant token assignment from reference

---------



* feat(drivers): add ProtonDrive driver (OpenListTeam#1368)

* feat(drivers): add ProtonDrive driver

- Implement complete ProtonDrive storage driver with end-to-end encryption support
- Add authentication via username/password with credential caching and reusable login
- Support all core operations: List, Link, Put, Copy, Move, Remove, Rename, MakeDir
- Include encrypted file operations with PGP key management and node passphrase handling
- Add temporary HTTP server for secure file downloads with range request support
- Support media streaming using temp server range requests
- Implement progress tracking for uploads and downloads
- Support directory operations with circular move detection
- Add proper error handling and panic recovery for external library integration
- Support buffered upload for specific sequential and encrypted, but optimized transmission.

* Update drivers/proton_drive/util.go




* chore

* feat(drivers): enhance ProtonDrive temp server

- Implement separate listen and public port configuration for complex network deployments
- Add intelligent port detection with 8080 as preferred default, fallback to auto-assignment
- Support Container/NAT/VM environments through configurable external host and port mapping
- Add port availability validation with graceful fallback to listen port
- Enable users to specify external domain/IP for client connections (e.g., 192.168.1.5)
- Follow FTP server configuration patterns for network flexibility
- Maintain localhost development simplicity while supporting production deployments

* feat(proton_drive): refactor directory handling and improve link retrieval

* fix(proton_drive): add NoLinkURL configuration option

* fix(proton_drive): update file size retrieval and enforce TwoFACode requirement

* feat(proton_drive): add expiration to link response

* fix(proton_drive): handle empty RootFolderID in Init method

* fix(proton_drive): update credential handling to use email and reusable login

* fix(proton_drive): update credential handling to use reusableCredential variable

* fix(proton_drive): update DirectRename to use GetLink for source object retrieval

* fix(proton_drive): refactor uploadFile to return model.Obj and handle errors correctly

* fix(proton_drive): refactor DirectMove to use getLink for source retrieval and simplify destination handling

* fix(proton_drive): simplify Copy method by removing temporary file creation and directly using FileStream

* refactor(proton_drive): remove unused temporary server and related code

* chore

* fix(proton_drive): fix driver

- Handle fresh login if ProtonDrive rejects AccessToken or RefreshToken
- Update stored credentials

* fix(proton_drive): simplify reusable login handling in Init method

* fix(proton_drive): fix driver

- Update stored credentials, now is failing

* feat(proton_drive): improve authentication handling and remove unused variables

* fix(proton_drive): fix driver

- Update stored credentials, now is failing

* fix(proton_drive): improve authentication handling

* refactor(proton_drive): move client initialization to initClient method

* feat(proton_drive): move addrs and addrKRs

* feat(proton_drive): optimize upload threads

- Change ConcurrentBlockUploadCount to user configured upload threads number
- Comment ConcurrentFileCryptoCount, default is runtime.GOMAXPROCS(0)

---------







* feat(openlist): add PassIPToUpsteam to driver (OpenListTeam#1498)

* fix(share): remove share when user delete (OpenListTeam#1493)

* fix(aliyundrive_open): use safe disk usage calculation (OpenListTeam#1510)

* feat(command): add --config flag to set custom config path (OpenListTeam#1479)

* fix(alias): nil panic in `ResolveLinkCacheMode` (OpenListTeam#1527)

* fix(alias): Check the driver path during initialization

* fix(alias): Don't check the driver path during initialization anymore.

* feat(123): allow modification of the platform header (OpenListTeam#1542)

* feat(drivers/123): Allow modification of the platform field

* feat(drivers/123): Set login platfrom as web

* fix(drivers/123): update platform field help value

* feat(strm): strm local file (OpenListTeam#1127)

* feat(strm): strm local file

* feat: 代码优化

* feat: 访问被strm挂载路径时也更新

* fix: 路径最后带/判断缺失

* fix: 路径最后带/判断缺失

* refactor

* refactor

* fix: close seekable-stream in `generateStrm`

* refactor: lazy create local file

* 优化路径判断

---------



* feat(thunder): allow setting space (OpenListTeam#1219)

allows access to files on remote devices via Thunder's tunneling service.

* feat(net): support proxy configuration via config file (OpenListTeam#1359)

* support proxy

* debug

* debug2

* del debug

* add proxy configuration with env var fallback

* comments to en

* refactor(env): fallback env

---------



* fix(google_driver): fix google link file display size (OpenListTeam#1335)

* fix file link display size

* fix performance and field

* cn to en notes

---------



* chore(strm): Built-in file types support modification (OpenListTeam#1483)

* fix(baidu_netdisk): support resuming uploads when an error occurs (OpenListTeam#1279)

support resuming uploads when an error occurs

* feat(stream): enhance GetRangeReaderFromLink rate limiting (OpenListTeam#1528)

* feat(stream): enhance GetRangeReaderFromLink rate limiting

* refactor(stream): update GetRangeReaderFromMFile to return *model.FileRangeReader

* refactor(stream): simplify context error handling in RateLimitReader, RateLimitWriter, and RateLimitFile

* refactor(net): replace custom LimitedReadCloser with readers.NewLimitedReadCloser

* fix(model): update Link.ContentLength JSON tag for correct serialization

* docs(model): add clarification to FileRangeReader usage comment

* fix(backup-restore): add shares (OpenListTeam#1500)

* perf(stream): optimize CacheFullAndWriter for better memory management (OpenListTeam#1584)

* perf(stream): optimize CacheFullAndWriter for better memory management

* fix(stream): ensure proper seek handling in CacheFullAndWriter for improved data integrity

* fix(baidu_netdisk): improve upload experience (OpenListTeam#1562)

* fix(baidu_netdisk): improve upload experience

* fix(typo): URL should be uppercase, apply suggestion from @Copilot




* fix(typo): URL should be uppercase, apply suggestion from @Copilot




* fix(baidu_netdisk): use "UploadAPI" as a fallback when using dynamic upload api

* fix(baidu_netdisk): all uploads share the same upload url cache

* fix(drivers/baidu_netdisk): defer uploadUrlMu unlock

* update driver.go to main

---------







* feat(github_release): support Source code (zip/tar.gz) (OpenListTeam#1581)

* support Github Release Source code (zip/tar.gz)

* fix TarballUrl and ZipballUrl

* fix show source code by allversion

---------



* fix(189): disk-usage unmarshal failed when used capacity overflow (OpenListTeam#1577)

* refactor(stream): simplify code (OpenListTeam#1590)

* refactor(stream): simplify Close method and update SeekableStream to use RangeReader interface

* refactor(stream):  improve RangeRead comments for clarity

* fix(strm): non-specified type generates strm (OpenListTeam#1585)

* fix(strm): non-specified type generates strm

* fix(strm): only insert to strmTrie if SaveStrmToLocal is enabled

* fix(strm): update suffix handling in convert2strmObjs function

* fix(strm): refactor generateStrm to use range reader

---------



* feat(onedrive): support frontend direct upload (OpenListTeam#1532)

* OneDrive添加直连上传

* refactor

* fix: duplicate root path join

---------



* refactor(fs): implement immediate retry within task execution cycle (OpenListTeam#1575)

* fix(baidu_netdisk): Fix Baidu Netdisk resume uploads sticking to the same upload host (OpenListTeam#1609)

Fix Baidu Netdisk resume uploads sticking to the same upload host

* Initial plan

* Initial plan for qihoo360 driver implementation



* Implement qihoo360 driver with basic file operations



* Remove OpenList binary from repository



* Fix security issue: remove sensitive data from debug logs



* Clean up: remove binary and update gitignore



* fix(terabox): wrong return code used (OpenListTeam#1547)

fix(terabox): rename, delete, copy operations sometimes failed



* fix(archive/zip): user specific encoding for non-EFS zips (OpenListTeam#1599)

* fix(archive/zip): user specific encoding for non-EFS zips

* fix(stream): simplify head cache initialization and improve reader retrieval logic

* fix: support multipart zips (.z01)

* chore(deps): update github.com/KirCute/zip to v1.0.1

---------




* feat(doubao): Add rate limiting (OpenListTeam#1618)

* chore(issue templates): require logs (OpenListTeam#1626)

* Fix infinite loop in authentication flow

Move auth check inside method validation to prevent infinite recursion when getAuth() calls request(). Now request() only checks authentication when method is not empty, breaking the circular dependency.



* feat(s3): support frontend direct upload (OpenListTeam#1631)

* feat(s3): support frontend direct upload

* feat(s3): support custom direct upload host

* fix: apply suggestions of Copilot

* fix(link): correct link cache mode bitwise comparison (OpenListTeam#1635)

* fix(link): correct link cache mode bitwise comparison



* refactor(link): use explicit flag equality for link cache mode bitmask checks



---------



* feat(upload): add optional system file filtering for uploads (OpenListTeam#1634)

* fix(driver/123): initialize Platform field (OpenListTeam#1644)

* fix(driver/123): initialization the Platform field



* Fix formatting of Platform field in Pan123



---------



* fix(openlist_driver): ensure UA is correctly propagated (OpenListTeam#1679)

* feat(fs): support manually trigger objs update hook (OpenListTeam#1620)

* feat(fs): support manually trigger objs update hook

* fix: support driver internal copy & move case

* fix

* fix: apply suggestions of Copilot

* fix(misskey): folderId format validation and root directory handling (OpenListTeam#1647)

fix(misskey): Fix folderId format validation and root directory handling

* fix(strm): fix the name and type issue (OpenListTeam#1630)

* fix(strm): fix the name and type issue

* fix(strm): update version

* feat(strm): custom path prefixes (OpenListTeam#1697)

fix(strm): custom path prefixes




* feat(baidu_netdisk): Add shard upload timeout setting (OpenListTeam#1682)

add timeout

* fix(local): assign non-CoW copy requests to the task module (OpenListTeam#1669)

* fix(local): assign non-CoW copy requests to the task module

* fix build

* fix cross device

* feat(fs): Add skipExisting option to move and copy, merge option to copy (OpenListTeam#1556)

* fix(fs): Add skipExisting option to move and copy.

* feat(fs): Add merge option to copy.

* feat(fs): Code smell.

* feat(fs): Code smell.

* feat(archive): support non-overwrite decompress (OpenListTeam#1701)

* feat(search): Add task queue for Meilisearch to prevent race conditions (OpenListTeam#1423)

* Add task queue for Meilisearch to prevent race conditions

- Implement TaskQueueManager for async index operations
- Queue update tasks and process them in batches every 30 seconds
- Check pending task status before executing new operations
- Optimize batch indexing and deletion logic
- Fix type assertion bug in buildSearchDocumentFromResults

* fix(search): re-enqueue skipped tasks to prevent task loss

When tasks are skipped due to pending dependencies, they are now
re-enqueued if not already in queue. This prevents task loss while
avoiding overwriting newer snapshots for the same parent.

* fix(copilot-comment): Invoke Stop() & err of SliceConvert

---------




* fix(search): fix duplicated variable init (OpenListTeam#1703)

* chore(archive): fix struct literal uses unkeyed fields (OpenListTeam#1704)

* chore(pkg/aria2): simplify context cancellation handling in RPC calls (OpenListTeam#1705)

* fix(pkg/aria2): use pointer receivers for Call methods (OpenListTeam#1706)

* feat(strm): keep local download file (OpenListTeam#1707)

* fix(onedrive_shareurl): Reduce temporary file errors (OpenListTeam#1686)

* fix onedrive_shareurl

* .

* chore(strm): avoid generating empty folders (OpenListTeam#1720)

chore(strm): empty folders are not generated locally

* refactor:  improve upload handling (OpenListTeam#1455)

* fix(quark): refactor upPart to use http.NewRequest

* fix(quark): improved upload handling

* fix(quark_open): improved upload handling

* fix: add retry context to multiple upload functions

* fix: optimize hash calculation in multipart upload to avoid blocking

* fix: update error handling in lifecycle functions for better clarity

* fix: update upload progress calculation to improve accuracy

* fix: simplify error handling in lifecycle functions for improved readability

* fix: remove unnecessary mutex for part uploads to simplify code

* fix(stream): simplify file handling in NewStreamSectionReader and improve error messages

* fix(terabox): optimize chunk count calculation in Put method

* perf(chaoxing): 表单上传文件0拷贝

* fix(cnb_releases): improve file upload progress tracking

* fix(baidu_netdisk): improve upload handling

* fix(upload): optimize buffer initialization for file uploads

* fix(baidu_netdisk): add retry condition to skip ErrUploadIDExpired in upload loop

* fix(drivers/crypt): remove hard dependency on RemotePath (OpenListTeam#1713)

* fix(mediafire): enable automatic session token acquisition and fix gzip parsing (OpenListTeam#1661)

* fix(mediafire): enable automatic session token acquisition and fix gzip parsing

- Fix Init() method to allow automatic session token retrieval from cookie
- Change SessionToken from required to optional in configuration
- Add proper gzip decompression support for API responses
- Improve error handling for session token acquisition failures
- Update help text to clarify authentication requirements

Resolves initialization failure and JSON parsing errors when session token
can be automatically obtained from browser cookie.

* fix(mediafire): ensure driver files end with newline

* chore: gofmt drivers/mediafire/*.go

* refactor(op): remove automatic Path assignment (OpenListTeam#1734)

* refactor: 移除 ObjResp 中的 Id 和 Path 字段

* 移除op.List的自动设置Path
Path和Id只在驱动内使用,不应由op.List设置Path

* cnb_releases:将 Addition 结构体中的 RootPath 字段为 RootID
当List方法加载二级目录时,若使用的是Id,应对使用driver.RootID

* doubao_share: 添加潜在bug注释

* 添加 GetRootPath 方法到多个驱动

* refactor!(userAgent): merge most userAgent into base (OpenListTeam#1722)

refactor!(userAgent): merge all userAgent into base

1. change var to const
2. remove duplicated ua definetion after original Resty R
3. upgrade Chrome and OS versions

* feat(fs): Support customizing the cache time for a specific path (OpenListTeam#1533)

* feat(fs): Support customizing the cache time for a specific path

* feat(fs): Get the cache rule for driver information.

* feat(fs): Support globbing.

* feat(fs): Add log.

---------




* feat(driver): add AList v3 (OpenListTeam#1721)

* feat(driver/openlist): compatible with AList v3

* Revert "feat(driver/openlist): compatible with AList v3"

This reverts commit 90f3f80.

* feat(driver): add AList v3

* Revert "feat(patch): add migration from Alist V3 driver to OpenList (OpenListTeam#919)"



---------




* feat(utils): add support for ignoring '@eadir' system files (OpenListTeam#1779)

* fix(task): tasks keep being cancelled (OpenListTeam#1745)

* fix_cancel

* update(go.mod): update tache version

* tache v0.2.2

---------



* feat(model): add object mask support and enhance cache/task handling (OpenListTeam#1743)

* fix(ilanzou): parse vip size (OpenListTeam#1792)

* fix(halalcloud_open): halal-cloud upload issues (OpenListTeam#1800)

fix halal-cloud upload issues

* refactor(bootstrap): move booting logic to bootstrap package (OpenListTeam#1773)

* refactor(bootstrap): move booting to bootstrap package

* chore(log): reduce level of some callings of `utils.Log.Fatal`

* fix(s3): no shutdown after SIGTERM received

* fix: add handle hook

* fix(openlist): disable status check for openlist driver (OpenListTeam#1757)

* fix(openlist): disable status check to avoid network stability issues

* fix(alist_v3): disable status check to avoid network stability issues



---------



* feat(ldap): support webdav, ftp and sftp login (OpenListTeam#1746)

* feat(ldap): support webdav, ftp and sftp login

* fix: apply suggestions of Copilot

* feat(ldap) support ftp, sftp and webdav auto-register

* feat(drivers/139): user authentication and file batch operations (OpenListTeam#1534)

* feat(139): Enhance 139 driver with password login and root path handling

- Added support for password-based login in the 139 driver.
- Introduced RootPath field to store the root directory path.
- Updated Init method to handle family and group types more effectively.
- Implemented new methods for handling file operations in family and group contexts.
- Enhanced error handling and logging for better debugging.
- Added new request and response structures for batch operations and document modifications.
- Improved encryption and decryption methods for secure communication.

* Update drivers/139/util.go




* Update drivers/139/util.go




* Update drivers/139/util.go




* Update drivers/139/util.go




* Update drivers/139/util.go




---------




* fix(139): disk-usage unmarshal failed when used capacity overflow (OpenListTeam#1718)



* feat(driver): add personal / business wps drive support (OpenListTeam#1802)

* feat(driver): add wps drive support

* feat(driver): add wps drive support

* fix(wps): update personal mode string to English



* fix(wps): remove trailing slash from drive origin URL



* fix(wps): correct order of options in mode selection



* fix(wps): enable local sort and upload overwrite



* fix(wps): resolve put bugs, fix file op problems and optimize list logic

- Fix uploading bugs. Support all uploading methods based on 8825.85d3c864.js
- Fix issues in delete/copy/move while opearting big folders.
- Use cache to optimize performance of list, especially in a deep path.

---------




* feat(cloudreve_v4): add ks3 support (OpenListTeam#1828)



* fix(strm): support generate strm with sign (OpenListTeam#1832)

* feat(115_open): support custom pagesize (OpenListTeam#1822)

* docs: add VPS.Town as sponsor to all README (OpenListTeam#1842)



* fix(s3): incorrect copy key with plus sign (OpenListTeam#1820)

* docs: update README for zh-CN (OpenListTeam#1844)

* fix(weiyun): update sdk and support getDetails (OpenListTeam#1845)

* feat(strm): add save local mode (OpenListTeam#1814)

* feat(strm): add KeepSameNameOnly logic

* chore(strm): skip update strm file when keepLocalDownloadFile

* feat(strm): add save local mode

* docs(readme): add demo site (OpenListTeam#1850)

Last Sync: 2025-12-22 12:39

* refactor(bootstrap): fix OpenList-Mobile compile failed (OpenListTeam#1857)

* feat(alias): support load balance (OpenListTeam#1767)

* feat(alias): support load balance

* feat(alias): support storage match for load balance

* feat(patch): add alias addition upgrade patch

* fix bugs

* fix(op/balance): optimize compatibility

* chore: change default read conflict policy

* feat(alias): refactor Alias initialization and enhance path handling

* feat(alias): enhance object masking and add support for operation restrictions

* feat(alias): enhance object masking

* feat(fs): add permission checks

* improve parsing

* update object masks

* feat(fs): enhance virtual file handling

* feat(storage): enhance virtual file retrieval and path handling

* refactor(alias): rename path handling functions for clarity and consistency

* fix(alias): update path handling in Other method to use balanced path

* fix bug

* feat(alias): add file size validation

* feat(alias): add hash consistency check

* 移除哈希合并,

* fix(alias): wrong behavior for all_strict/deterministic_or_all

* Revert "fix(alias): wrong behavior for all_strict/deterministic_or_all"

This reverts commit f001f2d.

* fix(alias): wrong behavior for all_strict/deterministic_or_all

* feat(alias): support part-based read load balance

* fix(alias): list panic when leak conflict path

* fix(alias): remove Other load balance

* fix(alias): 修复 Link 方法中 resultLink 的返回类型和内容复制问题

* fix(alias): 更好的下载并发?

* chore(alias): all tips

* fix(alias): moving paths mismatch

---------




* fix(s3): use current time as default modified time (OpenListTeam#1860)

* fix(driver): fix file copy failure to 123pan due to incorrect etag (OpenListTeam#1874)

* ci(lang): sync only new fields (OpenListTeam#1881)

* fix(123_open): infinite recursive call (OpenListTeam#1854)

fix(123_open): token refresh logic

Fix token handling logic to avoid deadlock. Token method took reference of Alist's implementation.

* feat(qihoo360): fix bugs made by copliot

* fix(doubao_share): use new download info (OpenListTeam#1890)

fix(doubao_share): update file URL retrieval to use new download info structure



* feat(qihoo360): implement file upload functionality and enhance request handling

* fix(qihoo360): update user-agent

* feat(qihoo360): add User-Agent header for Sync.getVerifiedDownLoadUrl request

* feat(drivers/mega): support getting disk usage (OpenListTeam#1903)

* feat(drivers/mega): support getting disk usage

* fix

* feat(qihoo360): implement GetDetails and user detail retrieval functions

* feat(drivers/mega): support permanently deleting files (OpenListTeam#1913)

* feat(123pan): add offline download (OpenListTeam#1911)

* feat(123网盘): 添加123网盘离线下载功能

- 新增123网盘离线下载实现
- 添加相关API接口和常量配置
- 在路由和工具集中集成123网盘支持

* refactor(offline_download): 重构123网盘离线下载状态处理和类型定义

- 将离线下载相关类型定义从util.go移至types.go
- 更新状态获取api

* 移除了备选方案(/offline_download/task/status)

* feat(qihoo360): enhance GetDetails function and update UserDetailResp structure

* chore(strm): remove redundant param (OpenListTeam#1929)

* feat(drivers): support getting disk usage of some drivers (OpenListTeam#1905)

* feat(drivers): support getting disk usage of some drivers

* feat(drivers/degoo): implement GetDetails

* fix(fs/storage-details): fill used space rather than free space

* fix mega

* fix bsize type

* fix(cloudreve): Manually set path to avoid empty path (OpenListTeam#1933)

* fix(drivers/alist_v3): failed to unmarshal MeResp (OpenListTeam#1931)

* feat(drivers/webdav): add support for 302 redirects (OpenListTeam#1952)

* Remove the `OnlyProxy` restriction and obtain the redirected link to support 302

* Add `driver.Config` `PreferProxy` to recommend user to enable the proxy by default

---------



* fix(fs): panic when failed to get storage details (OpenListTeam#1964)

* chore(.github): update issue templates [no ci] (OpenListTeam#1976)

chore(.github): update issue templates

* fix(drivers/ftp): failed to get objs (OpenListTeam#1948)

fix(drivers/ftp): failed get objs

* feat(drivers/cloudreve_v4): implement Getter interface (OpenListTeam#1937)

feat(cloudreve_v4): implement Getter interface



* fix(drivers/github): failed to get objs (OpenListTeam#1915)

fix(drivers/github): failed get objs

* fix(drivers/strm): delete extra local directories in sync mode (OpenListTeam#1980)

* fix(ci): change unchecked regex (OpenListTeam#1993)

fix(ci/issue): change unchecked regex



* feat(drivers): add autoindex driver (OpenListTeam#1978)

* feat(drivers): add autoindex driver

* fix

* add NoUpload



* add TestParseSize



* go mod tidy



* use base.RestyClient



* fix: support evaluate size and modified time

* fix apache

* perf

* feat: support ignore size and modified time

* rename driver

---------




* fix(fs): handle non-existent destination directory in file transfer (OpenListTeam#1898)

* fix(FileTransferTask): skip copying if destination directory does not exist

* pass only object not found error

---------




* feat(drivers/cloudreve): implement GetDetails (OpenListTeam#1960)

* fix(driver/quark_uc): Fix display of non-compliant filenames (OpenListTeam#2000)

* fix(webdav/move): fix source file still exist after moving file by webdav (OpenListTeam#1979)

* perf(baidu_netdisk): reduce the number of file listing requests (OpenListTeam#2016)

* 本优化减少了百度网盘驱动下文件列表的请求次数,能加快文件浏览速度。此前只要文件夹下有至少一个文件,都会至少发出2次列表请求。



* fix(drivers/seafile): object not found when RootFolderPath != "/" (OpenListTeam#2010)

* fix(driver/seafile): object not found when RootFolderPath != "/"

* refactor(seafile): restructure Seafile driver for improved library handling and error management

* add IsDir method to LibraryInfo type

* improve initialization

* add repoID to RepoItemResp and update List method to set repoID

---------




* fix(drivers/alias): default sort & substitute link (OpenListTeam#1917)

* fix(drivers/alias): default sort & substitute link

* fix

* fix

* fix(drivers/cloudreve_v4): add IsFolder attribute to Getter response (OpenListTeam#2035)

* fix(drivers/cloudreve_v4): add IsFolder attribute to Getter response



* refactor(drivers/cloudreve_v4): implement File.fileToObject method



* fix(drivers/cloudreve_v4): implement 404 not found for getter



---------



* fix(drivers/quark): apply html escaping in quark (OpenListTeam#2046)

* fix(drivers/quark): apply html escaping in quark

* fix(api/remove): add validation for empty items in delete file list (OpenListTeam#1617)

* fix(FsRemove): add validation for empty items in delete file list

If Req.Names contains an empty string item, the whole directory will be removed. As a result we need add a simple guard to prevent such cases.



* fix(FsRemove): enhance validation to prevent unintended directory deletion

1. Use `utils.FixAndCleanPath` to correctly identify and block invalid names.
2. Change error handling from `return` to `continue`.



---------




* Merge commit from fork



* Merge commit from fork



* fix(drivers/teldrive): enhance file listing and upload functionality with pagination and random chunk naming (OpenListTeam#2034)

* fix(drivers/teldrive): enhance file listing and upload functionality with pagination and random chunk naming

* fix(drivers/teldrive): optimize file listing by removing unnecessary mutex and restructuring data handling

* Update drivers/teldrive/meta.go




---------




* fix(115_share): adjust 115 share driver for official API update (OpenListTeam#2068)

* fix(115_share): add user agent support and update driver dependency

* fix(115): fix download error

* feat: add thumbnail support for 115 driver and 115 share

- Add Thumb() method to FileObj in 115 driver to return thumbnail URL
- Add ThumbURL field to FileObj struct in 115 share utility
- Update 115driver dependency from v1.2.2 to v1.2.3 to support thumbnail functionality
- Implement Thumb() method for 115 share FileObj to return thumbnail URL

* chore(ci): add breaking change guideline to PR title check (OpenListTeam#2087)

* feat(ci): add PR title validation for breaking changes

Updated regex to allow '!' for breaking changes in PR titles.



* chore(pr): Update PR template

Add bilingual instructions for PR title formatting.



---------



* feat(drivers/123open): support sha1 reuse api (OpenListTeam#2089)

* feat(drivers/123open): support sha1 reuse api

* fix(drivers/123open): fix typos

* fix(deps): update go4.org digest to a507140 (OpenListTeam#2095)



* fix(‎drivers/quark_uc_tv) : Update error code judgment (OpenListTeam#2080)

* fix error code

* add ErrorInfo check

* chore(typo): fix typo in UpdateFileReq field name (OpenListTeam#2133)

Fix typo in UpdateFileReq field name

ref: OpenListTeam/115-sdk-go#3



* fix(driver/wps): fetch all files via multiple API invocations (OpenListTeam#2139)

fix(driver/wps): wps list all files in one request

* feat(security): add SECURITY.md (OpenListTeam#2147)

[skip ci]

Add SECURITY.md



* chore(handles/auth): improve error response (OpenListTeam#2148)

* chore(handles/auth): improve error response



* Apply suggestion from @xrgzs



---------



* feat(drivers/thunder*): implement GetDetails (OpenListTeam#2113)



* Fix critical auth bug: treat access_token_expire as absolute timestamp

The API returns access_token_expire as an absolute Unix timestamp, not a duration. The old code was adding it to current time, causing tokens to "expire" in year 2082. This meant tokens appeared valid even after actual expiration (1 hour), causing all API calls to fail after the program ran for some time.

Also added retry limit protection to prevent infinite recursion in error handling.



---------

Signed-off-by: zzzhr1990 <zzzhr@hotmail.com>
Signed-off-by: D@' 3z K!7 <99719341+Da3zKi7@users.noreply.github.com>
Signed-off-by: ShenLin <773933146@qq.com>
Signed-off-by: jenfonro <799170122@qq.com>
Signed-off-by: yuyamionini <46483865+yuyamionini@users.noreply.github.com>
Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>
Signed-off-by: MoYan <1561515308@qq.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>
Signed-off-by: KirCute <951206789@qq.com>
Signed-off-by: hcrgm <hcrgm@qq.com>
Signed-off-by: huyuantao <huyuantao@ultrarisc.com>
Signed-off-by: Chaloemchai <chaloemchai.yy@gmail.com>
Signed-off-by: LXY <767763591@qq.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewbieOrange <NewbieOrange@users.noreply.github.com>
Co-authored-by: KirCute <951206789@qq.com>
Co-authored-by: ShenLin <773933146@qq.com>
Co-authored-by: zzzhr1990 <zzzhr@hotmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Tursom K. Ulefits <33368546+tursom@users.noreply.github.com>
Co-authored-by: jenfonro <799170122@qq.com>
Co-authored-by: j2rong4cn <j2rong@qq.com>
Co-authored-by: ILoveScratch <ilovescratch@foxmail.com>
Co-authored-by: KirCute <kircute@foxmail.com>
Co-authored-by: jerrita <je5r1ta@icloud.com>
Co-authored-by: D@' 3z K!7 <99719341+Da3zKi7@users.noreply.github.com>
Co-authored-by: MadDogOwner <xiaoran@xrgzs.top>
Co-authored-by: walloo <51254954+varg1714@users.noreply.github.com>
Co-authored-by: MoYan <1561515308@qq.com>
Co-authored-by: Seven <53081179+Seven66677731@users.noreply.github.com>
Co-authored-by: ex-hentai <96158157+ex-hentai@users.noreply.github.com>
Co-authored-by: j2rong4cn <36783515+j2rong4cn@users.noreply.github.com>
Co-authored-by: hcrgm <hcrgm@qq.com>
Co-authored-by: nibazshab <44338441+nibazshab@users.noreply.github.com>
Co-authored-by: ASLant <77436463+Y-ASLant@users.noreply.github.com>
Co-authored-by: yuyamionini <46483865+yuyamionini@users.noreply.github.com>
Co-authored-by: Pikachu Ren <40362270+PIKACHUIM@users.noreply.github.com>
Co-authored-by: VXTLS <187420201+vxtls@users.noreply.github.com>
Co-authored-by: ImoutoHeaven <github_main@imoutoheaven.org>
Co-authored-by: ImoutoHeaven <noreply@imoutoheaven.org>
Co-authored-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Co-authored-by: wongz <wongz@users.noreply.github.com>
Co-authored-by: Mako (XSpy) <127767602+x-spy@users.noreply.github.com>
Co-authored-by: hshpy <hshpy.pengyu@gmail.com>
Co-authored-by: XZB-1248 <28593573+XZB-1248@users.noreply.github.com>
Co-authored-by: XZB-1248 <i@1248.ink>
Co-authored-by: TwoOnefour <lys214412@gmail.com>
Co-authored-by: foxxorcat <95907542+foxxorcat@users.noreply.github.com>
Co-authored-by: Seven <53081179+sevxn007@users.noreply.github.com>
Co-authored-by: 绎泽 <yize@tencent.to>
Co-authored-by: 我怎么就不是一只猫呢? <26274059+dezhishen@users.noreply.github.com>
Co-authored-by: Tron <ironboxplus@gmail.com>
Co-authored-by: Edward <73746306+WangEdward@users.noreply.github.com>
Co-authored-by: mcxiedidi <113833419+mcxiedidi@users.noreply.github.com>
Co-authored-by: Ljcbaby <46277145+ljcbaby@users.noreply.github.com>
Co-authored-by: cyk <dr_arc@163.com>
Co-authored-by: Cp0204 <Cp0204@qq.com>
Co-authored-by: mkitsdts <136291922+mkitsdts@users.noreply.github.com>
Co-authored-by: Rui Huang <1251433731@qq.com>
Co-authored-by: Khoray <hhkorm@gmail.com>
Co-authored-by: Hu Yuantao <130338111+datao2001@users.noreply.github.com>
Co-authored-by: Chaloemchai <chaloemchai.yy@gmail.com>
Co-authored-by: Shelton Zhu <498220739@qq.com>
Co-authored-by: gdm257 <gdm@disroot.org>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: LXY <767763591@qq.com>

---------

Signed-off-by: Wodlie <86234536+Wodlie@users.noreply.github.com>
Signed-off-by: zzzhr1990 <zzzhr@hotmail.com>
Signed-off-by: D@' 3z K!7 <99719341+Da3zKi7@users.noreply.github.com>
Signed-off-by: ShenLin <773933146@qq.com>
Signed-off-by: jenfonro <799170122@qq.com>
Signed-off-by: yuyamionini <46483865+yuyamionini@users.noreply.github.com>
Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>
Signed-off-by: MoYan <1561515308@qq.com>
Signed-off-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Signed-off-by: KirCute <951206789@qq.com>
Signed-off-by: hcrgm <hcrgm@qq.com>
Signed-off-by: huyuantao <huyuantao@ultrarisc.com>
Signed-off-by: Chaloemchai <chaloemchai.yy@gmail.com>
Signed-off-by: LXY <767763591@qq.com>
Co-authored-by: Suyunmeng <sumengjing@outlook.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewbieOrange <NewbieOrange@users.noreply.github.com>
Co-authored-by: KirCute <951206789@qq.com>
Co-authored-by: ShenLin <773933146@qq.com>
Co-authored-by: zzzhr1990 <zzzhr@hotmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Tursom K. Ulefits <33368546+tursom@users.noreply.github.com>
Co-authored-by: jenfonro <799170122@qq.com>
Co-authored-by: j2rong4cn <j2rong@qq.com>
Co-authored-by: ILoveScratch <ilovescratch@foxmail.com>
Co-authored-by: KirCute <kircute@foxmail.com>
Co-authored-by: jerrita <je5r1ta@icloud.com>
Co-authored-by: D@' 3z K!7 <99719341+Da3zKi7@users.noreply.github.com>
Co-authored-by: MadDogOwner <xiaoran@xrgzs.top>
Co-authored-by: walloo <51254954+varg1714@users.noreply.github.com>
Co-authored-by: MoYan <1561515308@qq.com>
Co-authored-by: Seven <53081179+Seven66677731@users.noreply.github.com>
Co-authored-by: ex-hentai <96158157+ex-hentai@users.noreply.github.com>
Co-authored-by: j2rong4cn <36783515+j2rong4cn@users.noreply.github.com>
Co-authored-by: hcrgm <hcrgm@qq.com>
Co-authored-by: nibazshab <44338441+nibazshab@users.noreply.github.com>
Co-authored-by: ASLant <77436463+Y-ASLant@users.noreply.github.com>
Co-authored-by: yuyamionini <46483865+yuyamionini@users.noreply.github.com>
Co-authored-by: Pikachu Ren <40362270+PIKACHUIM@users.noreply.github.com>
Co-authored-by: VXTLS <187420201+vxtls@users.noreply.github.com>
Co-authored-by: ImoutoHeaven <github_main@imoutoheaven.org>
Co-authored-by: ImoutoHeaven <noreply@imoutoheaven.org>
Co-authored-by: UcnacDx2 <127503808+UcnacDx2@users.noreply.github.com>
Co-authored-by: wongz <wongz@users.noreply.github.com>
Co-authored-by: Mako (XSpy) <127767602+x-spy@users.noreply.github.com>
Co-authored-by: hshpy <hshpy.pengyu@gmail.com>
Co-authored-by: XZB-1248 <28593573+XZB-1248@users.noreply.github.com>
Co-authored-by: XZB-1248 <i@1248.ink>
Co-authored-by: TwoOnefour <lys214412@gmail.com>
Co-authored-by: foxxorcat <95907542+foxxorcat@users.noreply.github.com>
Co-authored-by: Seven <53081179+sevxn007@users.noreply.github.com>
Co-authored-by: 绎泽 <yize@tencent.to>
Co-authored-by: 我怎么就不是一只猫呢? <26274059+dezhishen@users.noreply.github.com>
Co-authored-by: Tron <ironboxplus@gmail.com>
Co-authored-by: Edward <73746306+WangEdward@users.noreply.github.com>
Co-authored-by: mcxiedidi <113833419+mcxiedidi@users.noreply.github.com>
Co-authored-by: Ljcbaby <46277145+ljcbaby@users.noreply.github.com>
Co-authored-by: cyk <dr_arc@163.com>
Co-authored-by: Cp0204 <Cp0204@qq.com>
Co-authored-by: mkitsdts <136291922+mkitsdts@users.noreply.github.com>
Co-authored-by: Rui Huang <1251433731@qq.com>
Co-authored-by: Khoray <hhkorm@gmail.com>
Co-authored-by: Hu Yuantao <130338111+datao2001@users.noreply.github.com>
Co-authored-by: Chaloemchai <chaloemchai.yy@gmail.com>
Co-authored-by: Shelton Zhu <498220739@qq.com>
Co-authored-by: gdm257 <gdm@disroot.org>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: LXY <767763591@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.