Ensure badges are in ordered collections

This commit is contained in:
Ehren Kret
2021-09-15 16:12:07 -05:00
parent 2fb400280b
commit 5b25e38e41
8 changed files with 23 additions and 24 deletions

View File

@@ -43,7 +43,6 @@ import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
@@ -296,7 +295,7 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
environment.getObjectMapper().setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
environment.getObjectMapper().setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
ProfileBadgeConverter profileBadgeConverter = (acceptableLanguages, accountBadges) -> Set.of(); // TODO: Provide an actual implementation.
ProfileBadgeConverter profileBadgeConverter = (acceptableLanguages, accountBadges) -> List.of(); // TODO: Provide an actual implementation.
JdbiFactory jdbiFactory = new JdbiFactory(DefaultNameStrategy.CHECK_EMPTY);
Jdbi accountJdbi = jdbiFactory.build(environment, config.getAccountsDatabaseConfiguration(), "accountdb");

View File

@@ -14,7 +14,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.ResourceBundle;
import java.util.ResourceBundle.Control;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.whispersystems.textsecuregcm.configuration.BadgeConfiguration;
@@ -50,11 +49,11 @@ public class ConfiguredProfileBadgeConverter implements ProfileBadgeConverter {
}
@Override
public Set<Badge> convert(
public List<Badge> convert(
final List<Locale> acceptableLanguages,
final Set<AccountBadge> accountBadges) {
final List<AccountBadge> accountBadges) {
if (accountBadges.isEmpty()) {
return Set.of();
return List.of();
}
final Instant now = clock.instant();
@@ -94,6 +93,6 @@ public class ConfiguredProfileBadgeConverter implements ProfileBadgeConverter {
.map(accountBadge -> new Badge(knownBadges.get(accountBadge.getName()).getImageUrl(),
resourceBundle.getString(accountBadge.getName() + "_name"),
resourceBundle.getString(accountBadge.getName() + "_description")))
.collect(Collectors.toSet());
.collect(Collectors.toList());
}
}

View File

@@ -7,7 +7,6 @@ package org.whispersystems.textsecuregcm.badges;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import org.whispersystems.textsecuregcm.entities.Badge;
import org.whispersystems.textsecuregcm.storage.AccountBadge;
@@ -17,5 +16,5 @@ public interface ProfileBadgeConverter {
* Converts the {@link AccountBadge}s for an account into the objects
* that can be returned on a profile fetch.
*/
Set<Badge> convert(List<Locale> acceptableLanguages, Set<AccountBadge> accountBadges);
List<Badge> convert(List<Locale> acceptableLanguages, List<AccountBadge> accountBadges);
}

View File

@@ -326,7 +326,7 @@ public class ProfileController {
UserCapabilities.createForAccount(accountProfile.get()),
username,
accountProfile.get().getUuid(),
Set.of(),
List.of(),
null);
}
@@ -399,7 +399,7 @@ public class ProfileController {
UserCapabilities.createForAccount(accountProfile.get()),
username.orElse(null),
null,
Set.of(),
List.of(),
null);
}

View File

@@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.google.common.annotations.VisibleForTesting;
import java.util.Set;
import java.util.List;
import java.util.UUID;
import org.signal.zkgroup.profiles.ProfileKeyCredentialResponse;
@@ -49,7 +49,7 @@ public class Profile {
private UUID uuid;
@JsonProperty
private Set<Badge> badges;
private List<Badge> badges;
@JsonProperty
@JsonSerialize(using = ProfileKeyCredentialResponseAdapter.Serializing.class)
@@ -61,7 +61,7 @@ public class Profile {
public Profile(
String name, String about, String aboutEmoji, String avatar, String paymentAddress, String identityKey,
String unidentifiedAccess, boolean unrestrictedUnidentifiedAccess, UserCapabilities capabilities, String username,
UUID uuid, Set<Badge> badges, ProfileKeyCredentialResponse credential)
UUID uuid, List<Badge> badges, ProfileKeyCredentialResponse credential)
{
this.name = name;
this.about = about;
@@ -130,7 +130,7 @@ public class Profile {
return uuid;
}
public Set<Badge> getBadges() {
public List<Badge> getBadges() {
return badges;
}
}

View File

@@ -10,7 +10,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.annotations.VisibleForTesting;
import java.time.Clock;
import java.time.Instant;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@@ -49,7 +51,7 @@ public class Account {
private String avatar;
@JsonProperty
private Set<AccountBadge> badges = new HashSet<>();
private List<AccountBadge> badges = new ArrayList<>();
@JsonProperty
private String registrationLock;
@@ -313,7 +315,7 @@ public class Account {
this.avatar = avatar;
}
public Set<AccountBadge> getBadges() {
public List<AccountBadge> getBadges() {
requireNotStale();
return badges;