mirror of
https://github.com/AsamK/signal-cli
synced 2025-08-29 18:40:39 +00:00
Fix storing of username
This commit is contained in:
parent
1bbfa74b3f
commit
21f7a6de88
3 changed files with 27 additions and 11 deletions
|
@ -17,12 +17,12 @@ public class MergeRecipientHelper {
|
||||||
static Pair<RecipientId, List<RecipientId>> resolveRecipientTrustedLocked(
|
static Pair<RecipientId, List<RecipientId>> resolveRecipientTrustedLocked(
|
||||||
Store store, RecipientAddress address
|
Store store, RecipientAddress address
|
||||||
) throws SQLException {
|
) 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);
|
final var recipients = store.findAllByAddress(address);
|
||||||
|
|
||||||
if (recipients.isEmpty()) {
|
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());
|
return new Pair<>(store.addNewRecipient(address), List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ public class MergeRecipientHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.debug(
|
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());
|
recipient.id());
|
||||||
store.updateRecipientAddress(recipient.id(), recipient.address().removeIdentifiersFrom(address));
|
store.updateRecipientAddress(recipient.id(), recipient.address().removeIdentifiersFrom(address));
|
||||||
|
|
||||||
|
|
|
@ -790,8 +790,8 @@ public class RecipientStore implements RecipientIdCreator, RecipientResolver, Re
|
||||||
) throws SQLException {
|
) throws SQLException {
|
||||||
final var sql = (
|
final var sql = (
|
||||||
"""
|
"""
|
||||||
INSERT INTO %s (number, uuid, pni)
|
INSERT INTO %s (number, uuid, pni, username)
|
||||||
VALUES (?, ?, ?)
|
VALUES (?, ?, ?, ?)
|
||||||
RETURNING _id
|
RETURNING _id
|
||||||
"""
|
"""
|
||||||
).formatted(TABLE_RECIPIENT);
|
).formatted(TABLE_RECIPIENT);
|
||||||
|
@ -800,6 +800,7 @@ public class RecipientStore implements RecipientIdCreator, RecipientResolver, Re
|
||||||
statement.setBytes(2,
|
statement.setBytes(2,
|
||||||
address.serviceId().map(ServiceId::getRawUuid).map(UuidUtil::toByteArray).orElse(null));
|
address.serviceId().map(ServiceId::getRawUuid).map(UuidUtil::toByteArray).orElse(null));
|
||||||
statement.setBytes(3, address.pni().map(PNI::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);
|
final var generatedKey = Utils.executeQueryForOptional(statement, Utils::getIdMapper);
|
||||||
if (generatedKey.isPresent()) {
|
if (generatedKey.isPresent()) {
|
||||||
final var recipientId = new RecipientId(generatedKey.get(), this);
|
final var recipientId = new RecipientId(generatedKey.get(), this);
|
||||||
|
@ -817,7 +818,7 @@ public class RecipientStore implements RecipientIdCreator, RecipientResolver, Re
|
||||||
final var sql = (
|
final var sql = (
|
||||||
"""
|
"""
|
||||||
UPDATE %s
|
UPDATE %s
|
||||||
SET number = NULL, uuid = NULL, pni = NULL
|
SET number = NULL, uuid = NULL, pni = NULL, username = NULL
|
||||||
WHERE _id = ?
|
WHERE _id = ?
|
||||||
"""
|
"""
|
||||||
).formatted(TABLE_RECIPIENT);
|
).formatted(TABLE_RECIPIENT);
|
||||||
|
|
|
@ -23,19 +23,24 @@ class MergeRecipientHelperTest {
|
||||||
static final PNI PNI_B = PNI.from(UUID.randomUUID());
|
static final PNI PNI_B = PNI.from(UUID.randomUUID());
|
||||||
static final String NUMBER_A = "+AAA";
|
static final String NUMBER_A = "+AAA";
|
||||||
static final String NUMBER_B = "+BBB";
|
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_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);
|
static final PartialAddresses ADDR_B = new PartialAddresses(SERVICE_ID_B, PNI_B, NUMBER_B, USERNAME_B);
|
||||||
|
|
||||||
static final T[] testInstancesNone = new T[]{
|
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.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_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.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.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[]{
|
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)), 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.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.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))),
|
new T(Set.of(rec(1, ADDR_A.NUM)), ADDR_A.FULL, Set.of(rec(1, ADDR_A.FULL))),
|
||||||
|
@ -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.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_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[]{
|
static final T[] testInstancesTwo = new T[]{
|
||||||
|
@ -225,22 +234,28 @@ class MergeRecipientHelperTest {
|
||||||
|
|
||||||
private record PartialAddresses(
|
private record PartialAddresses(
|
||||||
RecipientAddress FULL,
|
RecipientAddress FULL,
|
||||||
|
RecipientAddress FULL_USERNAME,
|
||||||
RecipientAddress ACI,
|
RecipientAddress ACI,
|
||||||
RecipientAddress PNI,
|
RecipientAddress PNI,
|
||||||
RecipientAddress NUM,
|
RecipientAddress NUM,
|
||||||
RecipientAddress ACI_NUM,
|
RecipientAddress ACI_NUM,
|
||||||
|
RecipientAddress ACI_NUM_USERNAME,
|
||||||
RecipientAddress PNI_NUM,
|
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),
|
this(new RecipientAddress(serviceId, pni, number),
|
||||||
|
new RecipientAddress(serviceId, pni, number, username),
|
||||||
new RecipientAddress(serviceId, null, null),
|
new RecipientAddress(serviceId, null, null),
|
||||||
new RecipientAddress(null, pni, null),
|
new RecipientAddress(null, pni, null),
|
||||||
new RecipientAddress(null, null, number),
|
new RecipientAddress(null, null, number),
|
||||||
new RecipientAddress(serviceId, null, number),
|
new RecipientAddress(serviceId, null, number),
|
||||||
|
new RecipientAddress(serviceId, null, number, username),
|
||||||
new RecipientAddress(null, pni, number),
|
new RecipientAddress(null, pni, number),
|
||||||
new RecipientAddress(serviceId, pni, null));
|
new RecipientAddress(serviceId, pni, null),
|
||||||
|
new RecipientAddress(serviceId, null, null, username));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue