138 lines
3.4 KiB
Java
138 lines
3.4 KiB
Java
package org.whispersystems.signalservice.api.storage;
|
|
|
|
import com.google.protobuf.ByteString;
|
|
|
|
import org.signal.zkgroup.InvalidInputException;
|
|
import org.signal.zkgroup.groups.GroupMasterKey;
|
|
import org.whispersystems.signalservice.api.util.ProtoUtil;
|
|
import org.whispersystems.signalservice.internal.storage.protos.GroupV2Record;
|
|
|
|
import java.util.Objects;
|
|
|
|
public final class SignalGroupV2Record implements SignalRecord {
|
|
|
|
private final StorageId id;
|
|
private final GroupV2Record proto;
|
|
private final byte[] masterKey;
|
|
private final boolean hasUnknownFields;
|
|
|
|
public SignalGroupV2Record(StorageId id, GroupV2Record proto) {
|
|
this.id = id;
|
|
this.proto = proto;
|
|
this.hasUnknownFields = ProtoUtil.hasUnknownFields(proto);
|
|
this.masterKey = proto.getMasterKey().toByteArray();
|
|
}
|
|
|
|
@Override
|
|
public StorageId getId() {
|
|
return id;
|
|
}
|
|
|
|
public boolean hasUnknownFields() {
|
|
return hasUnknownFields;
|
|
}
|
|
|
|
public byte[] serializeUnknownFields() {
|
|
return hasUnknownFields ? proto.toByteArray() : null;
|
|
}
|
|
|
|
public byte[] getMasterKeyBytes() {
|
|
return masterKey;
|
|
}
|
|
|
|
public GroupMasterKey getMasterKeyOrThrow() {
|
|
try {
|
|
return new GroupMasterKey(masterKey);
|
|
} catch (InvalidInputException e) {
|
|
throw new AssertionError(e);
|
|
}
|
|
}
|
|
|
|
public boolean isBlocked() {
|
|
return proto.getBlocked();
|
|
}
|
|
|
|
public boolean isProfileSharingEnabled() {
|
|
return proto.getWhitelisted();
|
|
}
|
|
|
|
public boolean isArchived() {
|
|
return proto.getArchived();
|
|
}
|
|
|
|
public boolean isForcedUnread() {
|
|
return proto.getMarkedUnread();
|
|
}
|
|
|
|
GroupV2Record toProto() {
|
|
return proto;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (this == o) return true;
|
|
if (o == null || getClass() != o.getClass()) return false;
|
|
SignalGroupV2Record that = (SignalGroupV2Record) o;
|
|
return id.equals(that.id) &&
|
|
proto.equals(that.proto);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hash(id, proto);
|
|
}
|
|
|
|
public static final class Builder {
|
|
private final StorageId id;
|
|
private final GroupV2Record.Builder builder;
|
|
|
|
private byte[] unknownFields;
|
|
|
|
public Builder(byte[] rawId, GroupMasterKey masterKey) {
|
|
this(rawId, masterKey.serialize());
|
|
}
|
|
|
|
public Builder(byte[] rawId, byte[] masterKey) {
|
|
this.id = StorageId.forGroupV2(rawId);
|
|
this.builder = GroupV2Record.newBuilder();
|
|
|
|
builder.setMasterKey(ByteString.copyFrom(masterKey));
|
|
}
|
|
|
|
public Builder setUnknownFields(byte[] serializedUnknowns) {
|
|
this.unknownFields = serializedUnknowns;
|
|
return this;
|
|
}
|
|
|
|
public Builder setBlocked(boolean blocked) {
|
|
builder.setBlocked(blocked);
|
|
return this;
|
|
}
|
|
|
|
public Builder setProfileSharingEnabled(boolean profileSharingEnabled) {
|
|
builder.setWhitelisted(profileSharingEnabled);
|
|
return this;
|
|
}
|
|
|
|
public Builder setArchived(boolean archived) {
|
|
builder.setArchived(archived);
|
|
return this;
|
|
}
|
|
|
|
public Builder setForcedUnread(boolean forcedUnread) {
|
|
builder.setMarkedUnread(forcedUnread);
|
|
return this;
|
|
}
|
|
|
|
public SignalGroupV2Record build() {
|
|
GroupV2Record proto = builder.build();
|
|
|
|
if (unknownFields != null) {
|
|
proto = ProtoUtil.combineWithUnknownFields(proto, unknownFields);
|
|
}
|
|
|
|
return new SignalGroupV2Record(id, proto);
|
|
}
|
|
}
|
|
}
|