diff --git a/src/main/java/com/sparrowwallet/sparrow/control/DownloadVerifierDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/DownloadVerifierDialog.java index 39dc4901..84624c42 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/DownloadVerifierDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/DownloadVerifierDialog.java @@ -56,14 +56,15 @@ public class DownloadVerifierDialog extends Dialog { private static final List MANIFEST_EXTENSIONS = List.of("txt"); private static final List PUBLIC_KEY_EXTENSIONS = List.of("asc"); private static final List MACOS_RELEASE_EXTENSIONS = List.of("dmg"); - private static final List WINDOWS_RELEASE_EXTENSIONS = List.of("exe", "zip"); + private static final List WINDOWS_RELEASE_EXTENSIONS = List.of("exe", "msi", "zip"); private static final List LINUX_RELEASE_EXTENSIONS = List.of("deb", "rpm", "tar.gz"); private static final List DISK_IMAGE_EXTENSIONS = List.of("img", "bin", "dfu"); private static final List ARCHIVE_EXTENSIONS = List.of("zip", "tar.gz", "tar.bz2", "tar.xz", "rar", "7z"); private static final String SPARROW_RELEASE_PREFIX = "sparrow-"; private static final String SPARROW_RELEASE_ALT_PREFIX = "sparrow_"; - private static final String SPARROW_SIGNATURE_SUFFIX = "-manifest.txt.asc"; + private static final String SPARROW_MANIFEST_SUFFIX = "-manifest.txt"; + private static final String SPARROW_SIGNATURE_SUFFIX = SPARROW_MANIFEST_SUFFIX + ".asc"; private static final Pattern SPARROW_RELEASE_VERSION = Pattern.compile("[0-9]+(\\.[0-9]+)*"); private static final long MIN_VALID_SPARROW_RELEASE_SIZE = 10 * 1024 * 1024; @@ -300,7 +301,7 @@ public class DownloadVerifierDialog extends Dialog { publicKeyDisabled.set(true); } - if(manifest.get().equals(release.get())) { + if(manifest.get().equals(release.get()) && !isSparrowManifest(manifest.get())) { manifestDisabled.set(true); releaseHash.setText("No hash required, signature signs release file directly"); releaseHash.setGraphic(GlyphUtils.getSuccessGlyph()); @@ -492,12 +493,19 @@ public class DownloadVerifierDialog extends Dialog { private File findReleaseFile(File manifestFile, Map manifestMap) { File initialFile = initial.get(); - if(initialFile != null) { + if(initialFile != null && initialFile.exists()) { for(File file : manifestMap.keySet()) { if(initialFile.getName().equals(file.getName())) { return initialFile; } } + + List> allExtensionLists = List.of(MACOS_RELEASE_EXTENSIONS, WINDOWS_RELEASE_EXTENSIONS, LINUX_RELEASE_EXTENSIONS, DISK_IMAGE_EXTENSIONS, ARCHIVE_EXTENSIONS); + for(List extensions : allExtensionLists) { + if(extensions.stream().anyMatch(ext -> initialFile.getName().toLowerCase(Locale.ROOT).endsWith(ext))) { + return initialFile; + } + } } List releaseExtensions = getReleaseFileExtensions(); @@ -592,6 +600,10 @@ public class DownloadVerifierDialog extends Dialog { return false; } + public static boolean isSparrowManifest(File manifestFile) { + return manifestFile.getName().startsWith(SPARROW_RELEASE_PREFIX) && manifestFile.getName().endsWith(SPARROW_MANIFEST_SUFFIX); + } + public void setSignatureFile(File signatureFile) { signature.set(signatureFile); }