mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-08 05:08:34 +00:00
Separate capability reads from writes and introduce gv2-2 write flag.
This commit is contained in:
parent
15ee8c6cac
commit
74e94f3a97
@ -1,7 +1,7 @@
|
|||||||
package org.thoughtcrime.securesms;
|
package org.thoughtcrime.securesms;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
import org.thoughtcrime.securesms.util.FeatureFlags;
|
||||||
import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
|
import org.whispersystems.signalservice.api.account.AccountAttributes;
|
||||||
|
|
||||||
public final class AppCapabilities {
|
public final class AppCapabilities {
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ public final class AppCapabilities {
|
|||||||
* @param storageCapable Whether or not the user can use storage service. This is another way of
|
* @param storageCapable Whether or not the user can use storage service. This is another way of
|
||||||
* asking if the user has set a Signal PIN or not.
|
* asking if the user has set a Signal PIN or not.
|
||||||
*/
|
*/
|
||||||
public static SignalServiceProfile.Capabilities getCapabilities(boolean storageCapable) {
|
public static AccountAttributes.Capabilities getCapabilities(boolean storageCapable) {
|
||||||
return new SignalServiceProfile.Capabilities(UUID_CAPABLE, FeatureFlags.groupsV2(), storageCapable);
|
return new AccountAttributes.Capabilities(UUID_CAPABLE, FeatureFlags.groupsV2(), storageCapable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,8 @@ import org.thoughtcrime.securesms.logging.Log;
|
|||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||||
import org.whispersystems.signalservice.api.SignalServiceAccountManager;
|
import org.whispersystems.signalservice.api.SignalServiceAccountManager;
|
||||||
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
|
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
|
||||||
import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
|
|
||||||
import org.whispersystems.signalservice.api.push.exceptions.NetworkFailureException;
|
import org.whispersystems.signalservice.api.push.exceptions.NetworkFailureException;
|
||||||
|
import org.whispersystems.signalservice.api.account.AccountAttributes;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ public class RefreshAttributesJob extends BaseJob {
|
|||||||
|
|
||||||
boolean phoneNumberDiscoverable = SignalStore.phoneNumberPrivacy().getPhoneNumberListingMode().isDiscoverable();
|
boolean phoneNumberDiscoverable = SignalStore.phoneNumberPrivacy().getPhoneNumberListingMode().isDiscoverable();
|
||||||
|
|
||||||
SignalServiceProfile.Capabilities capabilities = AppCapabilities.getCapabilities(kbsValues.hasPin() && !kbsValues.hasOptedOut());
|
AccountAttributes.Capabilities capabilities = AppCapabilities.getCapabilities(kbsValues.hasPin() && !kbsValues.hasOptedOut());
|
||||||
Log.i(TAG, "Calling setAccountAttributes() reglockV1? " + !TextUtils.isEmpty(registrationLockV1) + ", reglockV2? " + !TextUtils.isEmpty(registrationLockV2) + ", pin? " + kbsValues.hasPin() +
|
Log.i(TAG, "Calling setAccountAttributes() reglockV1? " + !TextUtils.isEmpty(registrationLockV1) + ", reglockV2? " + !TextUtils.isEmpty(registrationLockV2) + ", pin? " + kbsValues.hasPin() +
|
||||||
"\n Phone number discoverable : " + phoneNumberDiscoverable +
|
"\n Phone number discoverable : " + phoneNumberDiscoverable +
|
||||||
"\n Capabilities:" +
|
"\n Capabilities:" +
|
||||||
|
@ -7,7 +7,7 @@ import androidx.annotation.NonNull;
|
|||||||
import org.thoughtcrime.securesms.AppCapabilities;
|
import org.thoughtcrime.securesms.AppCapabilities;
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||||
import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
|
import org.whispersystems.signalservice.api.account.AccountAttributes;
|
||||||
|
|
||||||
public final class LogSectionCapabilities implements LogSection {
|
public final class LogSectionCapabilities implements LogSection {
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ public final class LogSectionCapabilities implements LogSection {
|
|||||||
|
|
||||||
Recipient self = Recipient.self();
|
Recipient self = Recipient.self();
|
||||||
|
|
||||||
SignalServiceProfile.Capabilities capabilities = AppCapabilities.getCapabilities(false);
|
AccountAttributes.Capabilities capabilities = AppCapabilities.getCapabilities(false);
|
||||||
|
|
||||||
return new StringBuilder().append("Local device UUID : ").append(capabilities.isUuid()).append("\n")
|
return new StringBuilder().append("Local device UUID : ").append(capabilities.isUuid()).append("\n")
|
||||||
.append("Global UUID : ").append(self.getUuidCapability()).append("\n")
|
.append("Global UUID : ").append(self.getUuidCapability()).append("\n")
|
||||||
|
@ -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.calls.TurnServerInfo;
|
||||||
import org.whispersystems.signalservice.api.messages.multidevice.DeviceInfo;
|
import org.whispersystems.signalservice.api.messages.multidevice.DeviceInfo;
|
||||||
import org.whispersystems.signalservice.api.profiles.ProfileAndCredential;
|
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.profiles.SignalServiceProfileWrite;
|
||||||
import org.whispersystems.signalservice.api.push.ContactTokenDetails;
|
import org.whispersystems.signalservice.api.push.ContactTokenDetails;
|
||||||
import org.whispersystems.signalservice.api.push.SignedPreKeyEntity;
|
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.DiscoveryRequest;
|
||||||
import org.whispersystems.signalservice.internal.contacts.entities.DiscoveryResponse;
|
import org.whispersystems.signalservice.internal.contacts.entities.DiscoveryResponse;
|
||||||
import org.whispersystems.signalservice.internal.crypto.ProvisioningCipher;
|
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.ProfileAvatarData;
|
||||||
import org.whispersystems.signalservice.internal.push.PushServiceSocket;
|
import org.whispersystems.signalservice.internal.push.PushServiceSocket;
|
||||||
import org.whispersystems.signalservice.internal.push.RemoteAttestationUtil;
|
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,
|
public VerifyAccountResponse verifyAccountWithCode(String verificationCode, String signalingKey, int signalProtocolRegistrationId, boolean fetchesMessages,
|
||||||
String pin, String registrationLock,
|
String pin, String registrationLock,
|
||||||
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
|
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
|
||||||
SignalServiceProfile.Capabilities capabilities,
|
AccountAttributes.Capabilities capabilities,
|
||||||
boolean discoverableByPhoneNumber)
|
boolean discoverableByPhoneNumber)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
@ -274,7 +274,7 @@ public class SignalServiceAccountManager {
|
|||||||
public void setAccountAttributes(String signalingKey, int signalProtocolRegistrationId, boolean fetchesMessages,
|
public void setAccountAttributes(String signalingKey, int signalProtocolRegistrationId, boolean fetchesMessages,
|
||||||
String pin, String registrationLock,
|
String pin, String registrationLock,
|
||||||
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
|
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
|
||||||
SignalServiceProfile.Capabilities capabilities,
|
AccountAttributes.Capabilities capabilities,
|
||||||
boolean discoverableByPhoneNumber)
|
boolean discoverableByPhoneNumber)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
|
@ -4,8 +4,9 @@
|
|||||||
* Licensed according to the LICENSE file in this repository.
|
* 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 com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
|
import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
|
||||||
@ -43,7 +44,7 @@ public class AccountAttributes {
|
|||||||
private boolean discoverableByPhoneNumber;
|
private boolean discoverableByPhoneNumber;
|
||||||
|
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private SignalServiceProfile.Capabilities capabilities;
|
private Capabilities capabilities;
|
||||||
|
|
||||||
public AccountAttributes(String signalingKey,
|
public AccountAttributes(String signalingKey,
|
||||||
int registrationId,
|
int registrationId,
|
||||||
@ -52,7 +53,7 @@ public class AccountAttributes {
|
|||||||
String registrationLock,
|
String registrationLock,
|
||||||
byte[] unidentifiedAccessKey,
|
byte[] unidentifiedAccessKey,
|
||||||
boolean unrestrictedUnidentifiedAccess,
|
boolean unrestrictedUnidentifiedAccess,
|
||||||
SignalServiceProfile.Capabilities capabilities,
|
Capabilities capabilities,
|
||||||
boolean discoverableByPhoneNumber)
|
boolean discoverableByPhoneNumber)
|
||||||
{
|
{
|
||||||
this.signalingKey = signalingKey;
|
this.signalingKey = signalingKey;
|
||||||
@ -110,7 +111,39 @@ public class AccountAttributes {
|
|||||||
return discoverableByPhoneNumber;
|
return discoverableByPhoneNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SignalServiceProfile.Capabilities getCapabilities() {
|
public Capabilities getCapabilities() {
|
||||||
return capabilities;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -103,12 +103,6 @@ public class SignalServiceProfile {
|
|||||||
@JsonCreator
|
@JsonCreator
|
||||||
public Capabilities() {}
|
public Capabilities() {}
|
||||||
|
|
||||||
public Capabilities(boolean uuid, boolean gv2, boolean storage) {
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.gv2 = gv2;
|
|
||||||
this.storage = storage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isUuid() {
|
public boolean isUuid() {
|
||||||
return uuid;
|
return uuid;
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import org.whispersystems.libsignal.state.PreKeyRecord;
|
|||||||
import org.whispersystems.libsignal.state.SignedPreKeyRecord;
|
import org.whispersystems.libsignal.state.SignedPreKeyRecord;
|
||||||
import org.whispersystems.libsignal.util.Pair;
|
import org.whispersystems.libsignal.util.Pair;
|
||||||
import org.whispersystems.libsignal.util.guava.Optional;
|
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.crypto.UnidentifiedAccess;
|
||||||
import org.whispersystems.signalservice.api.groupsv2.CredentialResponse;
|
import org.whispersystems.signalservice.api.groupsv2.CredentialResponse;
|
||||||
import org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString;
|
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,
|
public VerifyAccountResponse verifyAccountCode(String verificationCode, String signalingKey, int registrationId, boolean fetchesMessages,
|
||||||
String pin, String registrationLock,
|
String pin, String registrationLock,
|
||||||
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
|
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
|
||||||
SignalServiceProfile.Capabilities capabilities,
|
AccountAttributes.Capabilities capabilities,
|
||||||
boolean discoverableByPhoneNumber)
|
boolean discoverableByPhoneNumber)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
@ -307,7 +308,7 @@ public class PushServiceSocket {
|
|||||||
public void setAccountAttributes(String signalingKey, int registrationId, boolean fetchesMessages,
|
public void setAccountAttributes(String signalingKey, int registrationId, boolean fetchesMessages,
|
||||||
String pin, String registrationLock,
|
String pin, String registrationLock,
|
||||||
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
|
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
|
||||||
SignalServiceProfile.Capabilities capabilities,
|
AccountAttributes.Capabilities capabilities,
|
||||||
boolean discoverableByPhoneNumber)
|
boolean discoverableByPhoneNumber)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user