From 647821033098c1a12118275b554cb0b5b4ffab6c Mon Sep 17 00:00:00 2001 From: Ehren Kret Date: Wed, 8 Sep 2021 18:15:50 -0500 Subject: [PATCH] Update configuration for badges to use URL instead of String --- .../configuration/BadgeConfiguration.java | 11 +++++++--- .../URLDeserializationConverter.java | 22 +++++++++++++++++++ .../URLSerializationConverter.java | 17 ++++++++++++++ 3 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 service/src/main/java/org/whispersystems/textsecuregcm/configuration/URLDeserializationConverter.java create mode 100644 service/src/main/java/org/whispersystems/textsecuregcm/configuration/URLSerializationConverter.java diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/BadgeConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/BadgeConfiguration.java index 8edc95809..5de0085aa 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/BadgeConfiguration.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/BadgeConfiguration.java @@ -7,16 +7,19 @@ package org.whispersystems.textsecuregcm.configuration; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.net.URL; import javax.validation.constraints.NotEmpty; public class BadgeConfiguration { private final String name; - private final String imageUrl; + private final URL imageUrl; @JsonCreator public BadgeConfiguration( @JsonProperty("name") final String name, - @JsonProperty("imageUrl") final String imageUrl) { + @JsonProperty("imageUrl") @JsonDeserialize(converter = URLDeserializationConverter.class) final URL imageUrl) { this.name = name; this.imageUrl = imageUrl; } @@ -27,7 +30,9 @@ public class BadgeConfiguration { } @NotEmpty - public String getImageUrl() { + @JsonSerialize(converter = URLSerializationConverter.class) + public URL getImageUrl() { return imageUrl; } + } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/URLDeserializationConverter.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/URLDeserializationConverter.java new file mode 100644 index 000000000..d6f137e50 --- /dev/null +++ b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/URLDeserializationConverter.java @@ -0,0 +1,22 @@ +/* + * Copyright 2021 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.textsecuregcm.configuration; + +import com.fasterxml.jackson.databind.util.StdConverter; +import java.net.MalformedURLException; +import java.net.URL; + +final class URLDeserializationConverter extends StdConverter { + + @Override + public URL convert(final String value) { + try { + return new URL(value); + } catch (MalformedURLException e) { + throw new IllegalArgumentException(e); + } + } +} diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/URLSerializationConverter.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/URLSerializationConverter.java new file mode 100644 index 000000000..a557d6ca5 --- /dev/null +++ b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/URLSerializationConverter.java @@ -0,0 +1,17 @@ +/* + * Copyright 2021 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.textsecuregcm.configuration; + +import com.fasterxml.jackson.databind.util.StdConverter; +import java.net.URL; + +final class URLSerializationConverter extends StdConverter { + + @Override + public String convert(final URL value) { + return value.toString(); + } +}