From b9ff408bddf6fe896aec224ea9e1da457783795d Mon Sep 17 00:00:00 2001 From: Tra Date: Fri, 24 Jul 2026 17:53:56 +0800 Subject: [PATCH] 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); }