From 5f2497de90f6319c270ff8ee442d7ffb2e99f915 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 29 Jun 2023 12:26:45 +0200 Subject: [PATCH] replace GSON in "hub" --- .../ui/keyloading/hub/AuthFlowTask.java | 7 ++++--- .../ui/keyloading/hub/CreateDeviceDto.java | 6 +----- .../ui/keyloading/hub/HttpHelper.java | 4 ---- .../hub/RegisterDeviceController.java | 21 ++++++++++++------- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/keyloading/hub/AuthFlowTask.java b/src/main/java/org/cryptomator/ui/keyloading/hub/AuthFlowTask.java index c65256007..0379d4331 100644 --- a/src/main/java/org/cryptomator/ui/keyloading/hub/AuthFlowTask.java +++ b/src/main/java/org/cryptomator/ui/keyloading/hub/AuthFlowTask.java @@ -1,6 +1,6 @@ package org.cryptomator.ui.keyloading.hub; -import com.google.gson.JsonParser; +import com.fasterxml.jackson.databind.ObjectMapper; import io.github.coffeelibs.tinyoauth2client.AuthFlow; import io.github.coffeelibs.tinyoauth2client.TinyOAuth2; import io.github.coffeelibs.tinyoauth2client.http.response.Response; @@ -12,6 +12,8 @@ import java.util.function.Consumer; class AuthFlowTask extends Task { + private static final ObjectMapper JSON = new ObjectMapper(); + private final HubConfig hubConfig; private final AuthFlowContext authFlowContext; private final Consumer redirectUriConsumer; @@ -39,8 +41,7 @@ class AuthFlowTask extends Task { if (response.statusCode() != 200) { throw new NotOkResponseException("Authorization returned status code " + response.statusCode()); } - var json = JsonParser.parseString(response.body()); - return json.getAsJsonObject().get("access_token").getAsString(); + return JSON.reader().readTree(response.body()).get("access_token").asText(); } public static class NotOkResponseException extends RuntimeException { diff --git a/src/main/java/org/cryptomator/ui/keyloading/hub/CreateDeviceDto.java b/src/main/java/org/cryptomator/ui/keyloading/hub/CreateDeviceDto.java index 71377a318..ed10a9257 100644 --- a/src/main/java/org/cryptomator/ui/keyloading/hub/CreateDeviceDto.java +++ b/src/main/java/org/cryptomator/ui/keyloading/hub/CreateDeviceDto.java @@ -1,9 +1,5 @@ package org.cryptomator.ui.keyloading.hub; -class CreateDeviceDto { - - public String id; - public String name; - public String publicKey; +record CreateDeviceDto(String id, String name, String publicKey) { } diff --git a/src/main/java/org/cryptomator/ui/keyloading/hub/HttpHelper.java b/src/main/java/org/cryptomator/ui/keyloading/hub/HttpHelper.java index 51f3662a7..0077467cc 100644 --- a/src/main/java/org/cryptomator/ui/keyloading/hub/HttpHelper.java +++ b/src/main/java/org/cryptomator/ui/keyloading/hub/HttpHelper.java @@ -1,14 +1,10 @@ package org.cryptomator.ui.keyloading.hub; import com.google.common.io.CharStreams; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonParser; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.Reader; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; 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 4cf2d9fa2..6fa6aa424 100644 --- a/src/main/java/org/cryptomator/ui/keyloading/hub/RegisterDeviceController.java +++ b/src/main/java/org/cryptomator/ui/keyloading/hub/RegisterDeviceController.java @@ -2,9 +2,9 @@ package org.cryptomator.ui.keyloading.hub; import com.auth0.jwt.JWT; import com.auth0.jwt.interfaces.DecodedJWT; +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.io.BaseEncoding; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import com.nimbusds.jose.JWEObject; import dagger.Lazy; import org.cryptomator.common.settings.DeviceKey; @@ -46,7 +46,7 @@ import java.util.concurrent.atomic.AtomicReference; public class RegisterDeviceController implements FxController { private static final Logger LOG = LoggerFactory.getLogger(RegisterDeviceController.class); - private static final Gson GSON = new GsonBuilder().setLenient().create(); + private static final ObjectMapper JSON = new ObjectMapper().setDefaultLeniency(true); private static final List EXPECTED_RESPONSE_CODES = List.of(201, 409); private final Stage window; @@ -101,11 +101,8 @@ public class RegisterDeviceController implements FxController { var keyUri = URI.create(hubConfig.devicesResourceUrl + deviceId); var deviceKey = keyPair.getPublic().getEncoded(); - var dto = new CreateDeviceDto(); - dto.id = deviceId; - dto.name = deviceNameField.getText(); - dto.publicKey = BaseEncoding.base64Url().omitPadding().encode(deviceKey); - var json = GSON.toJson(dto); // TODO: do we want to keep GSON? doesn't support records -.- + var dto = new CreateDeviceDto(deviceId, deviceNameField.getText(), BaseEncoding.base64Url().omitPadding().encode(deviceKey)); + var json = toJson(dto); var request = HttpRequest.newBuilder(keyUri) // .header("Authorization", "Bearer " + bearerToken) // .header("Content-Type", "application/json").PUT(HttpRequest.BodyPublishers.ofString(json, StandardCharsets.UTF_8)) // @@ -127,6 +124,14 @@ public class RegisterDeviceController implements FxController { }, Platform::runLater); } + private String toJson(CreateDeviceDto dto) { + try { + return JSON.writer().writeValueAsString(dto); + } catch (JacksonException e) { + throw new IllegalStateException("Failed to serialize DTO", e); + } + } + private void handleResponse(HttpResponse voidHttpResponse) { assert EXPECTED_RESPONSE_CODES.contains(voidHttpResponse.statusCode());