From b9ff408bddf6fe896aec224ea9e1da457783795d Mon Sep 17 00:00:00 2001 From: Tra Date: Fri, 24 Jul 2026 17:53:56 +0800 Subject: [PATCH 1/3] fix: UC subdirectory listing fails due to missing stoken parameter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the frontend requests subdirectory contents for UC drive shares, the stoken query parameter is mishandled in two places, breaking directory browsing: 1. URLParamUtil.handleTruncatedUrl() does not exclude stoken from the URL construction loop. As a result, the stoken value gets appended to the share URL (e.g. https://drive.uc.cn/s/xxx?stoken=yyy). The extra query string breaks the UC URL regex match in PanDomainTemplate, causing the parser to fall back to the default IPanTool.parseFileList() which returns "Not implemented yet". 2. ParserApi.getFileList() does not accept stoken as a method parameter and does not forward it to ShareLinkInfo.otherParam. Even when the stoken is present in the request URL, UcTool.parseFileList() cannot find it and must re-authenticate against the UC API — which fails without proper auth cookies. The fix: - URLParamUtil: add stoken to the param exclusion list - ParserApi: add String stoken parameter and put it into otherParam Both first-level and nested directory listing work correctly after this fix. --- .../src/main/java/cn/qaiu/lz/common/util/URLParamUtil.java | 2 +- .../src/main/java/cn/qaiu/lz/web/controller/ParserApi.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/web-service/src/main/java/cn/qaiu/lz/common/util/URLParamUtil.java b/web-service/src/main/java/cn/qaiu/lz/common/util/URLParamUtil.java index a640eb3..1d8a997 100644 --- a/web-service/src/main/java/cn/qaiu/lz/common/util/URLParamUtil.java +++ b/web-service/src/main/java/cn/qaiu/lz/common/util/URLParamUtil.java @@ -70,7 +70,7 @@ public class URLParamUtil { for (String paramName : params.names()) { // 忽略 "url", "pwd", "dirId", "uuid", "auth" 参数(这些参数单独处理,不应拼接到分享URL中) if (!paramName.equals("url") && !paramName.equals("pwd") && !paramName.equals("dirId") - && !paramName.equals("uuid") && !paramName.equals("auth")) { + && !paramName.equals("uuid") && !paramName.equals("auth") && !paramName.equals("stoken")) { if (firstParam) { urlBuilder.append("?"); firstParam = false; diff --git a/web-service/src/main/java/cn/qaiu/lz/web/controller/ParserApi.java b/web-service/src/main/java/cn/qaiu/lz/web/controller/ParserApi.java index 6e16346..9e71e41 100644 --- a/web-service/src/main/java/cn/qaiu/lz/web/controller/ParserApi.java +++ b/web-service/src/main/java/cn/qaiu/lz/web/controller/ParserApi.java @@ -161,7 +161,7 @@ public class ParserApi { @RouteMapping("/getFileList") public Future> getFileList(HttpServerRequest request, String pwd, String dirId, String uuid, - String auth) { + String stoken, String auth) { String url = URLParamUtil.parserParams(request); ParserCreate parserCreate; try { @@ -176,6 +176,9 @@ public class ParserApi { if (StringUtils.isNotBlank(dirId)) { parserCreate.getShareLinkInfo().getOtherParam().put("dirId", dirId); } + if (StringUtils.isNotBlank(stoken)) { + parserCreate.getShareLinkInfo().getOtherParam().put("stoken", stoken); + } if (StringUtils.isNotBlank(uuid)) { parserCreate.getShareLinkInfo().getOtherParam().put("uuid", uuid); } From 0fb53d5159f3c9a65f90cf01e920fb87af910d6e Mon Sep 17 00:00:00 2001 From: Rune <93461506+newbie000652@users.noreply.github.com> Date: Fri, 24 Jul 2026 19:54:22 +0800 Subject: [PATCH 2/3] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../src/main/java/cn/qaiu/lz/common/util/URLParamUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-service/src/main/java/cn/qaiu/lz/common/util/URLParamUtil.java b/web-service/src/main/java/cn/qaiu/lz/common/util/URLParamUtil.java index 1d8a997..80b1d94 100644 --- a/web-service/src/main/java/cn/qaiu/lz/common/util/URLParamUtil.java +++ b/web-service/src/main/java/cn/qaiu/lz/common/util/URLParamUtil.java @@ -68,7 +68,7 @@ public class URLParamUtil { boolean firstParam = !decodedUrl.contains("?"); for (String paramName : params.names()) { - // 忽略 "url", "pwd", "dirId", "uuid", "auth" 参数(这些参数单独处理,不应拼接到分享URL中) + // 忽略 "url", "pwd", "dirId", "uuid", "auth", "stoken" 参数(这些参数单独处理,不应拼接到分享URL中) if (!paramName.equals("url") && !paramName.equals("pwd") && !paramName.equals("dirId") && !paramName.equals("uuid") && !paramName.equals("auth") && !paramName.equals("stoken")) { if (firstParam) { From bdd253383d78fb404701c0bf506833a8c9a8ad86 Mon Sep 17 00:00:00 2001 From: Tra Date: Fri, 24 Jul 2026 20:30:53 +0800 Subject: [PATCH 3/3] docs: add stoken parameter to /v2/getFileList OpenAPI spec --- web-service/doc/openapi.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/web-service/doc/openapi.json b/web-service/doc/openapi.json index d86f1fc..25324f5 100644 --- a/web-service/doc/openapi.json +++ b/web-service/doc/openapi.json @@ -386,6 +386,16 @@ "type": "string", "example": "uuid123" } + }, + { + "name": "stoken", + "in": "query", + "required": false, + "description": "分享 token,用于子目录解析时复用认证状态", + "schema": { + "type": "string", + "example": "OASBe5qM0pg2VvvyLM..." + } } ], "responses": {