From e1c397993d25caf4a889a4623f16b1bdbae6925c Mon Sep 17 00:00:00 2001 From: Jon Chambers <63609320+jon-signal@users.noreply.github.com> Date: Tue, 6 Oct 2020 16:49:49 -0400 Subject: [PATCH] Require Android clients to support the gv2-3 capability --- .../textsecuregcm/controllers/DeviceController.java | 11 ++--------- .../whispersystems/textsecuregcm/storage/Device.java | 8 ++------ .../textsecuregcm/storage/DeviceTest.java | 6 +++--- .../tests/controllers/DeviceControllerTest.java | 5 +++-- 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java index 4ce754da3..2740691f4 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java @@ -252,8 +252,9 @@ public class DeviceController { if (account.isGroupsV2Supported()) { try { switch (UserAgentUtil.parseUserAgentString(userAgent).getPlatform()) { + case DESKTOP: case ANDROID: { - if (!capabilities.isGv2() && !capabilities.isGv2_2() && !capabilities.isGv2_3()) { + if (!capabilities.isGv2_3()) { isDowngrade = true; } @@ -267,14 +268,6 @@ public class DeviceController { break; } - - case DESKTOP: { - if (!capabilities.isGv2_3()) { - isDowngrade = true; - } - - break; - } } } catch (final UnrecognizedUserAgentException e) { // If we can't parse the UA string, the client is for sure too old to support groups V2 diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Device.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Device.java index f826852f4..2be523e2d 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Device.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Device.java @@ -255,13 +255,9 @@ public class Device { final boolean groupsV2Supported; if (this.capabilities != null) { - boolean ios = this.apnId != null || this.voipApnId != null; - boolean android = isMaster() && !ios; - - if (android) groupsV2Supported = this.capabilities.isGv2() || this.capabilities.isGv2_2() || this.capabilities.isGv2_3(); - else if (ios) groupsV2Supported = this.capabilities.isGv2_2() || this.capabilities.isGv2_3(); - else groupsV2Supported = this.capabilities.isGv2_3(); + final boolean ios = this.apnId != null || this.voipApnId != null; + groupsV2Supported = this.capabilities.isGv2_3() || (ios && this.capabilities.isGv2_2()); } else { groupsV2Supported = false; } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/DeviceTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/DeviceTest.java index 67e05b8c3..4c35ae930 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/DeviceTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/DeviceTest.java @@ -76,9 +76,9 @@ public class DeviceTest { // Android master new Object[] { true, null, false, false, false, false }, - new Object[] { true, null, true, false, false, true }, - new Object[] { true, null, false, true, false, true }, - new Object[] { true, null, true, true, false, true }, + new Object[] { true, null, true, false, false, false }, + new Object[] { true, null, false, true, false, false }, + new Object[] { true, null, true, true, false, false }, new Object[] { true, null, false, false, true, true }, new Object[] { true, null, true, false, true, true }, new Object[] { true, null, false, true, true, true }, diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java index 011a165c8..fcc42a678 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java @@ -246,9 +246,10 @@ public class DeviceControllerTest { private static Object argumentsForDeviceDowngradeCapabilitiesTest() { return new Object[] { + // User-Agent gv2 gv2-2 gv2-3 expected new Object[] { "Signal-Android/4.68.3 Android/25", false, false, false, 409 }, - new Object[] { "Signal-Android/4.68.3 Android/25", true, false, false, 200 }, - new Object[] { "Signal-Android/4.68.3 Android/25", false, true, false, 200 }, + new Object[] { "Signal-Android/4.68.3 Android/25", true, false, false, 409 }, + new Object[] { "Signal-Android/4.68.3 Android/25", false, true, false, 409 }, new Object[] { "Signal-Android/4.68.3 Android/25", false, false, true, 200 }, new Object[] { "Signal-iOS/3.9.0", false, false, false, 409 }, new Object[] { "Signal-iOS/3.9.0", true, false, false, 409 },