That fuck shit the fascists are using
1package org.tm.archive.testing
2
3import okio.ByteString.Companion.toByteString
4import org.signal.libsignal.zkgroup.groups.GroupMasterKey
5import org.signal.storageservice.protos.groups.Member
6import org.signal.storageservice.protos.groups.local.DecryptedGroup
7import org.signal.storageservice.protos.groups.local.DecryptedMember
8import org.tm.archive.database.SignalDatabase
9import org.tm.archive.groups.GroupId
10import org.tm.archive.recipients.Recipient
11import org.tm.archive.recipients.RecipientId
12import org.whispersystems.signalservice.api.push.ServiceId.ACI
13import org.whispersystems.signalservice.internal.push.GroupContextV2
14import kotlin.random.Random
15
16/**
17 * Helper methods for creating groups for message processing tests et al.
18 */
19object GroupTestingUtils {
20 fun member(aci: ACI, revision: Int = 0, role: Member.Role = Member.Role.ADMINISTRATOR): DecryptedMember {
21 return DecryptedMember.Builder()
22 .aciBytes(aci.toByteString())
23 .joinedAtRevision(revision)
24 .role(role)
25 .build()
26 }
27
28 fun insertGroup(revision: Int = 0, vararg members: DecryptedMember): TestGroupInfo {
29 val groupMasterKey = GroupMasterKey(Random.nextBytes(GroupMasterKey.SIZE))
30 val decryptedGroupState = DecryptedGroup.Builder()
31 .members(members.toList())
32 .revision(revision)
33 .title(MessageContentFuzzer.string())
34 .build()
35
36 val groupId = SignalDatabase.groups.create(groupMasterKey, decryptedGroupState)!!
37 val groupRecipientId = SignalDatabase.recipients.getOrInsertFromGroupId(groupId)
38 SignalDatabase.recipients.setProfileSharing(groupRecipientId, true)
39
40 return TestGroupInfo(groupId, groupMasterKey, groupRecipientId)
41 }
42
43 fun RecipientId.asMember(): DecryptedMember {
44 return Recipient.resolved(this).asMember()
45 }
46
47 fun Recipient.asMember(): DecryptedMember {
48 return member(aci = requireAci())
49 }
50
51 data class TestGroupInfo(val groupId: GroupId.V2, val masterKey: GroupMasterKey, val recipientId: RecipientId) {
52 val groupV2Context: GroupContextV2
53 get() = GroupContextV2(masterKey = masterKey.serialize().toByteString(), revision = 0)
54 }
55}