Drop the UUID addressing capability flag entirely.
This commit is contained in:
parent
a567f4a6de
commit
ebc3a251b7
|
@ -197,7 +197,7 @@ public class ProfileController {
|
||||||
accountProfile.get().getIdentityKey(),
|
accountProfile.get().getIdentityKey(),
|
||||||
UnidentifiedAccessChecksum.generateFor(accountProfile.get().getUnidentifiedAccessKey()),
|
UnidentifiedAccessChecksum.generateFor(accountProfile.get().getUnidentifiedAccessKey()),
|
||||||
accountProfile.get().isUnrestrictedUnidentifiedAccess(),
|
accountProfile.get().isUnrestrictedUnidentifiedAccess(),
|
||||||
new UserCapabilities(accountProfile.get().isUuidAddressingSupported(), accountProfile.get().isGroupsV2Supported()),
|
new UserCapabilities(accountProfile.get().isGroupsV2Supported()),
|
||||||
username.orElse(null),
|
username.orElse(null),
|
||||||
null,
|
null,
|
||||||
credential.orElse(null),
|
credential.orElse(null),
|
||||||
|
@ -235,7 +235,7 @@ public class ProfileController {
|
||||||
accountProfile.get().getIdentityKey(),
|
accountProfile.get().getIdentityKey(),
|
||||||
UnidentifiedAccessChecksum.generateFor(accountProfile.get().getUnidentifiedAccessKey()),
|
UnidentifiedAccessChecksum.generateFor(accountProfile.get().getUnidentifiedAccessKey()),
|
||||||
accountProfile.get().isUnrestrictedUnidentifiedAccess(),
|
accountProfile.get().isUnrestrictedUnidentifiedAccess(),
|
||||||
new UserCapabilities(accountProfile.get().isUuidAddressingSupported(), accountProfile.get().isGroupsV2Supported()),
|
new UserCapabilities(accountProfile.get().isGroupsV2Supported()),
|
||||||
username,
|
username,
|
||||||
accountProfile.get().getUuid(),
|
accountProfile.get().getUuid(),
|
||||||
null,
|
null,
|
||||||
|
@ -308,7 +308,7 @@ public class ProfileController {
|
||||||
accountProfile.get().getIdentityKey(),
|
accountProfile.get().getIdentityKey(),
|
||||||
UnidentifiedAccessChecksum.generateFor(accountProfile.get().getUnidentifiedAccessKey()),
|
UnidentifiedAccessChecksum.generateFor(accountProfile.get().getUnidentifiedAccessKey()),
|
||||||
accountProfile.get().isUnrestrictedUnidentifiedAccess(),
|
accountProfile.get().isUnrestrictedUnidentifiedAccess(),
|
||||||
new UserCapabilities(accountProfile.get().isUuidAddressingSupported(), accountProfile.get().isGroupsV2Supported()),
|
new UserCapabilities(accountProfile.get().isGroupsV2Supported()),
|
||||||
username.orElse(null),
|
username.orElse(null),
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
|
|
|
@ -3,23 +3,15 @@ package org.whispersystems.textsecuregcm.entities;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
public class UserCapabilities {
|
public class UserCapabilities {
|
||||||
@JsonProperty
|
|
||||||
private boolean uuid;
|
|
||||||
|
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private boolean gv2;
|
private boolean gv2;
|
||||||
|
|
||||||
public UserCapabilities() {}
|
public UserCapabilities() {}
|
||||||
|
|
||||||
public UserCapabilities(boolean uuid, boolean gv2) {
|
public UserCapabilities(boolean gv2) {
|
||||||
this.uuid = uuid;
|
|
||||||
this.gv2 = gv2;
|
this.gv2 = gv2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUuid() {
|
|
||||||
return uuid;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isGv2() {
|
public boolean isGv2() {
|
||||||
return gv2;
|
return gv2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,12 +137,6 @@ public class Account implements Principal {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUuidAddressingSupported() {
|
|
||||||
return devices.stream()
|
|
||||||
.filter(Device::isEnabled)
|
|
||||||
.allMatch(device -> device.getCapabilities() != null && device.getCapabilities().isUuid());
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isGroupsV2Supported() {
|
public boolean isGroupsV2Supported() {
|
||||||
return devices.stream()
|
return devices.stream()
|
||||||
.filter(Device::isEnabled)
|
.filter(Device::isEnabled)
|
||||||
|
|
|
@ -267,9 +267,6 @@ public class Device {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class DeviceCapabilities {
|
public static class DeviceCapabilities {
|
||||||
@JsonProperty
|
|
||||||
private boolean uuid;
|
|
||||||
|
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private boolean gv2;
|
private boolean gv2;
|
||||||
|
|
||||||
|
@ -281,17 +278,12 @@ public class Device {
|
||||||
|
|
||||||
public DeviceCapabilities() {}
|
public DeviceCapabilities() {}
|
||||||
|
|
||||||
public DeviceCapabilities(boolean uuid, boolean gv2, boolean storage, boolean transfer) {
|
public DeviceCapabilities(boolean gv2, boolean storage, boolean transfer) {
|
||||||
this.uuid = uuid;
|
|
||||||
this.gv2 = gv2;
|
this.gv2 = gv2;
|
||||||
this.storage = storage;
|
this.storage = storage;
|
||||||
this.transfer = transfer;
|
this.transfer = transfer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUuid() {
|
|
||||||
return uuid;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isGv2() {
|
public boolean isGv2() {
|
||||||
return gv2;
|
return gv2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,7 +117,6 @@ public class DeviceControllerTest {
|
||||||
// when(maxedAccount.getActiveDeviceCount()).thenReturn(6);
|
// when(maxedAccount.getActiveDeviceCount()).thenReturn(6);
|
||||||
when(account.getAuthenticatedDevice()).thenReturn(Optional.of(masterDevice));
|
when(account.getAuthenticatedDevice()).thenReturn(Optional.of(masterDevice));
|
||||||
when(account.isEnabled()).thenReturn(false);
|
when(account.isEnabled()).thenReturn(false);
|
||||||
when(account.isUuidAddressingSupported()).thenReturn(true);
|
|
||||||
when(account.isGroupsV2Supported()).thenReturn(true);
|
when(account.isGroupsV2Supported()).thenReturn(true);
|
||||||
|
|
||||||
when(pendingDevicesManager.getCodeForNumber(AuthHelper.VALID_NUMBER)).thenReturn(Optional.of(new StoredVerificationCode("5678901", System.currentTimeMillis(), null)));
|
when(pendingDevicesManager.getCodeForNumber(AuthHelper.VALID_NUMBER)).thenReturn(Optional.of(new StoredVerificationCode("5678901", System.currentTimeMillis(), null)));
|
||||||
|
@ -224,7 +223,7 @@ public class DeviceControllerTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void deviceDowngradeCapabilitiesTest() throws Exception {
|
public void deviceDowngradeCapabilitiesTest() throws Exception {
|
||||||
Device.DeviceCapabilities deviceCapabilities = new Device.DeviceCapabilities(true, false, true, false);
|
Device.DeviceCapabilities deviceCapabilities = new Device.DeviceCapabilities(false, true, false);
|
||||||
AccountAttributes accountAttributes = new AccountAttributes("keykeykeykey", false, 1234, null, null, null, null, true, deviceCapabilities);
|
AccountAttributes accountAttributes = new AccountAttributes("keykeykeykey", false, 1234, null, null, null, null, true, deviceCapabilities);
|
||||||
Response response = resources.getJerseyTest()
|
Response response = resources.getJerseyTest()
|
||||||
.target("/v1/devices/5678901")
|
.target("/v1/devices/5678901")
|
||||||
|
|
|
@ -85,13 +85,13 @@ public class MessageControllerTest {
|
||||||
@Before
|
@Before
|
||||||
public void setup() throws Exception {
|
public void setup() throws Exception {
|
||||||
Set<Device> singleDeviceList = new HashSet<Device>() {{
|
Set<Device> singleDeviceList = new HashSet<Device>() {{
|
||||||
add(new Device(1, null, "foo", "bar", "baz", "isgcm", null, null, false, 111, new SignedPreKey(333, "baz", "boop"), System.currentTimeMillis(), System.currentTimeMillis(), "Test", 0, new Device.DeviceCapabilities(true, true, true, true)));
|
add(new Device(1, null, "foo", "bar", "baz", "isgcm", null, null, false, 111, new SignedPreKey(333, "baz", "boop"), System.currentTimeMillis(), System.currentTimeMillis(), "Test", 0, new Device.DeviceCapabilities(true, true, true)));
|
||||||
}};
|
}};
|
||||||
|
|
||||||
Set<Device> multiDeviceList = new HashSet<Device>() {{
|
Set<Device> multiDeviceList = new HashSet<Device>() {{
|
||||||
add(new Device(1, null, "foo", "bar", "baz", "isgcm", null, null, false, 222, new SignedPreKey(111, "foo", "bar"), System.currentTimeMillis(), System.currentTimeMillis(), "Test", 0, new Device.DeviceCapabilities(true, true, true, false)));
|
add(new Device(1, null, "foo", "bar", "baz", "isgcm", null, null, false, 222, new SignedPreKey(111, "foo", "bar"), System.currentTimeMillis(), System.currentTimeMillis(), "Test", 0, new Device.DeviceCapabilities(true, true, false)));
|
||||||
add(new Device(2, null, "foo", "bar", "baz", "isgcm", null, null, false, 333, new SignedPreKey(222, "oof", "rab"), System.currentTimeMillis(), System.currentTimeMillis(), "Test", 0, new Device.DeviceCapabilities(true, true, true, false)));
|
add(new Device(2, null, "foo", "bar", "baz", "isgcm", null, null, false, 333, new SignedPreKey(222, "oof", "rab"), System.currentTimeMillis(), System.currentTimeMillis(), "Test", 0, new Device.DeviceCapabilities(true, true, false)));
|
||||||
add(new Device(3, null, "foo", "bar", "baz", "isgcm", null, null, false, 444, null, System.currentTimeMillis() - TimeUnit.DAYS.toMillis(31), System.currentTimeMillis(), "Test", 0, new Device.DeviceCapabilities(false, false, false, false)));
|
add(new Device(3, null, "foo", "bar", "baz", "isgcm", null, null, false, 444, null, System.currentTimeMillis() - TimeUnit.DAYS.toMillis(31), System.currentTimeMillis(), "Test", 0, new Device.DeviceCapabilities(false, false, false)));
|
||||||
}};
|
}};
|
||||||
|
|
||||||
Account singleDeviceAccount = new Account(SINGLE_DEVICE_RECIPIENT, SINGLE_DEVICE_UUID, singleDeviceList, "1234".getBytes());
|
Account singleDeviceAccount = new Account(SINGLE_DEVICE_RECIPIENT, SINGLE_DEVICE_UUID, singleDeviceList, "1234".getBytes());
|
||||||
|
|
|
@ -96,7 +96,7 @@ public class ProfileControllerTest {
|
||||||
when(profileAccount.getAvatar()).thenReturn("profiles/bang");
|
when(profileAccount.getAvatar()).thenReturn("profiles/bang");
|
||||||
when(profileAccount.getUuid()).thenReturn(AuthHelper.VALID_UUID_TWO);
|
when(profileAccount.getUuid()).thenReturn(AuthHelper.VALID_UUID_TWO);
|
||||||
when(profileAccount.isEnabled()).thenReturn(true);
|
when(profileAccount.isEnabled()).thenReturn(true);
|
||||||
when(profileAccount.isUuidAddressingSupported()).thenReturn(false);
|
when(profileAccount.isGroupsV2Supported()).thenReturn(false);
|
||||||
when(profileAccount.getPayments()).thenReturn(List.of(new PaymentAddress("mc", "12345678901234567890123456789012")));
|
when(profileAccount.getPayments()).thenReturn(List.of(new PaymentAddress("mc", "12345678901234567890123456789012")));
|
||||||
|
|
||||||
Account capabilitiesAccount = mock(Account.class);
|
Account capabilitiesAccount = mock(Account.class);
|
||||||
|
@ -105,7 +105,7 @@ public class ProfileControllerTest {
|
||||||
when(capabilitiesAccount.getProfileName()).thenReturn("bazz");
|
when(capabilitiesAccount.getProfileName()).thenReturn("bazz");
|
||||||
when(capabilitiesAccount.getAvatar()).thenReturn("profiles/bangz");
|
when(capabilitiesAccount.getAvatar()).thenReturn("profiles/bangz");
|
||||||
when(capabilitiesAccount.isEnabled()).thenReturn(true);
|
when(capabilitiesAccount.isEnabled()).thenReturn(true);
|
||||||
when(capabilitiesAccount.isUuidAddressingSupported()).thenReturn(true);
|
when(capabilitiesAccount.isGroupsV2Supported()).thenReturn(true);
|
||||||
|
|
||||||
when(accountsManager.get(AuthHelper.VALID_NUMBER_TWO)).thenReturn(Optional.of(profileAccount));
|
when(accountsManager.get(AuthHelper.VALID_NUMBER_TWO)).thenReturn(Optional.of(profileAccount));
|
||||||
when(accountsManager.get(AuthHelper.VALID_UUID_TWO)).thenReturn(Optional.of(profileAccount));
|
when(accountsManager.get(AuthHelper.VALID_UUID_TWO)).thenReturn(Optional.of(profileAccount));
|
||||||
|
@ -158,7 +158,7 @@ public class ProfileControllerTest {
|
||||||
assertThat(profile.getName()).isEqualTo("baz");
|
assertThat(profile.getName()).isEqualTo("baz");
|
||||||
assertThat(profile.getAvatar()).isEqualTo("profiles/bang");
|
assertThat(profile.getAvatar()).isEqualTo("profiles/bang");
|
||||||
assertThat(profile.getPayments()).isEqualTo(List.of(new PaymentAddress("mc", "12345678901234567890123456789012")));
|
assertThat(profile.getPayments()).isEqualTo(List.of(new PaymentAddress("mc", "12345678901234567890123456789012")));
|
||||||
assertThat(profile.getCapabilities().isUuid()).isFalse();
|
assertThat(profile.getCapabilities().isGv2()).isFalse();
|
||||||
assertThat(profile.getUsername()).isNull();
|
assertThat(profile.getUsername()).isNull();
|
||||||
assertThat(profile.getUuid()).isNull();;
|
assertThat(profile.getUuid()).isNull();;
|
||||||
|
|
||||||
|
@ -242,7 +242,7 @@ public class ProfileControllerTest {
|
||||||
.header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD))
|
.header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD))
|
||||||
.get(Profile.class);
|
.get(Profile.class);
|
||||||
|
|
||||||
assertThat(profile.getCapabilities().isUuid()).isTrue();
|
assertThat(profile.getCapabilities().isGv2()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -385,7 +385,7 @@ public class ProfileControllerTest {
|
||||||
assertThat(profile.getIdentityKey()).isEqualTo("bar");
|
assertThat(profile.getIdentityKey()).isEqualTo("bar");
|
||||||
assertThat(profile.getName()).isEqualTo("validname");
|
assertThat(profile.getName()).isEqualTo("validname");
|
||||||
assertThat(profile.getAvatar()).isEqualTo("profiles/validavatar");
|
assertThat(profile.getAvatar()).isEqualTo("profiles/validavatar");
|
||||||
assertThat(profile.getCapabilities().isUuid()).isFalse();
|
assertThat(profile.getCapabilities().isGv2()).isFalse();
|
||||||
assertThat(profile.getUsername()).isEqualTo("n00bkiller");
|
assertThat(profile.getUsername()).isEqualTo("n00bkiller");
|
||||||
assertThat(profile.getUuid()).isNull();;
|
assertThat(profile.getUuid()).isNull();;
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,9 @@ public class AccountTest {
|
||||||
private final Device recentSecondaryDevice = mock(Device.class);
|
private final Device recentSecondaryDevice = mock(Device.class);
|
||||||
private final Device oldSecondaryDevice = mock(Device.class);
|
private final Device oldSecondaryDevice = mock(Device.class);
|
||||||
|
|
||||||
private final Device uuidCapableDevice = mock(Device.class);
|
private final Device gv2CapableDevice = mock(Device.class);
|
||||||
private final Device uuidIncapableDevice = mock(Device.class);
|
private final Device gv2IncapableDevice = mock(Device.class);
|
||||||
private final Device uuidIncapableExpiredDevice = mock(Device.class);
|
private final Device gv2IncapableExpiredDevice = mock(Device.class);
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() {
|
public void setup() {
|
||||||
|
@ -51,17 +51,17 @@ public class AccountTest {
|
||||||
when(oldSecondaryDevice.isEnabled()).thenReturn(false);
|
when(oldSecondaryDevice.isEnabled()).thenReturn(false);
|
||||||
when(oldSecondaryDevice.getId()).thenReturn(2L);
|
when(oldSecondaryDevice.getId()).thenReturn(2L);
|
||||||
|
|
||||||
when(uuidCapableDevice.getCapabilities()).thenReturn(new Device.DeviceCapabilities(true, true, true, true));
|
when(gv2CapableDevice.getCapabilities()).thenReturn(new Device.DeviceCapabilities(true, true, true));
|
||||||
when(uuidCapableDevice.getLastSeen()).thenReturn(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1));
|
when(gv2CapableDevice.getLastSeen()).thenReturn(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1));
|
||||||
when(uuidCapableDevice.isEnabled()).thenReturn(true);
|
when(gv2CapableDevice.isEnabled()).thenReturn(true);
|
||||||
|
|
||||||
when(uuidIncapableDevice.getCapabilities()).thenReturn(new Device.DeviceCapabilities(false, false, false, false));
|
when(gv2IncapableDevice.getCapabilities()).thenReturn(new Device.DeviceCapabilities(false, false, false));
|
||||||
when(uuidIncapableDevice.getLastSeen()).thenReturn(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1));
|
when(gv2IncapableDevice.getLastSeen()).thenReturn(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1));
|
||||||
when(uuidIncapableDevice.isEnabled()).thenReturn(true);
|
when(gv2IncapableDevice.isEnabled()).thenReturn(true);
|
||||||
|
|
||||||
when(uuidIncapableExpiredDevice.getCapabilities()).thenReturn(new Device.DeviceCapabilities(false, false, false, false));
|
when(gv2IncapableExpiredDevice.getCapabilities()).thenReturn(new Device.DeviceCapabilities(false, false, false));
|
||||||
when(uuidIncapableExpiredDevice.getLastSeen()).thenReturn(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(31));
|
when(gv2IncapableExpiredDevice.getLastSeen()).thenReturn(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(31));
|
||||||
when(uuidIncapableExpiredDevice.isEnabled()).thenReturn(false);
|
when(gv2IncapableExpiredDevice.isEnabled()).thenReturn(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -101,22 +101,22 @@ public class AccountTest {
|
||||||
@Test
|
@Test
|
||||||
public void testCapabilities() {
|
public void testCapabilities() {
|
||||||
Account uuidCapable = new Account("+14152222222", UUID.randomUUID(), new HashSet<Device>() {{
|
Account uuidCapable = new Account("+14152222222", UUID.randomUUID(), new HashSet<Device>() {{
|
||||||
add(uuidCapableDevice);
|
add(gv2CapableDevice);
|
||||||
}}, "1234".getBytes());
|
}}, "1234".getBytes());
|
||||||
|
|
||||||
Account uuidIncapable = new Account("+14152222222", UUID.randomUUID(), new HashSet<Device>() {{
|
Account uuidIncapable = new Account("+14152222222", UUID.randomUUID(), new HashSet<Device>() {{
|
||||||
add(uuidCapableDevice);
|
add(gv2CapableDevice);
|
||||||
add(uuidIncapableDevice);
|
add(gv2IncapableDevice);
|
||||||
}}, "1234".getBytes());
|
}}, "1234".getBytes());
|
||||||
|
|
||||||
Account uuidCapableWithExpiredIncapable = new Account("+14152222222", UUID.randomUUID(), new HashSet<Device>() {{
|
Account uuidCapableWithExpiredIncapable = new Account("+14152222222", UUID.randomUUID(), new HashSet<Device>() {{
|
||||||
add(uuidCapableDevice);
|
add(gv2CapableDevice);
|
||||||
add(uuidIncapableExpiredDevice);
|
add(gv2IncapableExpiredDevice);
|
||||||
}}, "1234".getBytes());
|
}}, "1234".getBytes());
|
||||||
|
|
||||||
assertTrue(uuidCapable.isUuidAddressingSupported());
|
assertTrue(uuidCapable.isGroupsV2Supported());
|
||||||
assertFalse(uuidIncapable.isUuidAddressingSupported());
|
assertFalse(uuidIncapable.isGroupsV2Supported());
|
||||||
assertTrue(uuidCapableWithExpiredIncapable.isUuidAddressingSupported());
|
assertTrue(uuidCapableWithExpiredIncapable.isGroupsV2Supported());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -266,7 +266,7 @@ public class AccountsTest {
|
||||||
private Device generateDevice(long id) {
|
private Device generateDevice(long id) {
|
||||||
Random random = new Random(System.currentTimeMillis());
|
Random random = new Random(System.currentTimeMillis());
|
||||||
SignedPreKey signedPreKey = new SignedPreKey(random.nextInt(), "testPublicKey-" + random.nextInt(), "testSignature-" + random.nextInt());
|
SignedPreKey signedPreKey = new SignedPreKey(random.nextInt(), "testPublicKey-" + random.nextInt(), "testSignature-" + random.nextInt());
|
||||||
return new Device(id, "testName-" + random.nextInt(), "testAuthToken-" + random.nextInt(), "testSalt-" + random.nextInt(), null, "testGcmId-" + random.nextInt(), "testApnId-" + random.nextInt(), "testVoipApnId-" + random.nextInt(), random.nextBoolean(), random.nextInt(), signedPreKey, random.nextInt(), random.nextInt(), "testUserAgent-" + random.nextInt() , 0, new Device.DeviceCapabilities(random.nextBoolean(), random.nextBoolean(), random.nextBoolean(), random.nextBoolean()));
|
return new Device(id, "testName-" + random.nextInt(), "testAuthToken-" + random.nextInt(), "testSalt-" + random.nextInt(), null, "testGcmId-" + random.nextInt(), "testApnId-" + random.nextInt(), "testVoipApnId-" + random.nextInt(), random.nextBoolean(), random.nextInt(), signedPreKey, random.nextInt(), random.nextInt(), "testUserAgent-" + random.nextInt() , 0, new Device.DeviceCapabilities(random.nextBoolean(), random.nextBoolean(), random.nextBoolean()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Account generateAccount(String number, UUID uuid) {
|
private Account generateAccount(String number, UUID uuid) {
|
||||||
|
|
Loading…
Reference in New Issue