From a90240052261c8ac4749ee133ecf6e91cbd74d10 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 11 Jan 2024 11:23:54 +0100 Subject: [PATCH] get rid of `registerException` use separate views, no need to pass state between views --- .../org/cryptomator/ui/common/FxmlFile.java | 1 + .../keyloading/hub/HubKeyLoadingModule.java | 15 +++--- .../hub/RegisterDeviceController.java | 17 +++---- .../hub/RegisterFailedController.java | 21 ++------ .../hub_register_device_already_exists.fxml | 51 +++++++++++++++++++ .../resources/fxml/hub_register_failed.fxml | 3 +- 6 files changed, 73 insertions(+), 35 deletions(-) create mode 100644 src/main/resources/fxml/hub_register_device_already_exists.fxml diff --git a/src/main/java/org/cryptomator/ui/common/FxmlFile.java b/src/main/java/org/cryptomator/ui/common/FxmlFile.java index bd3233a7f..9af0578cf 100644 --- a/src/main/java/org/cryptomator/ui/common/FxmlFile.java +++ b/src/main/java/org/cryptomator/ui/common/FxmlFile.java @@ -22,6 +22,7 @@ public enum FxmlFile { HUB_RECEIVE_KEY("/fxml/hub_receive_key.fxml"), // HUB_LEGACY_REGISTER_DEVICE("/fxml/hub_legacy_register_device.fxml"), // HUB_REGISTER_SUCCESS("/fxml/hub_register_success.fxml"), // + HUB_REGISTER_DEVICE_ALREADY_EXISTS("/fxml/hub_register_device_already_exists.fxml"), // HUB_REGISTER_FAILED("/fxml/hub_register_failed.fxml"), // HUB_REGISTER_DEVICE("/fxml/hub_register_device.fxml"), // HUB_UNAUTHORIZED_DEVICE("/fxml/hub_unauthorized_device.fxml"), // diff --git a/src/main/java/org/cryptomator/ui/keyloading/hub/HubKeyLoadingModule.java b/src/main/java/org/cryptomator/ui/keyloading/hub/HubKeyLoadingModule.java index 92e9af6f0..2076db9eb 100644 --- a/src/main/java/org/cryptomator/ui/keyloading/hub/HubKeyLoadingModule.java +++ b/src/main/java/org/cryptomator/ui/keyloading/hub/HubKeyLoadingModule.java @@ -72,14 +72,6 @@ public abstract class HubKeyLoadingModule { return new CompletableFuture<>(); } - @Provides - @KeyLoadingScoped - @Named("registerException") - static AtomicReference provideRegisterException() { - return new AtomicReference<>(); - } - - @Binds @IntoMap @KeyLoadingScoped @@ -149,6 +141,13 @@ public abstract class HubKeyLoadingModule { return fxmlLoaders.createScene(FxmlFile.HUB_REGISTER_DEVICE); } + @Provides + @FxmlScene(FxmlFile.HUB_REGISTER_DEVICE_ALREADY_EXISTS) + @KeyLoadingScoped + static Scene provideHubRegisterDeviceAlreadyExistsScene(@KeyLoading FxmlLoaderFactory fxmlLoaders) { + return fxmlLoaders.createScene(FxmlFile.HUB_REGISTER_DEVICE_ALREADY_EXISTS); + } + @Provides @FxmlScene(FxmlFile.HUB_UNAUTHORIZED_DEVICE) @KeyLoadingScoped diff --git a/src/main/java/org/cryptomator/ui/keyloading/hub/RegisterDeviceController.java b/src/main/java/org/cryptomator/ui/keyloading/hub/RegisterDeviceController.java index 701d484f5..3d8d4a625 100644 --- a/src/main/java/org/cryptomator/ui/keyloading/hub/RegisterDeviceController.java +++ b/src/main/java/org/cryptomator/ui/keyloading/hub/RegisterDeviceController.java @@ -55,9 +55,9 @@ public class RegisterDeviceController implements FxController { private final Stage window; private final HubConfig hubConfig; private final String bearerToken; - private final AtomicReference registerException; private final Lazy registerSuccessScene; private final Lazy registerFailedScene; + private final Lazy registerDeviceAlreadyExistsScene; private final String deviceId; private final P384KeyPair deviceKeyPair; private final CompletableFuture result; @@ -70,16 +70,16 @@ public class RegisterDeviceController implements FxController { public Button registerBtn; @Inject - public RegisterDeviceController(@KeyLoading Stage window, ExecutorService executor, HubConfig hubConfig, @Named("deviceId") String deviceId, DeviceKey deviceKey, CompletableFuture result, @Named("bearerToken") AtomicReference bearerToken, @Named("registerException") AtomicReference registerException, @FxmlScene(FxmlFile.HUB_REGISTER_SUCCESS) Lazy registerSuccessScene, @FxmlScene(FxmlFile.HUB_REGISTER_FAILED) Lazy registerFailedScene) { + public RegisterDeviceController(@KeyLoading Stage window, ExecutorService executor, HubConfig hubConfig, @Named("deviceId") String deviceId, DeviceKey deviceKey, CompletableFuture result, @Named("bearerToken") AtomicReference bearerToken, @FxmlScene(FxmlFile.HUB_REGISTER_SUCCESS) Lazy registerSuccessScene, @FxmlScene(FxmlFile.HUB_REGISTER_FAILED) Lazy registerFailedScene, @FxmlScene(FxmlFile.HUB_REGISTER_DEVICE_ALREADY_EXISTS) Lazy registerDeviceAlreadyExistsScene) { this.window = window; this.hubConfig = hubConfig; this.deviceId = deviceId; this.deviceKeyPair = Objects.requireNonNull(deviceKey.get()); this.result = result; this.bearerToken = Objects.requireNonNull(bearerToken.get()); - this.registerException = registerException; this.registerSuccessScene = registerSuccessScene; this.registerFailedScene = registerFailedScene; + this.registerDeviceAlreadyExistsScene = registerDeviceAlreadyExistsScene; this.window.addEventHandler(WindowEvent.WINDOW_HIDING, this::windowClosed); this.httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).executor(executor).build(); } @@ -184,13 +184,12 @@ public class RegisterDeviceController implements FxController { private void setupFailed(Throwable cause) { switch (cause) { case CompletionException e when e.getCause() instanceof JWEHelper.InvalidJweKeyException -> invalidSetupCode.set(true); + case DeviceAlreadyExistsException e -> { + LOG.debug("Device already registered in hub instance {} for different user", hubConfig.authSuccessUrl); + window.setScene(registerDeviceAlreadyExistsScene.get()); + } default -> { - if (cause instanceof DeviceAlreadyExistsException) { - LOG.debug("Device already registered in hub instance {} for different user", hubConfig.authSuccessUrl); - } else { - LOG.warn("Device setup failed.", cause); - } - registerException.set(cause); + LOG.warn("Device setup failed.", cause); window.setScene(registerFailedScene.get()); } } diff --git a/src/main/java/org/cryptomator/ui/keyloading/hub/RegisterFailedController.java b/src/main/java/org/cryptomator/ui/keyloading/hub/RegisterFailedController.java index 8218c6f94..7df27b06a 100644 --- a/src/main/java/org/cryptomator/ui/keyloading/hub/RegisterFailedController.java +++ b/src/main/java/org/cryptomator/ui/keyloading/hub/RegisterFailedController.java @@ -4,36 +4,25 @@ import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.keyloading.KeyLoading; import javax.inject.Inject; -import javax.inject.Named; -import javafx.beans.property.SimpleBooleanProperty; import javafx.fxml.FXML; import javafx.stage.Stage; -import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.CompletableFuture; public class RegisterFailedController implements FxController { private final Stage window; - private final Throwable registerException; - private final SimpleBooleanProperty deviceAlreadyExisting; + private final CompletableFuture result; @Inject - public RegisterFailedController(@KeyLoading Stage window, @Named("registerException") AtomicReference registerExceptionRef) { + public RegisterFailedController(@KeyLoading Stage window, CompletableFuture result) { this.window = window; - this.registerException = registerExceptionRef.get(); - this.deviceAlreadyExisting = new SimpleBooleanProperty(registerException instanceof DeviceAlreadyExistsException); + this.result = result; } @FXML public void close() { + result.cancel(true); window.close(); } - public boolean isDeviceAlreadyExisting() { - return deviceAlreadyExisting.get(); - } - - public boolean isGenericError() { - return !deviceAlreadyExisting.get(); - } - } diff --git a/src/main/resources/fxml/hub_register_device_already_exists.fxml b/src/main/resources/fxml/hub_register_device_already_exists.fxml new file mode 100644 index 000000000..9a7c1f3c7 --- /dev/null +++ b/src/main/resources/fxml/hub_register_device_already_exists.fxml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +