Add test cases for group member label access control.

This commit is contained in:
jeffrey-signal 2026-03-06 19:32:48 -05:00 committed by GitHub
parent 0cf884fbdf
commit 33b3d0cd43
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
451 changed files with 1378 additions and 17 deletions

1
.gitignore vendored
View File

@ -8,6 +8,7 @@ out/
.gradle/
build/
kls_database.db
local.properties
### Mac OS ###
.DS_Store

View File

@ -26,7 +26,7 @@ application {
}
dependencies {
implementation("org.signal:libsignal-client:0.87.2")
implementation("org.signal:libsignal-client:0.88.1")
implementation("com.thedeanda:lorem:2.2")
implementation(kotlin("reflect"))
}

View File

@ -281,7 +281,8 @@ object StandardFrames {
accessControl = Group.AccessControl(
attributes = Group.AccessControl.AccessRequired.MEMBER,
members = Group.AccessControl.AccessRequired.MEMBER,
addFromInviteLink = Group.AccessControl.AccessRequired.UNSATISFIABLE
addFromInviteLink = Group.AccessControl.AccessRequired.UNSATISFIABLE,
memberLabel = Group.AccessControl.AccessRequired.MEMBER
)
),
avatarColor = AvatarColor.A170
@ -336,7 +337,8 @@ object StandardFrames {
accessControl = Group.AccessControl(
attributes = Group.AccessControl.AccessRequired.MEMBER,
members = Group.AccessControl.AccessRequired.MEMBER,
addFromInviteLink = Group.AccessControl.AccessRequired.UNSATISFIABLE
addFromInviteLink = Group.AccessControl.AccessRequired.UNSATISFIABLE,
memberLabel = Group.AccessControl.AccessRequired.MEMBER
)
),
avatarColor = AvatarColor.A170

View File

@ -14,10 +14,9 @@ import okio.ByteString.Companion.toByteString
import oneOf
import org.thoughtcrime.securesms.backup.v2.proto.*
import pni
import toByteString
/**
* Reasonable permutations of [GroupChangeChatMultipleUpdate] objects.
* Reasonable permutations of [GroupChangeChatUpdate]s containing multiple batched updates.
*/
object ChatItemGroupChangeChatMultipleUpdateTestCase : TestCase("chat_item_group_change_chat_multiple_update") {
override fun PermutationScope.execute() {
@ -33,7 +32,7 @@ object ChatItemGroupChangeChatMultipleUpdateTestCase : TestCase("chat_item_group
val groupMembersExcludingSelfGenerator = { Generators.list(StandardFrames.recipientAlice.aci, StandardFrames.recipientBob.aci) }
val peopleNotInGroupGenerator = { Generators.list(StandardFrames.recipientCarol.aci, StandardFrames.recipientDan.aci) }
var updaterAci = StandardFrames.SELF_ACI.toByteString()
val updaterAci = StandardFrames.SELF_ACI.toByteString()
val listOfGenerators = oneOf(
// genericGroupUpdateGenerator,
@ -201,6 +200,17 @@ object ChatItemGroupChangeChatMultipleUpdateTestCase : TestCase("chat_item_group
requestorAci = StandardFrames.SELF_ACI.toByteString(),
count = some(Generators.ints(1, 5))
)
},
// groupMemberLabelAccessLevelChangeUpdateGenerator
Generators.permutation {
frames += GroupMemberLabelAccessLevelChangeUpdate(
updaterAci,
accessLevel = someEnum(
GroupV2AccessLevel::class.java,
excluding = listOf(GroupV2AccessLevel.UNKNOWN, GroupV2AccessLevel.ANY, GroupV2AccessLevel.UNSATISFIABLE)
)
)
}
)
@ -244,6 +254,7 @@ object ChatItemGroupChangeChatMultipleUpdateTestCase : TestCase("chat_item_group
val groupInviteLinkDisabledUpdateGenerator = listOfGenerators[20]
val groupMemberJoinedByLinkUpdateGenerator = listOfGenerators[21]
val groupSequenceOfRequestsAndCancelsUpdateGenerator = listOfGenerators[22]
val groupMemberLabelAccessLevelChangeUpdateGenerator = listOfGenerators[23]
val updates = Generators.permutation<GroupChangeChatUpdate.Update> {
frames += GroupChangeChatUpdate.Update(
@ -269,7 +280,8 @@ object ChatItemGroupChangeChatMultipleUpdateTestCase : TestCase("chat_item_group
groupInviteLinkAdminApprovalUpdate = someOneOf(groupInviteLinkAdminApprovalUpdateGenerator),
groupInviteLinkDisabledUpdate = someOneOf(groupInviteLinkDisabledUpdateGenerator),
groupMemberJoinedByLinkUpdate = someOneOf(groupMemberJoinedByLinkUpdateGenerator),
groupSequenceOfRequestsAndCancelsUpdate = someOneOf(groupSequenceOfRequestsAndCancelsUpdateGenerator)
groupSequenceOfRequestsAndCancelsUpdate = someOneOf(groupSequenceOfRequestsAndCancelsUpdateGenerator),
groupMemberLabelAccessLevelChangeUpdate = someOneOf(groupMemberLabelAccessLevelChangeUpdateGenerator)
)
}

View File

@ -10,8 +10,8 @@ import nullable
import okio.ByteString.Companion.toByteString
import oneOf
import org.thoughtcrime.securesms.backup.v2.proto.*
import plus
import pni
import toByteString
import kotlin.time.Duration.Companion.days
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds
@ -31,6 +31,7 @@ object ChatItemGroupChangeChatUpdateTestCase : TestCase("chat_item_group_change_
frames += StandardFrames.chatGroupAB
val groupMembersExcludingSelfGenerator = { Generators.list(StandardFrames.recipientAlice.aci, StandardFrames.recipientBob.aci) }
val groupMembersIncludingSelfGenerator = { groupMembersExcludingSelfGenerator().plus(StandardFrames.SELF_ACI.toByteString()) }
val peopleNotInGroupGenerator = { Generators.list(StandardFrames.recipientCarol.aci, StandardFrames.recipientDan.aci) }
val listOfGenerators = oneOf(
@ -259,6 +260,13 @@ object ChatItemGroupChangeChatUpdateTestCase : TestCase("chat_item_group_change_
updaterAci = some(groupMembersExcludingSelfGenerator()),
expiresInMs = some(Generators.longs(lower = 5.minutes.inWholeSeconds, upper = 28.days.inWholeSeconds)).seconds.inWholeMilliseconds
)
},
// groupMemberLabelAccessLevelChangeUpdateGenerator
Generators.permutation {
frames += GroupMemberLabelAccessLevelChangeUpdate(
updaterAci = some(groupMembersIncludingSelfGenerator()),
accessLevel = someEnum(GroupV2AccessLevel::class.java, excluding = listOf(GroupV2AccessLevel.UNKNOWN, GroupV2AccessLevel.ANY, GroupV2AccessLevel.UNSATISFIABLE))
)
}
)
@ -296,6 +304,7 @@ object ChatItemGroupChangeChatUpdateTestCase : TestCase("chat_item_group_change_
val groupV2MigrationDroppedMembersUpdateGenerator = listOfGenerators[31]
val groupSequenceOfRequestsAndCancelsUpdateGenerator = listOfGenerators[32]
val groupExpirationTimerUpdateGenerator = listOfGenerators[33]
val groupMemberLabelAccessLevelChangeUpdateGenerator = listOfGenerators[34]
val updatesGenerator = Generators.permutation<GroupChangeChatUpdate.Update> {
frames += GroupChangeChatUpdate.Update(
genericGroupUpdate = someOneOf(genericGroupUpdateGenerator),
@ -331,7 +340,8 @@ object ChatItemGroupChangeChatUpdateTestCase : TestCase("chat_item_group_change_
groupV2MigrationInvitedMembersUpdate = someOneOf(groupV2MigrationInvitedMembersUpdateGenerator),
groupV2MigrationDroppedMembersUpdate = someOneOf(groupV2MigrationDroppedMembersUpdateGenerator),
groupSequenceOfRequestsAndCancelsUpdate = someOneOf(groupSequenceOfRequestsAndCancelsUpdateGenerator),
groupExpirationTimerUpdate = someOneOf(groupExpirationTimerUpdateGenerator)
groupExpirationTimerUpdate = someOneOf(groupExpirationTimerUpdateGenerator),
groupMemberLabelAccessLevelChangeUpdate = someOneOf(groupMemberLabelAccessLevelChangeUpdateGenerator)
)
}
frames += Frame(

View File

@ -46,7 +46,8 @@ object RecipientGroupsTestCase : TestCase("recipient_groups") {
accessControl = Group.AccessControl(
attributes = someEnum(Group.AccessControl.AccessRequired::class.java, Group.AccessControl.AccessRequired.UNKNOWN, Group.AccessControl.AccessRequired.ANY, Group.AccessControl.AccessRequired.UNSATISFIABLE),
members = someEnum(Group.AccessControl.AccessRequired::class.java, Group.AccessControl.AccessRequired.UNKNOWN, Group.AccessControl.AccessRequired.ANY, Group.AccessControl.AccessRequired.UNSATISFIABLE),
addFromInviteLink = someEnum(Group.AccessControl.AccessRequired::class.java, Group.AccessControl.AccessRequired.UNKNOWN, Group.AccessControl.AccessRequired.ANY, Group.AccessControl.AccessRequired.MEMBER)
addFromInviteLink = someEnum(Group.AccessControl.AccessRequired::class.java, Group.AccessControl.AccessRequired.UNKNOWN, Group.AccessControl.AccessRequired.ANY, Group.AccessControl.AccessRequired.MEMBER),
memberLabel = someEnum(Group.AccessControl.AccessRequired::class.java, Group.AccessControl.AccessRequired.UNKNOWN, Group.AccessControl.AccessRequired.ANY, Group.AccessControl.AccessRequired.UNSATISFIABLE)
),
version = somePositiveInt(),
members = generateMembers(),

View File

@ -365,6 +365,7 @@ message Group {
AccessRequired attributes = 1;
AccessRequired members = 2;
AccessRequired addFromInviteLink = 3;
AccessRequired memberLabel = 4;
}
}
@ -1075,6 +1076,7 @@ message GroupChangeChatUpdate {
GroupV2MigrationDroppedMembersUpdate groupV2MigrationDroppedMembersUpdate = 32;
GroupSequenceOfRequestsAndCancelsUpdate groupSequenceOfRequestsAndCancelsUpdate = 33;
GroupExpirationTimerUpdate groupExpirationTimerUpdate = 34;
GroupMemberLabelAccessLevelChangeUpdate groupMemberLabelAccessLevelChangeUpdate = 35;
}
}
@ -1126,6 +1128,11 @@ message GroupAttributesAccessLevelChangeUpdate {
GroupV2AccessLevel accessLevel = 2;
}
message GroupMemberLabelAccessLevelChangeUpdate {
optional bytes updaterAci = 1;
GroupV2AccessLevel accessLevel = 2;
}
message GroupAnnouncementOnlyChangeUpdate {
optional bytes updaterAci = 1;
bool isAnnouncementOnly = 2;

Binary file not shown.

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

Binary file not shown.

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

Binary file not shown.

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

Binary file not shown.

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -186,6 +186,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -186,6 +186,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -186,6 +186,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -163,6 +163,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"
@ -263,16 +264,15 @@ Frame {
groupChange = GroupChangeChatUpdate {
updates = [
Update {
groupV2MigrationSelfInvitedUpdate = GroupV2MigrationSelfInvitedUpdate {}
},
Update {
groupV2MigrationInvitedMembersUpdate = GroupV2MigrationInvitedMembersUpdate {
invitedMembersCount = 2
groupMemberLabelAccessLevelChangeUpdate = GroupMemberLabelAccessLevelChangeUpdate {
accessLevel = GroupV2AccessLevel.MEMBER
updaterAci = <00000000000040008000000000000001>
}
},
Update {
groupV2MigrationDroppedMembersUpdate = GroupV2MigrationDroppedMembersUpdate {
droppedMembersCount = 3
groupMemberLabelAccessLevelChangeUpdate = GroupMemberLabelAccessLevelChangeUpdate {
accessLevel = GroupV2AccessLevel.ADMINISTRATOR
updaterAci = <00000000000040008000000000000001>
}
}
]

View File

@ -0,0 +1,283 @@
// This file was auto-generated! It's only meant to show you what's in the .binproto. Do not edit!
BackupInfo {
backupTimeMs = 1715636551000
currentAppVersion = "FooClient 2.0.0"
debugInfo = <>
firstAppVersion = "FooClient 1.0.0"
mediaRootBackupKey = <8fba3ce1946b78a4ca0d9229ddb050a12702072309d6574ae12451269e5fdbb2>
version = 1
}
Frame {
account = AccountData {
accountSettings = AccountSettings {
allowAutomaticKeyVerification = true
appTheme = AppTheme.SYSTEM
autoDownloadSettings = AutoDownloadSettings {
audio = AutoDownloadOption.WIFI_AND_CELLULAR
documents = AutoDownloadOption.WIFI
images = AutoDownloadOption.WIFI_AND_CELLULAR
video = AutoDownloadOption.WIFI
}
callsUseLessDataSetting = CallsUseLessDataSetting.NEVER
customChatColors = [
CustomChatColor {
id = 1
solid = -16777216
},
CustomChatColor {
id = 2
solid = -65536
},
CustomChatColor {
id = 3
solid = -16711936
}
]
defaultSentMediaQuality = SentMediaQuality.STANDARD
displayBadgesOnProfile = true
hasCompletedUsernameOnboarding = true
hasSeenGroupStoryEducationSheet = true
hasSetMyStoriesPrivacy = true
hasViewedOnboardingStory = true
keepMutedChatsArchived = true
linkPreviews = true
notDiscoverableByPhoneNumber = true
phoneNumberSharingMode = PhoneNumberSharingMode.NOBODY
preferContactAvatars = true
preferredReactionEmoji = [
"a",
"b",
"c"
]
readReceipts = true
sealedSenderIndicators = true
storiesDisabled = true
storyViewReceiptsEnabled = true
typingIndicators = true
universalExpireTimerSeconds = 3600
}
avatarUrlPath = ""
bioEmoji = ""
bioText = ""
donationSubscriberData = SubscriberData {
currencyCode = "USD"
manuallyCancelled = true
subscriberId = <ecbb68c734331a2ea333cda747c98c4553652261582b4fce5ae0dea84dce6519>
}
familyName = "Fett"
givenName = "Boba"
profileKey = <610291abedc34249489da39a31c9a5cd99cdd26ff58732e268e357ee0075d9d8>
svrPin = ""
username = "boba_fett.66"
usernameLink = UsernameLink {
color = Color.OLIVE
entropy = <65675c73d00eb01005e3bb7c4a47f296cb6554f78981238815e915d824fd2e93>
serverId = <61c101a200d5421789c20518d8497af0>
}
}
}
Frame {
recipient = Recipient {
id = 1
self = Self {
avatarColor = AvatarColor.A210
}
}
}
Frame {
recipient = Recipient {
id = 2
releaseNotes = ReleaseNotes {}
}
}
Frame {
recipient = Recipient {
distributionList = DistributionListItem {
distributionId = <00000000000000000000000000000000>
distributionList = DistributionList {
name = ""
privacyMode = PrivacyMode.ALL
}
}
id = 3
}
}
Frame {
recipient = Recipient {
contact = Contact {
aci = <000a11ce000040008000000000000001>
avatarColor = AvatarColor.A110
e164 = 16105550101
identityKey = <05ea7585ab4f6de1913af6059f69b50ad26c55af2779e31bde58dec8ba165e164e>
identityState = IdentityState.DEFAULT
note = ""
pni = <000a11ce000040008000000000000002>
profileFamilyName = "Smith"
profileGivenName = "Alice"
profileKey = <d75d75d75d75d75d75d75d75d75d75d75d75d75d75d75d75d75d75d75d75d75d>
registered = Registered {}
systemFamilyName = ""
systemGivenName = ""
systemNickname = ""
visibility = Visibility.VISIBLE
}
id = 4
}
}
Frame {
recipient = Recipient {
contact = Contact {
aci = <00000b0b000040008000000000000001>
avatarColor = AvatarColor.A120
e164 = 16105550102
identityKey = <052dde6c6dcfaf0ffdcbc5e2eac90e5a18c26969907c942eade3a0e345948be27e>
identityState = IdentityState.VERIFIED
note = ""
pni = <00000b0b000040008000000000000002>
profileFamilyName = "Jones"
profileGivenName = "Bob"
profileKey = <0410410410410410410410410410410410410410410410410410410410410410>
registered = Registered {}
systemFamilyName = ""
systemGivenName = ""
systemNickname = ""
visibility = Visibility.VISIBLE
}
id = 5
}
}
Frame {
recipient = Recipient {
contact = Contact {
aci = <0000ca01000040008000000000000001>
avatarColor = AvatarColor.A130
e164 = 16105550103
identityKey = <05463769b7ab7a38be2cbfa7e8cff7e37cbb32770d762370c55cfbe82346593f54>
identityState = IdentityState.UNVERIFIED
note = ""
pni = <0000ca01000040008000000000000002>
profileFamilyName = "Johnson"
profileGivenName = "Carol"
profileKey = <0820820820820820820820820820820820820820820820820820820820820820>
registered = Registered {}
systemFamilyName = ""
systemGivenName = ""
systemNickname = ""
visibility = Visibility.VISIBLE
}
id = 6
}
}
Frame {
recipient = Recipient {
contact = Contact {
aci = <000000da000040008000000000000001>
avatarColor = AvatarColor.A140
e164 = 16105550104
identityKey = <059e10072ee327212377ef4c442843b426ea4a1f16a029c23c9d028be4f513a97c>
identityState = IdentityState.DEFAULT
note = ""
pni = <000000da000040008000000000000002>
profileFamilyName = "Brown"
profileGivenName = "Dan"
profileKey = <0c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30>
registered = Registered {}
systemFamilyName = ""
systemGivenName = ""
systemNickname = ""
visibility = Visibility.VISIBLE
}
id = 7
}
}
Frame {
recipient = Recipient {
group = Group {
avatarColor = AvatarColor.A170
masterKey = <0000000000000000000000000000000000000000000000000000000000000000>
snapshot = GroupSnapshot {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"
inviteLinkPassword = <>
members = [
Member {
labelEmoji = ""
labelString = ""
role = Role.ADMINISTRATOR
userId = <00000000000040008000000000000001>
},
Member {
labelEmoji = ""
labelString = ""
role = Role.DEFAULT
userId = <000a11ce000040008000000000000001>
},
Member {
labelEmoji = ""
labelString = ""
role = Role.DEFAULT
userId = <00000b0b000040008000000000000001>
}
]
title = GroupAttributeBlob {
title = "Me, Alice, Bob"
}
version = 1
}
storySendMode = StorySendMode.DEFAULT
whitelisted = true
}
id = 10
}
}
Frame {
chat = Chat {
expireTimerVersion = 1
id = 3
recipientId = 10
}
}
Frame {
chatItem = ChatItem {
authorId = 1
chatId = 3
dateSent = 1853750641458
directionless = DirectionlessMessageDetails {}
updateMessage = ChatUpdateMessage {
groupChange = GroupChangeChatUpdate {
updates = [
Update {
groupV2MigrationSelfInvitedUpdate = GroupV2MigrationSelfInvitedUpdate {}
},
Update {
groupV2MigrationInvitedMembersUpdate = GroupV2MigrationInvitedMembersUpdate {
invitedMembersCount = 2
}
},
Update {
groupV2MigrationDroppedMembersUpdate = GroupV2MigrationDroppedMembersUpdate {
droppedMembersCount = 3
}
}
]
}
}
}
}

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

View File

@ -209,6 +209,7 @@ Frame {
accessControl = AccessControl {
addFromInviteLink = AccessRequired.UNSATISFIABLE
attributes = AccessRequired.MEMBER
memberLabel = AccessRequired.MEMBER
members = AccessRequired.MEMBER
}
avatarUrl = "https://example.com/avatar.jpg"

Some files were not shown because too many files have changed in this diff Show More