From b59ce75ecd1b20cdc8dec5e7aed160fa7a70e2e3 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sun, 14 Jan 2024 15:02:41 +0100 Subject: [PATCH] add step 0: check API level --- .../keyloading/hub/ReceiveKeyController.java | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/keyloading/hub/ReceiveKeyController.java b/src/main/java/org/cryptomator/ui/keyloading/hub/ReceiveKeyController.java index 7171b8f2f..0604036f9 100644 --- a/src/main/java/org/cryptomator/ui/keyloading/hub/ReceiveKeyController.java +++ b/src/main/java/org/cryptomator/ui/keyloading/hub/ReceiveKeyController.java @@ -78,7 +78,41 @@ public class ReceiveKeyController implements FxController { @FXML public void initialize() { - requestDeviceData(); + requestApiConfig(); // FIXME: only called once - need to restart after returning from register device + } + + /** + * STEP 0 (Request): GET /api/config + */ + private void requestApiConfig() { + var configUri = API_BASE."config"; + var request = HttpRequest.newBuilder(configUri) // + .GET() // + .timeout(REQ_TIMEOUT) // + .build(); + httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.US_ASCII)) // + .thenAcceptAsync(this::receivedApiConfig, Platform::runLater) // + .exceptionally(this::retrievalFailed); + } + + /** + * STEP 0 (Response): GET /api/config + * + * @param response Response + */ + private void receivedApiConfig(HttpResponse response) { + LOG.debug("GET {} -> Status Code {}", response.request().uri(), response.statusCode()); + Preconditions.checkState(response.statusCode() == 200, "Unexpected response " + response.statusCode()); + try { + var config = JSON.reader().readValue(response.body(), ConfigDto.class); + if (config.apiLevel >= 1) { + requestDeviceData(); + } else { + requestLegacyAccessToken(); + } + } catch (IOException e) { + throw new UncheckedIOException(e); + } } /** @@ -108,7 +142,6 @@ public class ReceiveKeyController implements FxController { case 402 -> licenseExceeded(); case 403, 410 -> accessNotGranted(); // or vault has been archived, effectively disallowing access - TODO: add specific dialog? case 449 -> accountInitializationRequired(); - case 404 -> requestLegacyAccessToken(); default -> throw new IllegalStateException("Unexpected response " + response.statusCode()); } }