From 1279549f99fcdaa06daaa9fd82176e0bd666b5d5 Mon Sep 17 00:00:00 2001 From: lkqm Date: Tue, 10 Oct 2023 14:46:17 +0800 Subject: [PATCH] fix(eolink): repair upload to eolink --- README.md | 4 +- docs/GUIDE.md | 2 +- .../io/apidocx/action/AbstractAction.java | 2 +- .../io/apidocx/base/sdk/eolink/EolinkApi.java | 9 ++--- .../apidocx/base/sdk/eolink/EolinkClient.java | 13 +++---- .../base/sdk/eolink/EolinkConstants.java | 1 - .../sdk/eolink/EolinkWebUrlCalculator.java | 16 ++++++-- .../sdk/eolink/request/GroupListRequest.java | 5 --- .../base/sdk/eolink/request/Response.java | 2 + .../base/sdk/eolink/util/ApiConverter.java | 5 +++ .../java/io/apidocx/config/ApidocxConfig.java | 5 ++- .../handle/eolink/EolinkUploadAction.java | 11 +++--- .../handle/eolink/config/EolinkSettings.java | 12 +----- .../eolink/config/EolinkSettingsDialog.java | 3 -- .../eolink/config/EolinkSettingsForm.form | 38 +++++-------------- .../eolink/config/EolinkSettingsForm.java | 9 ----- src/main/resources/META-INF/plugin.xml | 1 + 17 files changed, 54 insertions(+), 84 deletions(-) diff --git a/README.md b/README.md index aa5e056..c83e677 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ ## 使用 -1. 安装: 打开Idea -> File -> Settings -> Plugins, 搜索: Apidocx(原名: Yapi X) + +1. 安装: 打开Idea -> File -> Settings -> Plugins, 搜索: Apidocx 2. 配置: 项目根目录创建".yapix"文件, 内容: yapiProjectId=110 3. 上传: 光标放置在你的控制类或方法,右键执行: Upload To YApi ( 提示:如果未填登录信息,会弹窗提示 ) @@ -25,7 +26,6 @@ ## 交流 欢迎提出您的发现问题、需求、建议、以及提交代码来参与贡献。 -- QQ交流群:860701800 提示:如果您准备为该插件开发一个新功能,请先通过issues讨论,避免重复开发。 diff --git a/docs/GUIDE.md b/docs/GUIDE.md index ec9c8ee..fe0fd5d 100644 --- a/docs/GUIDE.md +++ b/docs/GUIDE.md @@ -63,7 +63,7 @@ |:---------------------|:------------------|:------------------------------------------------|:-----------------------------------------------| | yapiProjectId | integer | YApi项目id | | rap2ProjectId | integer | Rap2项目id | -| eolinkerProjectId | string | Eolinker项目id | +| eolinkProjectId | string | Eolink项目id | | showdocProjectId | string | ShowDoc项目id | | | | | | yapiUrl | string | YApi服务地址 | 场景:插件无法支持YApi统一登录方式,此时可使用项目token方式 | diff --git a/src/main/java/io/apidocx/action/AbstractAction.java b/src/main/java/io/apidocx/action/AbstractAction.java index 9b5bde3..c419b91 100644 --- a/src/main/java/io/apidocx/action/AbstractAction.java +++ b/src/main/java/io/apidocx/action/AbstractAction.java @@ -252,7 +252,7 @@ public void run(@NotNull ProgressIndicator indicator) { if (urls != null && !urls.isEmpty()) { ApiUploadResult uploadResult = urls.get(0); String url = urls.size() == 1 ? uploadResult.getApiUrl() : uploadResult.getCategoryUrl(); - if (url != null && url.length() > 0) { + if (url != null && !url.isEmpty()) { notifyInfo("Upload successful", format("%s", url, url)); } else { notifyInfo("Upload successful"); diff --git a/src/main/java/io/apidocx/base/sdk/eolink/EolinkApi.java b/src/main/java/io/apidocx/base/sdk/eolink/EolinkApi.java index 832b1e8..2469059 100644 --- a/src/main/java/io/apidocx/base/sdk/eolink/EolinkApi.java +++ b/src/main/java/io/apidocx/base/sdk/eolink/EolinkApi.java @@ -19,7 +19,6 @@ import io.apidocx.base.sdk.eolink.request.LoginRequest; import io.apidocx.base.sdk.eolink.request.LoginResponseData; import io.apidocx.base.sdk.eolink.request.SsoResponse; -import java.net.URI; import java.util.Map; @@ -35,9 +34,9 @@ static Feign.Builder feignBuilder() { /** * 登录 */ - @RequestLine("POST") + @RequestLine("POST /userCenter/common/sso/login") @Headers("Content-Type: application/json") - SsoResponse login(URI uri, LoginRequest request); + SsoResponse login(LoginRequest request); /** * 获取当前登录用户信息 @@ -54,13 +53,13 @@ static Feign.Builder feignBuilder() { /** * 获取分组列表 */ - @RequestLine("GET /api/apiManagementPro/ApiGroup/getApiGroupData") + @RequestLine("POST /api/apiManagementPro/ApiGroup/getApiGroupData") GroupListResponse getGroupList(GroupListRequest request); /** * 获取接口列表 */ - @RequestLine("GET /api/apiManagementPro/Api/getApiListByCondition") + @RequestLine("POST /api/apiManagementPro/Api/getApiListByCondition") ApiListResponse getApiList(ApiListRequest request); /** diff --git a/src/main/java/io/apidocx/base/sdk/eolink/EolinkClient.java b/src/main/java/io/apidocx/base/sdk/eolink/EolinkClient.java index 1527df0..7445735 100644 --- a/src/main/java/io/apidocx/base/sdk/eolink/EolinkClient.java +++ b/src/main/java/io/apidocx/base/sdk/eolink/EolinkClient.java @@ -24,7 +24,6 @@ import io.apidocx.base.sdk.eolink.request.TestResult; import io.apidocx.base.sdk.eolink.request.TestResult.Code; import io.apidocx.base.sdk.eolink.util.ApiConverter; -import java.net.URI; import java.util.Collections; import java.util.List; import java.util.Map; @@ -38,7 +37,6 @@ public class EolinkClient { private final EolinkApi eolinkApi; - private final String loginUrl; /** * 服务地址 @@ -60,11 +58,10 @@ public class EolinkClient { private UserInfo userInfo; - public EolinkClient(String url, String loginUrl, String account, String password, String accessToken) { + public EolinkClient(String url, String account, String password, String accessToken) { checkArgument(StringUtils.isNotEmpty(url), "url can't be null"); checkArgument(StringUtils.isNotEmpty(account), "account can't be null"); checkArgument(StringUtils.isNotEmpty(password), "password can't be null"); - this.loginUrl = loginUrl; this.url = url; this.account = account; this.password = password; @@ -171,7 +168,7 @@ public ApiSaveResponse saveApi(String projectHashKey, ApiInfo api) { } } - private String getSpaceKey() { + public String getSpaceKey() { if (this.userInfo != null) { return this.userInfo.getSpaceKey(); } @@ -203,7 +200,8 @@ private EolinkApi createApiClient(String url) { if (value instanceof Response) { Response responseValue = (Response) value; if (!responseValue.isSuccess()) { - throw new EolinkException(path, responseValue.getStatusCode()); + String errorMsg = StringUtils.defaultIfEmpty(responseValue.getErrorMsg(), responseValue.getStatusCode()); + throw new EolinkException(path, responseValue.getStatusCode(), errorMsg); } } return value; @@ -229,8 +227,7 @@ private LoginResponseData doLogin() { loginREquest.setPassword(this.password); loginREquest.setUsername(this.account); - URI loginUri = URI.create(this.loginUrl + EolinkConstants.Login); - SsoResponse response = eolinkApi.login(loginUri, loginREquest); + SsoResponse response = eolinkApi.login(loginREquest); return response.getData(); } } diff --git a/src/main/java/io/apidocx/base/sdk/eolink/EolinkConstants.java b/src/main/java/io/apidocx/base/sdk/eolink/EolinkConstants.java index b3ce712..b28bce8 100644 --- a/src/main/java/io/apidocx/base/sdk/eolink/EolinkConstants.java +++ b/src/main/java/io/apidocx/base/sdk/eolink/EolinkConstants.java @@ -3,7 +3,6 @@ public interface EolinkConstants { String Login = "/userCenter/common/sso/login"; - String PageApiList = "/home/api_studio/inside/api/list"; static boolean isLoginPath(String path) { return path != null && path.contains(Login); diff --git a/src/main/java/io/apidocx/base/sdk/eolink/EolinkWebUrlCalculator.java b/src/main/java/io/apidocx/base/sdk/eolink/EolinkWebUrlCalculator.java index 2339b0a..f4020e2 100644 --- a/src/main/java/io/apidocx/base/sdk/eolink/EolinkWebUrlCalculator.java +++ b/src/main/java/io/apidocx/base/sdk/eolink/EolinkWebUrlCalculator.java @@ -11,8 +11,18 @@ public EolinkWebUrlCalculator(String url) { /** * 计算页面接口列表地址 */ - public String calculateApiListUrl(String projectHashKey, Long groupId) { - String query = String.format("?projectHashKey=%s&groupID=%d", projectHashKey, groupId); - return url + EolinkConstants.PageApiList + query; + public String calculateApiListUrl(String spaceKey, String projectHashKey, Long groupId, Long apiId) { + if (groupId == null) { + groupId = -1L; + } + if (apiId != null) { + String pageTpl = "/home/api-studio/inside/%s/api/%s/detail/%s?spaceKey=%s"; + String page = String.format(pageTpl, projectHashKey, groupId, apiId, spaceKey); + return url + page; + } else { + String pageTpl = "/home/api-studio/inside/%s/api/%s/list?spaceKey=%s"; + String page = String.format(pageTpl, projectHashKey, groupId, spaceKey); + return url + page; + } } } diff --git a/src/main/java/io/apidocx/base/sdk/eolink/request/GroupListRequest.java b/src/main/java/io/apidocx/base/sdk/eolink/request/GroupListRequest.java index ce83fa5..c52907f 100644 --- a/src/main/java/io/apidocx/base/sdk/eolink/request/GroupListRequest.java +++ b/src/main/java/io/apidocx/base/sdk/eolink/request/GroupListRequest.java @@ -15,9 +15,4 @@ public class GroupListRequest { */ private String spaceKey; - /** - * 模块 - */ - private Long module = 2L; - } diff --git a/src/main/java/io/apidocx/base/sdk/eolink/request/Response.java b/src/main/java/io/apidocx/base/sdk/eolink/request/Response.java index e09fb25..b4ea444 100644 --- a/src/main/java/io/apidocx/base/sdk/eolink/request/Response.java +++ b/src/main/java/io/apidocx/base/sdk/eolink/request/Response.java @@ -9,6 +9,8 @@ public class Response { protected String statusCode; + protected String errorMsg; + private static final Set SUCCESS_CODES; static { diff --git a/src/main/java/io/apidocx/base/sdk/eolink/util/ApiConverter.java b/src/main/java/io/apidocx/base/sdk/eolink/util/ApiConverter.java index 202c4d1..3431803 100644 --- a/src/main/java/io/apidocx/base/sdk/eolink/util/ApiConverter.java +++ b/src/main/java/io/apidocx/base/sdk/eolink/util/ApiConverter.java @@ -67,6 +67,11 @@ public static ApiSaveRequest convertApiSaveRequest(String projectHashKey, ApiInf data.setTagID(api.getTagID()); data.setApiType(api.getApiType()); data.setFileList(api.getFileList()); + + if (data.getApiNoteType() == null) { + // 兼容处理 + data.setApiNoteType(1); + } return data; } } diff --git a/src/main/java/io/apidocx/config/ApidocxConfig.java b/src/main/java/io/apidocx/config/ApidocxConfig.java index 8780ab0..583c586 100644 --- a/src/main/java/io/apidocx/config/ApidocxConfig.java +++ b/src/main/java/io/apidocx/config/ApidocxConfig.java @@ -153,7 +153,10 @@ public static ApidocxConfig fromProperties(Properties properties) { String yapiUrl = properties.getProperty("yapiUrl", ""); String yapiProjectToken = properties.getProperty("yapiProjectToken", ""); String rap2ProjectId = properties.getProperty("rap2ProjectId", ""); - String eolinkProjectId = properties.getProperty("eolinkerProjectId", ""); + String eolinkProjectId = properties.getProperty("eolinkProjectId", ""); + if (StringUtils.isEmpty(eolinkProjectId)) { + eolinkProjectId = properties.getProperty("eolinkerProjectId", ""); + } String showdocProjectId = properties.getProperty("showdocProjectId", ""); String apifoxProjectId = properties.getProperty("apifoxProjectId", ""); String returnWrapType = properties.getProperty("returnWrapType", ""); diff --git a/src/main/java/io/apidocx/handle/eolink/EolinkUploadAction.java b/src/main/java/io/apidocx/handle/eolink/EolinkUploadAction.java index 40567aa..950cfdb 100644 --- a/src/main/java/io/apidocx/handle/eolink/EolinkUploadAction.java +++ b/src/main/java/io/apidocx/handle/eolink/EolinkUploadAction.java @@ -30,7 +30,7 @@ public class EolinkUploadAction extends AbstractAction { public boolean before(AnActionEvent event, ApidocxConfig config) { String projectId = config.getEolinkProjectId(); if (StringUtils.isEmpty(projectId)) { - notifyError("Config file error", "eolinkerProjectId must not be empty."); + notifyError("Config file error", "eolinkProjectId must not be empty."); return false; } @@ -49,18 +49,17 @@ public void handle(AnActionEvent event, ApidocxConfig config, List apis) { Project project = event.getData(CommonDataKeys.PROJECT); EolinkSettings settings = EolinkSettings.getInstance(); - EolinkClient client = new EolinkClient(settings.getUrl(), settings.getLoginUrl(), settings.getAccount(), settings.getPassword(), settings.getAccessToken()); + EolinkClient client = new EolinkClient(settings.getUrl(), settings.getAccount(), settings.getPassword(), settings.getAccessToken()); EolinkUploader uploader = new EolinkUploader(client); EolinkWebUrlCalculator urlCalculator = new EolinkWebUrlCalculator(settings.getWebUrl()); super.handleUploadAsync(project, apis, api -> { ApiInfo eapi = uploader.upload(projectId, api); - + String spaceKey = client.getSpaceKey(); ApiUploadResult result = new ApiUploadResult(); - result.setCategoryUrl(urlCalculator.calculateApiListUrl(projectId, - eapi.getBaseInfo().getGroupID())); - result.setApiUrl(result.getCategoryUrl()); + result.setCategoryUrl(urlCalculator.calculateApiListUrl(spaceKey, projectId, eapi.getBaseInfo().getGroupID(), null)); + result.setApiUrl(urlCalculator.calculateApiListUrl(spaceKey, projectId, eapi.getBaseInfo().getGroupID(), eapi.getBaseInfo().getApiID())); return result; }, null); } diff --git a/src/main/java/io/apidocx/handle/eolink/config/EolinkSettings.java b/src/main/java/io/apidocx/handle/eolink/config/EolinkSettings.java index 472cf17..f3d97d1 100644 --- a/src/main/java/io/apidocx/handle/eolink/config/EolinkSettings.java +++ b/src/main/java/io/apidocx/handle/eolink/config/EolinkSettings.java @@ -26,11 +26,6 @@ public class EolinkSettings implements PersistentStateComponent private static final String PASSWORD_KEY = "eolinker"; - /** - * 登录地址 - */ - private String loginUrl; - /** * 服务页面地址 */ @@ -88,14 +83,13 @@ public void loadState(@NotNull EolinkSettings state) { public boolean isValidate() { return StringUtils.isNotEmpty(url) && StringUtils.isNotEmpty(webUrl) - && StringUtils.isNotEmpty(loginUrl) && StringUtils.isNotEmpty(account) && StringUtils.isNotEmpty(password); } public TestResult testSettings() { EolinkSettings settings = this; // 测试账户 - EolinkClient client = new EolinkClient(settings.getUrl(), settings.loginUrl, settings.getAccount(), + EolinkClient client = new EolinkClient(settings.getUrl(), settings.getAccount(), settings.getPassword(), settings.getAccessToken()); TestResult testResult = client.test(); Code code = testResult.getCode(); @@ -122,9 +116,6 @@ public boolean equals(Object o) { if (webUrl != null ? !webUrl.equals(that.webUrl) : that.webUrl != null) { return false; } - if (loginUrl != null ? !loginUrl.equals(that.loginUrl) : that.loginUrl != null) { - return false; - } if (account != null ? !account.equals(that.account) : that.account != null) { return false; } @@ -134,7 +125,6 @@ public boolean equals(Object o) { @Override public int hashCode() { int result = url != null ? url.hashCode() : 0; - result = 31 * result + (loginUrl != null ? loginUrl.hashCode() : 0); result = 31 * result + (webUrl != null ? webUrl.hashCode() : 0); result = 31 * result + (account != null ? account.hashCode() : 0); result = 31 * result + (password != null ? password.hashCode() : 0); diff --git a/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsDialog.java b/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsDialog.java index 6ece56f..2e5a11f 100644 --- a/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsDialog.java +++ b/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsDialog.java @@ -80,9 +80,6 @@ protected ValidationInfo doValidate() { if (StringUtils.isEmpty(data.getWebUrl())) { return new ValidationInfo("webUrl must not be empty", form.getWebUrlField()); } - if (StringUtils.isEmpty(data.getLoginUrl())) { - return new ValidationInfo("loginUrl must not be empty", form.getLoginUrlField()); - } if (StringUtils.isEmpty(data.getAccount())) { return new ValidationInfo("account must not be empty", form.getAccountField()); } diff --git a/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsForm.form b/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsForm.form index 9e04ce9..e6f2c53 100644 --- a/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsForm.form +++ b/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsForm.form @@ -3,12 +3,12 @@ - + - + @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -54,7 +54,7 @@ - + @@ -64,7 +64,7 @@ - + @@ -72,7 +72,7 @@ - + @@ -80,25 +80,7 @@ - - - - - - - - - - - - - - - - - - - + diff --git a/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsForm.java b/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsForm.java index a79544f..ac08175 100644 --- a/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsForm.java +++ b/src/main/java/io/apidocx/handle/eolink/config/EolinkSettingsForm.java @@ -13,9 +13,7 @@ public class EolinkSettingsForm { private JPasswordField passwordField; private JPanel panel; private JTextField webUrlField; - private JTextField loginUrlField; - private static final String EOLINKER_SSO_URL = "https://sso.eolink.com"; private static final String EOLINKER_URL = "https://apis.eolink.com"; private static final String EOLINKER_WEB_URL = "https://riag.w.eolink.com"; @@ -26,10 +24,8 @@ public JPanel getPanel() { public void set(EolinkSettings data) { String url = StringUtils.isNotEmpty(data.getUrl()) ? data.getUrl() : EOLINKER_URL; String webUrl = StringUtils.isNotEmpty(data.getWebUrl()) ? data.getWebUrl() : EOLINKER_WEB_URL; - String loginUrl = StringUtils.isNotEmpty(data.getLoginUrl()) ? data.getLoginUrl() : EOLINKER_SSO_URL; urlField.setText(url); webUrlField.setText(webUrl); - loginUrlField.setText(loginUrl); accountField.setText(data.getAccount()); passwordField.setText(data.getPassword()); } @@ -40,7 +36,6 @@ public EolinkSettings get() { data.setAccount(accountField.getText().trim()); data.setPassword(new String(passwordField.getPassword()).trim()); data.setWebUrl(webUrlField.getText().trim()); - data.setLoginUrl(loginUrlField.getText().trim()); return data; } @@ -54,10 +49,6 @@ public JTextField getWebUrlField() { return webUrlField; } - public JTextField getLoginUrlField() { - return loginUrlField; - } - public JFormattedTextField getAccountField() { return accountField; } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 9ae6170..36bd7fc 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -75,6 +75,7 @@ - fix: 修复新版本对Rap2上传兼容性问题
+ - fix: 修复Eolink上传问题

1.1.4:
- feat: 支持配置复制cURL的主机路径