diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProfileController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProfileController.java index 59aa30e1f..22027e4fb 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProfileController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProfileController.java @@ -187,9 +187,13 @@ public class ProfileController { response = Optional.of(generateAvatarUploadForm(avatar)); } + List updatedBadges = mergeBadgeIdsWithExistingAccountBadges( + request.getBadges(), auth.getAccount().getBadges()); + accountsManager.update(auth.getAccount(), a -> { a.setProfileName(request.getName()); a.setAvatar(avatar); + a.setBadges(clock, updatedBadges); a.setCurrentProfileVersion(request.getVersion()); }); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java index 8e17928da..bc82af8a2 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java @@ -321,6 +321,14 @@ public class Account { return badges; } + public void setBadges(Clock clock, List badges) { + requireNotStale(); + + this.badges = badges; + + purgeStaleBadges(clock); + } + public void addBadge(Clock clock, AccountBadge badge) { requireNotStale();