From a67dfcb7e194c63d3e98e5ae417c4dacd00a7a03 Mon Sep 17 00:00:00 2001 From: Skylot <118523+skylot@users.noreply.github.com> Date: Sun, 24 Nov 2024 18:52:32 +0000 Subject: [PATCH] fix(plugins): use release from asset if differ from release name with GitHub resolver --- .../plugins/tools/utils/PluginUtilsTest.java | 17 +++++++++++++++++ .../github/GithubReleaseResolver.java | 11 ++++++++--- .../jadx/plugins/tools/utils/PluginUtils.java | 19 +++++++++++++++++++ 3 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 jadx-cli/src/test/java/jadx/plugins/tools/utils/PluginUtilsTest.java diff --git a/jadx-cli/src/test/java/jadx/plugins/tools/utils/PluginUtilsTest.java b/jadx-cli/src/test/java/jadx/plugins/tools/utils/PluginUtilsTest.java new file mode 100644 index 000000000..f60ced5de --- /dev/null +++ b/jadx-cli/src/test/java/jadx/plugins/tools/utils/PluginUtilsTest.java @@ -0,0 +1,17 @@ +package jadx.plugins.tools.utils; + +import org.junit.jupiter.api.Test; + +import static jadx.plugins.tools.utils.PluginUtils.extractVersion; +import static org.assertj.core.api.Assertions.assertThat; + +class PluginUtilsTest { + + @Test + public void testExtractVersion() { + assertThat(extractVersion("plugin-name-v1.2.3.jar")).isEqualTo("1.2.3"); + assertThat(extractVersion("plugin-name-v1.2.jar")).isEqualTo("1.2"); + assertThat(extractVersion("1.2.3.jar")).isEqualTo("1.2.3"); + } + +} diff --git a/jadx-plugins-tools/src/main/java/jadx/plugins/tools/resolvers/github/GithubReleaseResolver.java b/jadx-plugins-tools/src/main/java/jadx/plugins/tools/resolvers/github/GithubReleaseResolver.java index b7472a4ce..558a74270 100644 --- a/jadx-plugins-tools/src/main/java/jadx/plugins/tools/resolvers/github/GithubReleaseResolver.java +++ b/jadx-plugins-tools/src/main/java/jadx/plugins/tools/resolvers/github/GithubReleaseResolver.java @@ -10,8 +10,7 @@ import jadx.plugins.tools.data.JadxPluginMetadata; import jadx.plugins.tools.resolvers.IJadxPluginResolver; import jadx.plugins.tools.resolvers.github.data.Asset; import jadx.plugins.tools.resolvers.github.data.Release; - -import static jadx.plugins.tools.utils.PluginUtils.removePrefix; +import jadx.plugins.tools.utils.PluginUtils; public class GithubReleaseResolver implements IJadxPluginResolver { private static final Pattern VERSION_PATTERN = Pattern.compile("v?\\d+\\.\\d+(\\.\\d+)?"); @@ -47,8 +46,14 @@ public class GithubReleaseResolver implements IJadxPluginResolver { private JadxPluginMetadata buildMetadata(Release release, LocationInfo info) { List assets = release.getAssets(); - String releaseVersion = removePrefix(release.getName(), "v"); + String releaseVersion = PluginUtils.removePrefix(release.getName(), "v"); Asset asset = searchPluginAsset(assets, info.getArtifactPrefix(), releaseVersion); + if (!asset.getName().contains(releaseVersion)) { + String assetVersion = PluginUtils.extractVersion(asset.getName()); + if (assetVersion != null) { + releaseVersion = assetVersion; + } + } JadxPluginMetadata metadata = new JadxPluginMetadata(); metadata.setVersion(releaseVersion); diff --git a/jadx-plugins-tools/src/main/java/jadx/plugins/tools/utils/PluginUtils.java b/jadx-plugins-tools/src/main/java/jadx/plugins/tools/utils/PluginUtils.java index 96974f594..f98af1c7a 100644 --- a/jadx-plugins-tools/src/main/java/jadx/plugins/tools/utils/PluginUtils.java +++ b/jadx-plugins-tools/src/main/java/jadx/plugins/tools/utils/PluginUtils.java @@ -5,6 +5,10 @@ import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.jetbrains.annotations.Nullable; public class PluginUtils { @@ -22,4 +26,19 @@ public class PluginUtils { throw new RuntimeException("Failed to download file: " + fileUrl, e); } } + + private static final Pattern VERSION_LONG = Pattern.compile(".*v?(\\d+\\.\\d+\\.\\d+).*"); + private static final Pattern VERSION_SHORT = Pattern.compile(".*v?(\\d+\\.\\d+).*"); + + public static @Nullable String extractVersion(String str) { + Matcher longMatcher = VERSION_LONG.matcher(str); + if (longMatcher.matches()) { + return longMatcher.group(1); + } + Matcher shortMatcher = VERSION_SHORT.matcher(str); + if (shortMatcher.matches()) { + return shortMatcher.group(1); + } + return null; + } }