mirror of
https://github.com/AsamK/signal-cli
synced 2025-08-29 02:20:39 +00:00
Fix storing of username
This commit is contained in:
parent
0d60c4d464
commit
77f284661b
3 changed files with 27 additions and 11 deletions
|
@ -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());
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ public class MergeRecipientHelper {
|
|||
}
|
||||
|
||||
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));
|
||||
|
||||
|
|
|
@ -793,8 +793,8 @@ public class RecipientStore implements RecipientIdCreator, RecipientResolver, Re
|
|||
) 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);
|
||||
|
@ -803,6 +803,7 @@ public class RecipientStore implements RecipientIdCreator, RecipientResolver, Re
|
|||
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);
|
||||
|
@ -820,7 +821,7 @@ public class RecipientStore implements RecipientIdCreator, RecipientResolver, Re
|
|||
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);
|
||||
|
|
|
@ -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))),
|
||||
|
@ -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[]{
|
||||
|
@ -225,22 +234,28 @@ class MergeRecipientHelperTest {
|
|||
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue