diff --git a/.travis.yml b/.travis.yml
index 67ff14276..98a335288 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,7 @@
language: java
-sudo: required
-dist: trusty
+sudo: false
jdk:
-- oraclejdk8
+- oraclejdk9
cache:
directories:
- $HOME/.m2
@@ -12,6 +11,9 @@ env:
- secure: "lV9OwUbHMrMpLUH1CY+Z4puLDdFXytudyPlG1eGRsesdpuG6KM3uQVz6uAtf6lrU8DRbMM/T7ML+PmvQ4UoPPYLdLxESLLBat2qUPOIVBOhTSlCc7I0DmGy04CSvkeMy8dPaQC0ukgNiR7zwoNzfcpGRN/U9S8tziDruuHoZSrg=" # BINTRAY_API_KEY
- secure: "oWFgRTVP6lyTa7qVxlvkpm20MtVc3BtmsNXQJS6bfg2A0o/iCQMNx7OD59BaafCLGRKvCcJVESiC8FlSylVMS7CDSyYu0gg70NUiIuHp4NBM5inFWYCy/PdQsCTzr5uvNG+rMFQpMFRaCV0FrfM3tLondcVkhsHL68l93Xoexx4=" # CODACY_PROJECT_TOKEN
addons:
+ apt:
+ packages:
+ - haveged
coverity_scan:
project:
name: "cryptomator/cryptomator"
@@ -19,13 +21,16 @@ addons:
build_command: "mvn -fmain/pom.xml clean test -DskipTests"
branch_pattern: release.*
install:
-# "clean" needed until https://bugs.openjdk.java.net/browse/JDK-8067747 is resolved.
-- mvn -fmain/pom.xml clean package -DskipTests dependency:go-offline -Pcoverage
-- mvn -fmain/pom.xml clean package -DskipTests dependency:go-offline -Prelease
+- mvn -fmain/pom.xml clean install -DskipTests dependency:go-offline -Pcoverage,release # "clean install" needed until we can exclude artifacts currently in the reactor, see https://maven.apache.org/plugins/maven-dependency-plugin/go-offline-mojo.html#excludeReactor and https://issues.apache.org/jira/browse/MDEP-568
script:
- mvn --update-snapshots -fmain/pom.xml clean test jacoco:report verify -Pcoverage
+after_success:
+- jdk_switcher use oraclejdk8
+- curl -o ~/codacy-coverage-reporter-assembly-latest.jar https://oss.sonatype.org/service/local/repositories/releases/content/com/codacy/codacy-coverage-reporter/2.0.1/codacy-coverage-reporter-2.0.1-assembly.jar
+- $JAVA_HOME/bin/java -cp ~/codacy-coverage-reporter-assembly-latest.jar com.codacy.CodacyCoverageReporter -l Java -r main/jacoco-report/target/site/jacoco-aggregate/jacoco.xml
before_deploy:
-- mvn -fmain/pom.xml -Prelease clean package -DskipTests
+- jdk_switcher use oraclejdk9
+- mvn -fmain/pom.xml -Prelease package -DskipTests
deploy:
- provider: releases
prerelease: false
diff --git a/main/commons/pom.xml b/main/commons/pom.xml
index b95226f60..80d96e00c 100644
--- a/main/commons/pom.xml
+++ b/main/commons/pom.xml
@@ -34,10 +34,6 @@
com.google.dagger
dagger
-
- com.google.dagger
- dagger-compiler
-
diff --git a/main/jacoco-report/pom.xml b/main/jacoco-report/pom.xml
index e9be46b10..691a1e456 100644
--- a/main/jacoco-report/pom.xml
+++ b/main/jacoco-report/pom.xml
@@ -27,27 +27,6 @@
org.cryptomator
launcher
-
-
-
- org.apache.logging.log4j
- *
-
-
-
-
-
-
- com.codacy
- codacy-coverage-reporter
- 1.0.13
- assembly
-
-
- *
- *
-
-
@@ -66,28 +45,6 @@
-
- org.codehaus.mojo
- exec-maven-plugin
- 1.5.0
-
-
- verify
-
- java
-
-
- com.codacy.CodacyCoverageReporter
-
- -l
- Java
- -r
- ${project.build.directory}/site/jacoco-aggregate/jacoco.xml
-
-
-
-
-
diff --git a/main/keychain/pom.xml b/main/keychain/pom.xml
index 97721fd3b..1d2ae0e0a 100644
--- a/main/keychain/pom.xml
+++ b/main/keychain/pom.xml
@@ -34,10 +34,6 @@
com.google.dagger
dagger
-
- com.google.dagger
- dagger-compiler
-
diff --git a/main/keychain/src/main/java/org/cryptomator/keychain/KeychainModule.java b/main/keychain/src/main/java/org/cryptomator/keychain/KeychainModule.java
index f45492d1b..5db7bc372 100644
--- a/main/keychain/src/main/java/org/cryptomator/keychain/KeychainModule.java
+++ b/main/keychain/src/main/java/org/cryptomator/keychain/KeychainModule.java
@@ -8,17 +8,27 @@ package org.cryptomator.keychain;
import java.util.Optional;
import java.util.Set;
-import org.cryptomator.jni.JniModule;
-
import com.google.common.collect.Sets;
-
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.ElementsIntoSet;
+import org.cryptomator.jni.JniFunctions;
+import org.cryptomator.jni.MacFunctions;
+import org.cryptomator.jni.WinFunctions;
-@Module(includes = {JniModule.class})
+@Module
public class KeychainModule {
+ @Provides
+ Optional provideOptionalMacFunctions() {
+ return JniFunctions.macFunctions();
+ }
+
+ @Provides
+ Optional provideOptionalWinFunctions() {
+ return JniFunctions.winFunctions();
+ }
+
@Provides
@ElementsIntoSet
Set provideKeychainAccessStrategies(MacSystemKeychainAccess macKeychain, WindowsProtectedKeychainAccess winKeychain) {
diff --git a/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java b/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java
index 6a8122129..b3b27a4ae 100644
--- a/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java
+++ b/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java
@@ -15,35 +15,35 @@ import org.cryptomator.jni.MacKeychainAccess;
class MacSystemKeychainAccess implements KeychainAccessStrategy {
- private final MacKeychainAccess keychain;
+ private final Optional macFunctions;
@Inject
public MacSystemKeychainAccess(Optional macFunctions) {
- if (macFunctions.isPresent()) {
- this.keychain = macFunctions.get().keychainAccess();
- } else {
- this.keychain = null;
- }
+ this.macFunctions = macFunctions;
+ }
+
+ private MacKeychainAccess keychain() {
+ return macFunctions.orElseThrow(IllegalStateException::new).keychainAccess();
}
@Override
public void storePassphrase(String key, CharSequence passphrase) {
- keychain.storePassword(key, passphrase);
+ keychain().storePassword(key, passphrase);
}
@Override
public char[] loadPassphrase(String key) {
- return keychain.loadPassword(key);
+ return keychain().loadPassword(key);
}
@Override
public boolean isSupported() {
- return SystemUtils.IS_OS_MAC_OSX && keychain != null;
+ return SystemUtils.IS_OS_MAC_OSX && macFunctions.isPresent();
}
@Override
public void deletePassphrase(String key) {
- keychain.deletePassword(key);
+ keychain().deletePassword(key);
}
}
diff --git a/main/keychain/src/main/java/org/cryptomator/keychain/WindowsProtectedKeychainAccess.java b/main/keychain/src/main/java/org/cryptomator/keychain/WindowsProtectedKeychainAccess.java
index f31536aff..57d9cdfa7 100644
--- a/main/keychain/src/main/java/org/cryptomator/keychain/WindowsProtectedKeychainAccess.java
+++ b/main/keychain/src/main/java/org/cryptomator/keychain/WindowsProtectedKeychainAccess.java
@@ -5,8 +5,6 @@
*******************************************************************************/
package org.cryptomator.keychain;
-import static java.nio.charset.StandardCharsets.UTF_8;
-
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -31,12 +29,6 @@ import java.util.UUID;
import javax.inject.Inject;
-import org.apache.commons.lang3.SystemUtils;
-import org.cryptomator.jni.WinDataProtection;
-import org.cryptomator.jni.WinFunctions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import com.google.common.io.BaseEncoding;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -49,6 +41,13 @@ import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
+import org.apache.commons.lang3.SystemUtils;
+import org.cryptomator.jni.WinDataProtection;
+import org.cryptomator.jni.WinFunctions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
class WindowsProtectedKeychainAccess implements KeychainAccessStrategy {
@@ -57,19 +56,15 @@ class WindowsProtectedKeychainAccess implements KeychainAccessStrategy {
.registerTypeHierarchyAdapter(byte[].class, new ByteArrayJsonAdapter()) //
.disableHtmlEscaping().create();
- private final WinDataProtection dataProtection;
+ private final Optional winFunctions;
private final Path keychainPath;
private Map keychainEntries;
@Inject
public WindowsProtectedKeychainAccess(Optional winFunctions) {
- if (winFunctions.isPresent()) {
- this.dataProtection = winFunctions.get().dataProtection();
- } else {
- this.dataProtection = null;
- }
+ this.winFunctions = winFunctions;
String keychainPathProperty = System.getProperty("cryptomator.keychainPath");
- if (dataProtection != null && keychainPathProperty == null) {
+ if (keychainPathProperty == null) {
LOG.warn("Windows DataProtection module loaded, but no cryptomator.keychainPath property found.");
}
if (keychainPathProperty != null) {
@@ -82,6 +77,10 @@ class WindowsProtectedKeychainAccess implements KeychainAccessStrategy {
}
}
+ private WinDataProtection dataProtection() {
+ return winFunctions.orElseThrow(IllegalStateException::new).dataProtection();
+ }
+
@Override
public void storePassphrase(String key, CharSequence passphrase) {
loadKeychainEntriesIfNeeded();
@@ -90,7 +89,7 @@ class WindowsProtectedKeychainAccess implements KeychainAccessStrategy {
buf.get(cleartext);
KeychainEntry entry = new KeychainEntry();
entry.salt = generateSalt();
- entry.ciphertext = dataProtection.protect(cleartext, entry.salt);
+ entry.ciphertext = dataProtection().protect(cleartext, entry.salt);
Arrays.fill(buf.array(), (byte) 0x00);
Arrays.fill(cleartext, (byte) 0x00);
keychainEntries.put(key, entry);
@@ -104,7 +103,7 @@ class WindowsProtectedKeychainAccess implements KeychainAccessStrategy {
if (entry == null) {
return null;
}
- byte[] cleartext = dataProtection.unprotect(entry.ciphertext, entry.salt);
+ byte[] cleartext = dataProtection().unprotect(entry.ciphertext, entry.salt);
if (cleartext == null) {
return null;
}
@@ -125,7 +124,7 @@ class WindowsProtectedKeychainAccess implements KeychainAccessStrategy {
@Override
public boolean isSupported() {
- return SystemUtils.IS_OS_WINDOWS && dataProtection != null && keychainPath != null;
+ return SystemUtils.IS_OS_WINDOWS && winFunctions.isPresent() && keychainPath != null;
}
private byte[] generateSalt() {
diff --git a/main/keychain/src/test/java/org/cryptomator/keychain/KeychainModuleTest.java b/main/keychain/src/test/java/org/cryptomator/keychain/KeychainModuleTest.java
index f382190a5..1bd556061 100644
--- a/main/keychain/src/test/java/org/cryptomator/keychain/KeychainModuleTest.java
+++ b/main/keychain/src/test/java/org/cryptomator/keychain/KeychainModuleTest.java
@@ -14,9 +14,11 @@ public class KeychainModuleTest {
@Test
public void testGetKeychain() {
- Optional keychainAccess = DaggerTestKeychainComponent.builder().jniModule(new TestJniModule()).keychainModule(new TestKeychainModule()).build().keychainAccess();
+ Optional keychainAccess = DaggerTestKeychainComponent.builder().keychainModule(new TestKeychainModule()).build().keychainAccess();
Assert.assertTrue(keychainAccess.isPresent());
Assert.assertTrue(keychainAccess.get() instanceof MapKeychainAccess);
+ keychainAccess.get().storePassphrase("test", "asd");
+ Assert.assertArrayEquals("asd".toCharArray(), keychainAccess.get().loadPassphrase("test"));
}
}
diff --git a/main/keychain/src/test/java/org/cryptomator/keychain/TestJniModule.java b/main/keychain/src/test/java/org/cryptomator/keychain/TestJniModule.java
deleted file mode 100644
index 6c54e2b4f..000000000
--- a/main/keychain/src/test/java/org/cryptomator/keychain/TestJniModule.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2017 Skymatic UG (haftungsbeschränkt).
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the accompanying LICENSE file.
- *******************************************************************************/
-package org.cryptomator.keychain;
-
-import java.util.Optional;
-
-import org.cryptomator.jni.JniModule;
-import org.cryptomator.jni.MacFunctions;
-import org.cryptomator.jni.WinFunctions;
-
-import dagger.Lazy;
-
-public class TestJniModule extends JniModule {
-
- @Override
- public Optional winFunctions(Lazy winFunction) {
- return Optional.empty();
- }
-
- @Override
- public Optional macFunctions(Lazy winFunction) {
- return Optional.empty();
- }
-
-}
diff --git a/main/launcher/pom.xml b/main/launcher/pom.xml
index 3c97807ef..bb55d145b 100644
--- a/main/launcher/pom.xml
+++ b/main/launcher/pom.xml
@@ -34,10 +34,6 @@
com.google.dagger
dagger
-
- com.google.dagger
- dagger-compiler
-
diff --git a/main/launcher/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java b/main/launcher/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java
index 3a0ac97c9..8f10c6aa2 100644
--- a/main/launcher/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java
+++ b/main/launcher/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java
@@ -6,6 +6,7 @@
*******************************************************************************/
package org.cryptomator.launcher;
+import java.awt.Desktop;
import java.io.File;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
@@ -13,7 +14,6 @@ import java.nio.file.InvalidPathException;
import java.nio.file.Path;
import java.util.concurrent.BlockingQueue;
-import org.cryptomator.ui.util.EawtApplicationWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,11 +24,13 @@ class FileOpenRequestHandler {
public FileOpenRequestHandler(BlockingQueue fileOpenRequests) {
this.fileOpenRequests = fileOpenRequests;
- EawtApplicationWrapper.getApplication().ifPresent(app -> {
- app.setOpenFileHandler(files -> {
- files.stream().map(File::toPath).forEach(fileOpenRequests::add);
+ try {
+ Desktop.getDesktop().setOpenFileHandler(e -> {
+ e.getFiles().stream().map(File::toPath).forEach(fileOpenRequests::add);
});
- });
+ } catch (UnsupportedOperationException e) {
+ LOG.info("Unable to setOpenFileHandler, probably not supported on this OS.");
+ }
}
public void handleLaunchArgs(String[] args) {
diff --git a/main/pom.xml b/main/pom.xml
index 2aaab2964..a31f000ba 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -24,20 +24,19 @@
UTF-8
- 1.1.7
- 1.4.5
- 1.0.3
- 1.0.2
+ 1.2.0-SNAPSHOT
+ 1.5.0-SNAPSHOT
+ 1.0.4
+ 2.0.0
0.1.1
2.5
3.6
- 4.5.3
-
+
1.0.3
- 23.5-jre
- 2.11
+ 23.6-jre
+ 2.14.1
2.8.2
1.7.25
@@ -146,11 +145,6 @@
commons-lang3
${commons-lang3.version}
-
- org.apache.httpcomponents
- httpclient
- ${httpclient.version}
-
@@ -170,12 +164,6 @@
dagger
${dagger.version}
-
- com.google.dagger
- dagger-compiler
- ${dagger.version}
- true
-
com.google.code.gson
gson
@@ -316,8 +304,20 @@
maven-compiler-plugin
3.7.0
- 1.8
- 1.8
+ 9
+ 9
+ 9
+
+ --add-modules
+ jdk.incubator.httpclient
+
+
+
+ com.google.dagger
+ dagger-compiler
+ ${dagger.version}
+
+
diff --git a/main/ui/pom.xml b/main/ui/pom.xml
index 7172387ab..6c26bc1a0 100644
--- a/main/ui/pom.xml
+++ b/main/ui/pom.xml
@@ -66,20 +66,12 @@
org.apache.commons
commons-lang3
-
- org.apache.httpcomponents
- httpclient
-
com.google.dagger
dagger
-
- com.google.dagger
- dagger-compiler
-
diff --git a/main/ui/src/main/java/org/cryptomator/ui/UiModule.java b/main/ui/src/main/java/org/cryptomator/ui/UiModule.java
index 60f6a76e7..4bcc9b877 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/UiModule.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/UiModule.java
@@ -16,22 +16,20 @@ import java.util.function.Consumer;
import javax.inject.Named;
import javax.inject.Singleton;
+import dagger.Module;
+import dagger.Provides;
+import javafx.beans.binding.Binding;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.CommonsModule;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.common.settings.SettingsProvider;
import org.cryptomator.frontend.webdav.WebDavServer;
-import org.cryptomator.jni.JniModule;
import org.cryptomator.keychain.KeychainModule;
import org.cryptomator.ui.controllers.ViewControllerModule;
import org.cryptomator.ui.model.VaultComponent;
import org.fxmisc.easybind.EasyBind;
-import dagger.Module;
-import dagger.Provides;
-import javafx.beans.binding.Binding;
-
-@Module(includes = {ViewControllerModule.class, CommonsModule.class, KeychainModule.class, JniModule.class}, subcomponents = {VaultComponent.class})
+@Module(includes = {ViewControllerModule.class, CommonsModule.class, KeychainModule.class}, subcomponents = {VaultComponent.class})
public class UiModule {
@Provides
diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java
index 682cd0afb..dcaa2532d 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java
@@ -9,8 +9,7 @@
******************************************************************************/
package org.cryptomator.ui.controllers;
-import static org.cryptomator.ui.util.DialogBuilderUtil.buildErrorDialog;
-
+import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -28,25 +27,6 @@ import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
-import org.apache.commons.lang3.SystemUtils;
-import org.cryptomator.common.settings.VaultSettings;
-import org.cryptomator.ui.ExitUtil;
-import org.cryptomator.ui.controls.DirectoryListCell;
-import org.cryptomator.ui.l10n.Localization;
-import org.cryptomator.ui.model.AutoUnlocker;
-import org.cryptomator.ui.model.UpgradeStrategies;
-import org.cryptomator.ui.model.UpgradeStrategy;
-import org.cryptomator.ui.model.Vault;
-import org.cryptomator.ui.model.VaultFactory;
-import org.cryptomator.ui.model.VaultList;
-import org.cryptomator.ui.util.DialogBuilderUtil;
-import org.cryptomator.ui.util.EawtApplicationWrapper;
-import org.fxmisc.easybind.EasyBind;
-import org.fxmisc.easybind.Subscription;
-import org.fxmisc.easybind.monadic.MonadicBinding;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.binding.Binding;
@@ -81,6 +61,25 @@ import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
+import org.apache.commons.lang3.SystemUtils;
+import org.cryptomator.common.settings.VaultSettings;
+import org.cryptomator.ui.ExitUtil;
+import org.cryptomator.ui.controls.DirectoryListCell;
+import org.cryptomator.ui.l10n.Localization;
+import org.cryptomator.ui.model.AutoUnlocker;
+import org.cryptomator.ui.model.UpgradeStrategies;
+import org.cryptomator.ui.model.UpgradeStrategy;
+import org.cryptomator.ui.model.Vault;
+import org.cryptomator.ui.model.VaultFactory;
+import org.cryptomator.ui.model.VaultList;
+import org.cryptomator.ui.util.DialogBuilderUtil;
+import org.fxmisc.easybind.EasyBind;
+import org.fxmisc.easybind.Subscription;
+import org.fxmisc.easybind.monadic.MonadicBinding;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.cryptomator.ui.util.DialogBuilderUtil.buildErrorDialog;
@Singleton
public class MainController implements ViewController {
@@ -129,11 +128,13 @@ public class MainController implements ViewController {
EasyBind.subscribe(areAllVaultsLocked, Platform::setImplicitExit);
autoUnlocker.unlockAllSilently();
- EawtApplicationWrapper.getApplication().ifPresent(app -> {
- app.setPreferencesHandler(() -> {
+ try {
+ Desktop.getDesktop().setPreferencesHandler(e -> {
Platform.runLater(this::toggleShowSettings);
});
- });
+ } catch (UnsupportedOperationException e) {
+ LOG.info("Unable to setPreferencesHandler, probably not supported on this OS.");
+ }
}
@FXML
diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/WelcomeController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/WelcomeController.java
index c2507a6bc..aed401acc 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/controllers/WelcomeController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/WelcomeController.java
@@ -8,11 +8,10 @@
******************************************************************************/
package org.cryptomator.ui.controllers;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
+import java.net.URI;
import java.net.URL;
import java.nio.charset.StandardCharsets;
+import java.time.Duration;
import java.util.Comparator;
import java.util.Map;
import java.util.Optional;
@@ -22,23 +21,9 @@ import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
-import org.apache.commons.lang3.SystemUtils;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.impl.client.HttpClients;
-import org.cryptomator.common.settings.Settings;
-import org.cryptomator.ui.l10n.Localization;
-import org.cryptomator.ui.util.AsyncTaskService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
-
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
@@ -49,6 +34,15 @@ import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.VBox;
+import jdk.incubator.http.HttpClient;
+import jdk.incubator.http.HttpRequest;
+import jdk.incubator.http.HttpResponse;
+import org.apache.commons.lang3.SystemUtils;
+import org.cryptomator.common.settings.Settings;
+import org.cryptomator.ui.l10n.Localization;
+import org.cryptomator.ui.util.AsyncTaskService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
@Singleton
public class WelcomeController implements ViewController {
@@ -114,31 +108,21 @@ public class WelcomeController implements ViewController {
checkForUpdatesStatus.setText(localization.getString("welcome.checkForUpdates.label.currentlyChecking"));
checkForUpdatesIndicator.setVisible(true);
asyncTaskService.asyncTaskOf(() -> {
- RequestConfig requestConfig = RequestConfig.custom() //
- .setConnectTimeout(5000) //
- .setConnectionRequestTimeout(5000) //
- .setSocketTimeout(5000) //
- .build();
String userAgent = String.format("Cryptomator VersionChecker/%s %s %s (%s)", applicationVersion.orElse("SNAPSHOT"), SystemUtils.OS_NAME, SystemUtils.OS_VERSION, SystemUtils.OS_ARCH);
- HttpClientBuilder httpClientBuilder = HttpClients.custom() //
- .disableCookieManagement() //
- .setDefaultRequestConfig(requestConfig) //
- .setUserAgent(userAgent);
- LOG.debug("Checking for updates...");
- try (CloseableHttpClient client = httpClientBuilder.build()) {
- HttpGet request = new HttpGet("https://api.cryptomator.org/updates/latestVersion.json");
- try (CloseableHttpResponse response = client.execute(request)) {
- if (response.getStatusLine().getStatusCode() == 200 && response.getEntity() != null) {
- try (InputStream in = response.getEntity().getContent()) {
- Gson gson = new GsonBuilder().setLenient().create();
- Reader utf8Reader = new InputStreamReader(in, StandardCharsets.UTF_8);
- Map map = gson.fromJson(utf8Reader, new TypeToken