Skip to content

Commit

Permalink
Fix storing of username
Browse files Browse the repository at this point in the history
  • Loading branch information
AsamK committed Nov 12, 2023
1 parent 0d60c4d commit 77f2846
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ public class MergeRecipientHelper {
static Pair<RecipientId, List<RecipientId>> resolveRecipientTrustedLocked(
Store store, RecipientAddress address
) throws SQLException {
// address has serviceId and number, optionally also pni
// address has at least one of serviceId/pni and optionally number/username

final var recipients = store.findAllByAddress(address);

if (recipients.isEmpty()) {
logger.debug("Got new recipient, serviceId, PNI and number are unknown");
logger.debug("Got new recipient, serviceId, PNI, number, username are unknown");
return new Pair<>(store.addNewRecipient(address), List.of());
}

Expand All @@ -47,7 +47,7 @@ static Pair<RecipientId, List<RecipientId>> resolveRecipientTrustedLocked(
}

logger.debug(
"Got recipient {} existing with number/pni, but different serviceId, so stripping its number and adding new recipient",
"Got recipient {} existing with number/pni/username, but different serviceId, so stripping its number and adding new recipient",
recipient.id());
store.updateRecipientAddress(recipient.id(), recipient.address().removeIdentifiersFrom(address));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -793,8 +793,8 @@ private RecipientId addNewRecipient(
) throws SQLException {
final var sql = (
"""
INSERT INTO %s (number, uuid, pni)
VALUES (?, ?, ?)
INSERT INTO %s (number, uuid, pni, username)
VALUES (?, ?, ?, ?)
RETURNING _id
"""
).formatted(TABLE_RECIPIENT);
Expand All @@ -803,6 +803,7 @@ private RecipientId addNewRecipient(
statement.setBytes(2,
address.serviceId().map(ServiceId::getRawUuid).map(UuidUtil::toByteArray).orElse(null));
statement.setBytes(3, address.pni().map(PNI::getRawUuid).map(UuidUtil::toByteArray).orElse(null));
statement.setString(4, address.username().orElse(null));
final var generatedKey = Utils.executeQueryForOptional(statement, Utils::getIdMapper);
if (generatedKey.isPresent()) {
final var recipientId = new RecipientId(generatedKey.get(), this);
Expand All @@ -820,7 +821,7 @@ private void removeRecipientAddress(Connection connection, RecipientId recipient
final var sql = (
"""
UPDATE %s
SET number = NULL, uuid = NULL, pni = NULL
SET number = NULL, uuid = NULL, pni = NULL, username = NULL
WHERE _id = ?
"""
).formatted(TABLE_RECIPIENT);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,24 @@ class MergeRecipientHelperTest {
static final PNI PNI_B = PNI.from(UUID.randomUUID());
static final String NUMBER_A = "+AAA";
static final String NUMBER_B = "+BBB";
static final String USERNAME_A = "USER.1";
static final String USERNAME_B = "USER.2";

static final PartialAddresses ADDR_A = new PartialAddresses(SERVICE_ID_A, PNI_A, NUMBER_A);
static final PartialAddresses ADDR_B = new PartialAddresses(SERVICE_ID_B, PNI_B, NUMBER_B);
static final PartialAddresses ADDR_A = new PartialAddresses(SERVICE_ID_A, PNI_A, NUMBER_A, USERNAME_A);
static final PartialAddresses ADDR_B = new PartialAddresses(SERVICE_ID_B, PNI_B, NUMBER_B, USERNAME_B);

static final T[] testInstancesNone = new T[]{
new T(Set.of(), ADDR_A.FULL, Set.of(rec(1000000, ADDR_A.FULL))),
new T(Set.of(), ADDR_A.ACI_NUM, Set.of(rec(1000000, ADDR_A.ACI_NUM))),
new T(Set.of(), ADDR_A.ACI_PNI, Set.of(rec(1000000, ADDR_A.ACI_PNI))),
new T(Set.of(), ADDR_A.PNI_NUM, Set.of(rec(1000000, ADDR_A.PNI_NUM))),
new T(Set.of(), ADDR_A.ACI_USERNAME, Set.of(rec(1000000, ADDR_A.ACI_USERNAME))),
new T(Set.of(), ADDR_A.FULL_USERNAME, Set.of(rec(1000000, ADDR_A.FULL_USERNAME))),
};

static final T[] testInstancesSingle = new T[]{
new T(Set.of(rec(1, ADDR_A.FULL)), ADDR_A.FULL, Set.of(rec(1, ADDR_A.FULL))),
new T(Set.of(rec(1, ADDR_A.FULL_USERNAME)), ADDR_A.FULL, Set.of(rec(1, ADDR_A.FULL_USERNAME))),
new T(Set.of(rec(1, ADDR_A.ACI)), ADDR_A.FULL, Set.of(rec(1, ADDR_A.FULL))),
new T(Set.of(rec(1, ADDR_A.PNI)), ADDR_A.FULL, Set.of(rec(1, ADDR_A.FULL))),
new T(Set.of(rec(1, ADDR_A.NUM)), ADDR_A.FULL, Set.of(rec(1, ADDR_A.FULL))),
Expand Down Expand Up @@ -72,6 +77,10 @@ class MergeRecipientHelperTest {
new T(Set.of(rec(1, ADDR_A.ACI_PNI)), ADDR_A.ACI_PNI, Set.of(rec(1, ADDR_A.ACI_PNI))),

new T(Set.of(rec(1, ADDR_A.FULL)), ADDR_B.FULL, Set.of(rec(1, ADDR_A.FULL), rec(1000000, ADDR_B.FULL))),

new T(Set.of(rec(1, ADDR_A.FULL)), ADDR_A.ACI_USERNAME, Set.of(rec(1, ADDR_A.FULL_USERNAME))),
new T(Set.of(rec(1, ADDR_A.ACI)), ADDR_A.ACI_USERNAME, Set.of(rec(1, ADDR_A.ACI_USERNAME))),
new T(Set.of(rec(1, ADDR_A.ACI_NUM)), ADDR_A.ACI_USERNAME, Set.of(rec(1, ADDR_A.ACI_NUM_USERNAME))),
};

static final T[] testInstancesTwo = new T[]{
Expand Down Expand Up @@ -225,22 +234,28 @@ public void removeRecipientAddress(final RecipientId recipientId) {

private record PartialAddresses(
RecipientAddress FULL,
RecipientAddress FULL_USERNAME,
RecipientAddress ACI,
RecipientAddress PNI,
RecipientAddress NUM,
RecipientAddress ACI_NUM,
RecipientAddress ACI_NUM_USERNAME,
RecipientAddress PNI_NUM,
RecipientAddress ACI_PNI
RecipientAddress ACI_PNI,
RecipientAddress ACI_USERNAME
) {

PartialAddresses(ServiceId serviceId, PNI pni, String number) {
PartialAddresses(ServiceId serviceId, PNI pni, String number, String username) {
this(new RecipientAddress(serviceId, pni, number),
new RecipientAddress(serviceId, pni, number, username),
new RecipientAddress(serviceId, null, null),
new RecipientAddress(null, pni, null),
new RecipientAddress(null, null, number),
new RecipientAddress(serviceId, null, number),
new RecipientAddress(serviceId, null, number, username),
new RecipientAddress(null, pni, number),
new RecipientAddress(serviceId, pni, null));
new RecipientAddress(serviceId, pni, null),
new RecipientAddress(serviceId, null, null, username));
}
}
}

0 comments on commit 77f2846

Please sign in to comment.