]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/groups/GroupInfoV2.java
859c72096e7440fa46b45d1fff7c46094495ae67
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / storage / groups / GroupInfoV2.java
1 package org.asamk.signal.manager.storage.groups;
2
3 import org.asamk.signal.manager.groups.GroupIdV2;
4 import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
5 import org.asamk.signal.manager.storage.recipients.RecipientId;
6 import org.asamk.signal.manager.storage.recipients.RecipientResolver;
7 import org.signal.storageservice.protos.groups.AccessControl;
8 import org.signal.storageservice.protos.groups.local.DecryptedGroup;
9 import org.signal.zkgroup.groups.GroupMasterKey;
10 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
11 import org.whispersystems.signalservice.api.util.UuidUtil;
12
13 import java.util.Set;
14 import java.util.stream.Collectors;
15
16 public class GroupInfoV2 extends GroupInfo {
17
18 private final GroupIdV2 groupId;
19 private final GroupMasterKey masterKey;
20
21 private boolean blocked;
22 private DecryptedGroup group; // stored as a file with hexadecimal groupId as name
23 private RecipientResolver recipientResolver;
24
25 public GroupInfoV2(final GroupIdV2 groupId, final GroupMasterKey masterKey) {
26 this.groupId = groupId;
27 this.masterKey = masterKey;
28 }
29
30 public GroupInfoV2(final GroupIdV2 groupId, final GroupMasterKey masterKey, final boolean blocked) {
31 this.groupId = groupId;
32 this.masterKey = masterKey;
33 this.blocked = blocked;
34 }
35
36 @Override
37 public GroupIdV2 getGroupId() {
38 return groupId;
39 }
40
41 public GroupMasterKey getMasterKey() {
42 return masterKey;
43 }
44
45 public void setGroup(final DecryptedGroup group, final RecipientResolver recipientResolver) {
46 this.group = group;
47 this.recipientResolver = recipientResolver;
48 }
49
50 public DecryptedGroup getGroup() {
51 return group;
52 }
53
54 @Override
55 public String getTitle() {
56 if (this.group == null) {
57 return null;
58 }
59 return this.group.getTitle();
60 }
61
62 @Override
63 public String getDescription() {
64 if (this.group == null) {
65 return null;
66 }
67 return this.group.getDescription();
68 }
69
70 @Override
71 public GroupInviteLinkUrl getGroupInviteLink() {
72 if (this.group == null || this.group.getInviteLinkPassword() == null || (
73 this.group.getAccessControl().getAddFromInviteLink() != AccessControl.AccessRequired.ANY
74 && this.group.getAccessControl().getAddFromInviteLink()
75 != AccessControl.AccessRequired.ADMINISTRATOR
76 )) {
77 return null;
78 }
79
80 return GroupInviteLinkUrl.forGroup(masterKey, group);
81 }
82
83 @Override
84 public Set<RecipientId> getMembers() {
85 if (this.group == null) {
86 return Set.of();
87 }
88 return group.getMembersList()
89 .stream()
90 .map(m -> new SignalServiceAddress(UuidUtil.parseOrThrow(m.getUuid().toByteArray()), null))
91 .map(recipientResolver::resolveRecipient)
92 .collect(Collectors.toSet());
93 }
94
95 @Override
96 public Set<RecipientId> getPendingMembers() {
97 if (this.group == null) {
98 return Set.of();
99 }
100 return group.getPendingMembersList()
101 .stream()
102 .map(m -> new SignalServiceAddress(UuidUtil.parseOrThrow(m.getUuid().toByteArray()), null))
103 .map(recipientResolver::resolveRecipient)
104 .collect(Collectors.toSet());
105 }
106
107 @Override
108 public Set<RecipientId> getRequestingMembers() {
109 if (this.group == null) {
110 return Set.of();
111 }
112 return group.getRequestingMembersList()
113 .stream()
114 .map(m -> new SignalServiceAddress(UuidUtil.parseOrThrow(m.getUuid().toByteArray()), null))
115 .map(recipientResolver::resolveRecipient)
116 .collect(Collectors.toSet());
117 }
118
119 @Override
120 public boolean isBlocked() {
121 return blocked;
122 }
123
124 @Override
125 public void setBlocked(final boolean blocked) {
126 this.blocked = blocked;
127 }
128
129 @Override
130 public int getMessageExpirationTime() {
131 return this.group != null && this.group.hasDisappearingMessagesTimer()
132 ? this.group.getDisappearingMessagesTimer().getDuration()
133 : 0;
134 }
135 }