Separate capability reads from writes and introduce gv2-2 write flag.

This commit is contained in:
Alan Evans
2020-09-22 11:09:51 -03:00
committed by Greyson Parrelli
parent 15ee8c6cac
commit 74e94f3a97
8 changed files with 96 additions and 22 deletions

View File

@@ -29,7 +29,6 @@ import org.whispersystems.signalservice.api.kbs.MasterKey;
import org.whispersystems.signalservice.api.messages.calls.TurnServerInfo;
import org.whispersystems.signalservice.api.messages.multidevice.DeviceInfo;
import org.whispersystems.signalservice.api.profiles.ProfileAndCredential;
import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
import org.whispersystems.signalservice.api.profiles.SignalServiceProfileWrite;
import org.whispersystems.signalservice.api.push.ContactTokenDetails;
import org.whispersystems.signalservice.api.push.SignedPreKeyEntity;
@@ -55,6 +54,7 @@ import org.whispersystems.signalservice.internal.contacts.crypto.Unauthenticated
import org.whispersystems.signalservice.internal.contacts.entities.DiscoveryRequest;
import org.whispersystems.signalservice.internal.contacts.entities.DiscoveryResponse;
import org.whispersystems.signalservice.internal.crypto.ProvisioningCipher;
import org.whispersystems.signalservice.api.account.AccountAttributes;
import org.whispersystems.signalservice.internal.push.ProfileAvatarData;
import org.whispersystems.signalservice.internal.push.PushServiceSocket;
import org.whispersystems.signalservice.internal.push.RemoteAttestationUtil;
@@ -244,7 +244,7 @@ public class SignalServiceAccountManager {
public VerifyAccountResponse verifyAccountWithCode(String verificationCode, String signalingKey, int signalProtocolRegistrationId, boolean fetchesMessages,
String pin, String registrationLock,
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
SignalServiceProfile.Capabilities capabilities,
AccountAttributes.Capabilities capabilities,
boolean discoverableByPhoneNumber)
throws IOException
{
@@ -274,7 +274,7 @@ public class SignalServiceAccountManager {
public void setAccountAttributes(String signalingKey, int signalProtocolRegistrationId, boolean fetchesMessages,
String pin, String registrationLock,
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
SignalServiceProfile.Capabilities capabilities,
AccountAttributes.Capabilities capabilities,
boolean discoverableByPhoneNumber)
throws IOException
{

View File

@@ -4,8 +4,9 @@
* Licensed according to the LICENSE file in this repository.
*/
package org.whispersystems.signalservice.internal.push;
package org.whispersystems.signalservice.api.account;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
@@ -43,7 +44,7 @@ public class AccountAttributes {
private boolean discoverableByPhoneNumber;
@JsonProperty
private SignalServiceProfile.Capabilities capabilities;
private Capabilities capabilities;
public AccountAttributes(String signalingKey,
int registrationId,
@@ -52,7 +53,7 @@ public class AccountAttributes {
String registrationLock,
byte[] unidentifiedAccessKey,
boolean unrestrictedUnidentifiedAccess,
SignalServiceProfile.Capabilities capabilities,
Capabilities capabilities,
boolean discoverableByPhoneNumber)
{
this.signalingKey = signalingKey;
@@ -110,7 +111,39 @@ public class AccountAttributes {
return discoverableByPhoneNumber;
}
public SignalServiceProfile.Capabilities getCapabilities() {
public Capabilities getCapabilities() {
return capabilities;
}
public static class Capabilities {
@JsonProperty
private boolean uuid;
@JsonProperty("gv2-2")
private boolean gv2;
@JsonProperty
private boolean storage;
@JsonCreator
public Capabilities() {}
public Capabilities(boolean uuid, boolean gv2, boolean storage) {
this.uuid = uuid;
this.gv2 = gv2;
this.storage = storage;
}
public boolean isUuid() {
return uuid;
}
public boolean isGv2() {
return gv2;
}
public boolean isStorage() {
return storage;
}
}
}

View File

@@ -103,12 +103,6 @@ public class SignalServiceProfile {
@JsonCreator
public Capabilities() {}
public Capabilities(boolean uuid, boolean gv2, boolean storage) {
this.uuid = uuid;
this.gv2 = gv2;
this.storage = storage;
}
public boolean isUuid() {
return uuid;
}

View File

@@ -32,6 +32,7 @@ import org.whispersystems.libsignal.state.PreKeyRecord;
import org.whispersystems.libsignal.state.SignedPreKeyRecord;
import org.whispersystems.libsignal.util.Pair;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.account.AccountAttributes;
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
import org.whispersystems.signalservice.api.groupsv2.CredentialResponse;
import org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString;
@@ -293,7 +294,7 @@ public class PushServiceSocket {
public VerifyAccountResponse verifyAccountCode(String verificationCode, String signalingKey, int registrationId, boolean fetchesMessages,
String pin, String registrationLock,
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
SignalServiceProfile.Capabilities capabilities,
AccountAttributes.Capabilities capabilities,
boolean discoverableByPhoneNumber)
throws IOException
{
@@ -307,7 +308,7 @@ public class PushServiceSocket {
public void setAccountAttributes(String signalingKey, int registrationId, boolean fetchesMessages,
String pin, String registrationLock,
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
SignalServiceProfile.Capabilities capabilities,
AccountAttributes.Capabilities capabilities,
boolean discoverableByPhoneNumber)
throws IOException
{

View File

@@ -0,0 +1,46 @@
package org.whispersystems.signalservice.api.account;
import org.junit.Test;
import org.whispersystems.signalservice.internal.util.JsonUtil;
import static org.junit.Assert.assertEquals;
public final class AccountAttributesTest {
@Test
public void can_write_account_attributes() {
String json = JsonUtil.toJson(new AccountAttributes("skey",
123,
true,
"1234",
"reglock1234",
new byte[10],
false,
new AccountAttributes.Capabilities(true, true, true),
false));
assertEquals("{\"signalingKey\":\"skey\"," +
"\"registrationId\":123," +
"\"voice\":true," +
"\"video\":true," +
"\"fetchesMessages\":true," +
"\"pin\":\"1234\"," +
"\"registrationLock\":\"reglock1234\"," +
"\"unidentifiedAccessKey\":\"AAAAAAAAAAAAAA==\"," +
"\"unrestrictedUnidentifiedAccess\":false," +
"\"discoverableByPhoneNumber\":false," +
"\"capabilities\":{\"uuid\":true,\"storage\":true,\"gv2-2\":true}}", json);
}
@Test
public void gv2_true() {
String json = JsonUtil.toJson(new AccountAttributes.Capabilities(false, true, false));
assertEquals("{\"uuid\":false,\"storage\":false,\"gv2-2\":true}", json);
}
@Test
public void gv2_false() {
String json = JsonUtil.toJson(new AccountAttributes.Capabilities(false, false, false));
assertEquals("{\"uuid\":false,\"storage\":false,\"gv2-2\":false}", json);
}
}