diff --git a/service/config/sample.yml b/service/config/sample.yml index dfe3be84e..ac2835cd7 100644 --- a/service/config/sample.yml +++ b/service/config/sample.yml @@ -263,3 +263,4 @@ badges: badges: - id: TEST imageUrl: https://example.com/test-badge + category: other diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverter.java b/service/src/main/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverter.java index 71155374a..c9d0ad0ad 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverter.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverter.java @@ -90,11 +90,15 @@ public class ConfiguredProfileBadgeConverter implements ProfileBadgeConverter { .filter(accountBadge -> accountBadge.isVisible() && now.isBefore(accountBadge.getExpiration()) && knownBadges.containsKey(accountBadge.getId())) - .map(accountBadge -> new Badge( - accountBadge.getId(), - knownBadges.get(accountBadge.getId()).getImageUrl(), - resourceBundle.getString(accountBadge.getId() + "_name"), - resourceBundle.getString(accountBadge.getId() + "_description"))) + .map(accountBadge -> { + BadgeConfiguration configuration = knownBadges.get(accountBadge.getId()); + return new Badge( + accountBadge.getId(), + configuration.getCategory(), + configuration.getImageUrl(), + resourceBundle.getString(accountBadge.getId() + "_name"), + resourceBundle.getString(accountBadge.getId() + "_description")); + }) .collect(Collectors.toList()); } } 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 84570350e..7a6235d98 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/BadgeConfiguration.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/BadgeConfiguration.java @@ -16,13 +16,16 @@ import javax.validation.constraints.NotNull; public class BadgeConfiguration { private final String id; private final URL imageUrl; + private final String category; @JsonCreator public BadgeConfiguration( @JsonProperty("id") final String id, - @JsonProperty("imageUrl") @JsonDeserialize(converter = URLDeserializationConverter.class) final URL imageUrl) { + @JsonProperty("imageUrl") @JsonDeserialize(converter = URLDeserializationConverter.class) final URL imageUrl, + @JsonProperty("category") final String category) { this.id = id; this.imageUrl = imageUrl; + this.category = category; } @NotEmpty @@ -35,4 +38,9 @@ public class BadgeConfiguration { public URL getImageUrl() { return imageUrl; } + + @NotEmpty + public String getCategory() { + return category; + } } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/Badge.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/Badge.java index a7ffb379c..c7c9d213a 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/Badge.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/Badge.java @@ -12,6 +12,7 @@ import java.util.Objects; public class Badge { private final String id; + private final String category; private final URL imageUrl; private final String name; private final String description; @@ -19,10 +20,12 @@ public class Badge { @JsonCreator public Badge( @JsonProperty("id") final String id, + @JsonProperty("category") final String category, @JsonProperty("imageUrl") final URL imageUrl, @JsonProperty("name") final String name, @JsonProperty("description") final String description) { this.id = id; + this.category = category; this.imageUrl = imageUrl; this.name = name; this.description = description; @@ -32,6 +35,10 @@ public class Badge { return id; } + public String getCategory() { + return category; + } + public URL getImageUrl() { return imageUrl; } @@ -53,13 +60,14 @@ public class Badge { return false; } Badge badge = (Badge) o; - return Objects.equals(id, badge.id) && Objects.equals(imageUrl, - badge.imageUrl) && Objects.equals(name, badge.name) && Objects.equals( - description, badge.description); + return Objects.equals(id, badge.id) && Objects.equals(category, + badge.category) && Objects.equals(imageUrl, badge.imageUrl) + && Objects.equals(name, badge.name) && Objects.equals(description, + badge.description); } @Override public int hashCode() { - return Objects.hash(id, imageUrl, name, description); + return Objects.hash(id, category, imageUrl, name, description); } } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverterTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverterTest.java index 259dbcfe0..ce43ce22b 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverterTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverterTest.java @@ -72,7 +72,7 @@ public class ConfiguredProfileBadgeConverterTest { } private static BadgeConfiguration newBadge(int i) { - return new BadgeConfiguration(idFor(i), imageUrlFor(i)); + return new BadgeConfiguration(idFor(i), imageUrlFor(i), "other"); } private BadgesConfiguration createBadges(int count) { @@ -140,7 +140,7 @@ public class ConfiguredProfileBadgeConverterTest { arguments(idFor(0), expired, false, null), arguments(idFor(0), notExpired, false, null), arguments(idFor(0), expired, true, null), - arguments(idFor(0), notExpired, true, new Badge(idFor(0), imageUrlFor(0), nameFor(0), desriptionFor(0))), + arguments(idFor(0), notExpired, true, new Badge(idFor(0), "other", imageUrlFor(0), nameFor(0), desriptionFor(0))), arguments(idFor(1), expired, false, null), arguments(idFor(1), notExpired, false, null), arguments(idFor(1), expired, true, null), diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java index c8b61c902..aa8bf2a27 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java @@ -104,7 +104,7 @@ class ProfileControllerTest { (acceptableLanguages, accountBadges) -> { try { return List.of( - new Badge("TEST1", new URL("https://example.com/badge/1"), "Test Badge", "This badge is in unit tests.") + new Badge("TEST1", "other", new URL("https://example.com/badge/1"), "Test Badge", "This badge is in unit tests.") ); } catch (MalformedURLException e) { throw new AssertionError(e);