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