2222
2323public abstract class DownloadUpdateMechanism implements UpdateMechanism <DownloadUpdateInfo > {
2424
25- private static final Logger LOG = LoggerFactory .getLogger (DownloadUpdateMechanism .class );
25+ private static final Logger LOG = LoggerFactory .getLogger (DownloadUpdateMechanism .class );
2626 private static final String LATEST_VERSION_API_URL = "https://api.cryptomator.org/connect/apps/desktop/latest-version?format=1" ;
2727 private static final ObjectMapper MAPPER = new ObjectMapper ();
2828
@@ -32,7 +32,8 @@ public DownloadUpdateInfo checkForUpdate(String currentVersion, HttpClient httpC
3232 HttpRequest request = HttpRequest .newBuilder ().uri (URI .create (LATEST_VERSION_API_URL )).build ();
3333 HttpResponse <InputStream > response = httpClient .send (request , HttpResponse .BodyHandlers .ofInputStream ());
3434 if (response .statusCode () != 200 ) {
35- throw new RuntimeException ("Failed to fetch release: " + response .statusCode ());
35+ LOG .warn ("Failed to fetch release: HTTP {}" , response .statusCode ());
36+ return null ;
3637 }
3738 var release = MAPPER .readValue (response .body (), LatestVersionResponse .class );
3839 return checkForUpdate (currentVersion , release );
@@ -94,7 +95,7 @@ public record LatestVersion(
9495 @ JsonIgnoreProperties (ignoreUnknown = true )
9596 public record Asset (
9697 @ JsonProperty ("name" ) String name ,
97- @ JsonProperty ("digest" ) String digest , // TODO: verify this starts with "sha256:"?
98+ @ JsonProperty ("digest" ) String digest ,
9899 @ JsonProperty ("size" ) long size ,
99100 @ JsonProperty ("downloadUrl" ) String downloadUrl
100101 ) {}
@@ -106,7 +107,9 @@ private class FirstStep extends DownloadUpdateStep {
106107 public FirstStep (Path workDir , DownloadUpdateInfo updateInfo ) {
107108 var uri = URI .create (updateInfo .asset ().downloadUrl );
108109 var destination = workDir .resolve (updateInfo .asset ().name );
109- var digest = HexFormat .of ().withLowerCase ().parseHex (updateInfo .asset ().digest .substring (7 )); // remove "sha256:" prefix
110+ var digest = updateInfo .asset ().digest ().startsWith ("sha256:" )
111+ ? HexFormat .of ().withLowerCase ().parseHex (updateInfo .asset ().digest .substring (7 )) // remove "sha256:" prefix
112+ : null ;
110113 var size = updateInfo .asset ().size ;
111114 super (uri , destination , digest , size );
112115 this .workDir = workDir ;
0 commit comments