private final static int PREKEY_MINIMUM_COUNT = 20;
private static final int PREKEY_BATCH_SIZE = 100;
- private static final int MAX_ATTACHMENT_SIZE = 150 * 1024 * 1024;
+ private static final int MAX_ATTACHMENT_SIZE = 150 * 1024 * 1024;
private final String settingsPath;
private final String dataPath;
mime = "application/octet-stream";
}
// TODO mabybe add a parameter to set the voiceNote and preview option
- return new SignalServiceAttachmentStream(attachmentStream, mime, attachmentSize, Optional.of(attachmentFile.getName()), false, Optional.<byte[]>absent(),null);
+ return new SignalServiceAttachmentStream(attachmentStream, mime, attachmentSize, Optional.of(attachmentFile.getName()), false, Optional.<byte[]>absent(), null);
}
private Optional<SignalServiceAttachmentStream> createGroupAvatarAttachment(byte[] groupId) throws IOException {
if (rm.isContactsRequest()) {
try {
sendContacts();
+ sendVerifiedMessage();
} catch (UntrustedIdentityException | IOException e) {
e.printStackTrace();
}
}
}
}
+ if (syncMessage.getVerified().isPresent()) {
+ final List<VerifiedMessage> verifiedList = syncMessage.getVerified().get();
+ for (VerifiedMessage v : verifiedList) {
+ signalProtocolStore.saveIdentity(v.getDestination(), v.getIdentityKey(), TrustLevel.fromVerifiedState(v.getVerified()));
+ }
+ }
}
}
}
}
}
+ private void sendVerifiedMessage() throws IOException, UntrustedIdentityException {
+ List<VerifiedMessage> verifiedMessages = new LinkedList<>();
+ for (Map.Entry<String, List<JsonIdentityKeyStore.Identity>> x : getIdentities().entrySet()) {
+ final String name = x.getKey();
+ for (JsonIdentityKeyStore.Identity id : x.getValue()) {
+ if (id.getTrustLevel() == TrustLevel.TRUSTED_UNVERIFIED) {
+ continue;
+ }
+ VerifiedMessage verifiedMessage = new VerifiedMessage(name, id.getIdentityKey(), id.getTrustLevel().toVerifiedState());
+ verifiedMessages.add(verifiedMessage);
+ }
+ }
+ sendSyncMessage(SignalServiceSyncMessage.forVerified(verifiedMessages));
+ }
+
+ private void sendVerifiedMessage(String destination, IdentityKey identityKey, TrustLevel trustLevel) throws IOException, UntrustedIdentityException {
+ VerifiedMessage verifiedMessage = new VerifiedMessage(destination, identityKey, trustLevel.toVerifiedState());
+ sendSyncMessage(SignalServiceSyncMessage.forVerified(verifiedMessage));
+ }
+
public ContactInfo getContact(String number) {
return contactStore.getContact(number);
}
}
signalProtocolStore.saveIdentity(name, id.getIdentityKey(), TrustLevel.TRUSTED_VERIFIED);
+ try {
+ sendVerifiedMessage(name, id.getIdentityKey(), TrustLevel.TRUSTED_VERIFIED);
+ } catch (IOException | UntrustedIdentityException e) {
+ e.printStackTrace();
+ }
save();
return true;
}
}
signalProtocolStore.saveIdentity(name, id.getIdentityKey(), TrustLevel.TRUSTED_VERIFIED);
+ try {
+ sendVerifiedMessage(name, id.getIdentityKey(), TrustLevel.TRUSTED_VERIFIED);
+ } catch (IOException | UntrustedIdentityException e) {
+ e.printStackTrace();
+ }
save();
return true;
}
for (JsonIdentityKeyStore.Identity id : ids) {
if (id.getTrustLevel() == TrustLevel.UNTRUSTED) {
signalProtocolStore.saveIdentity(name, id.getIdentityKey(), TrustLevel.TRUSTED_UNVERIFIED);
+ try {
+ sendVerifiedMessage(name, id.getIdentityKey(), TrustLevel.TRUSTED_UNVERIFIED);
+ } catch (IOException | UntrustedIdentityException e) {
+ e.printStackTrace();
+ }
}
}
save();
package org.asamk.signal;
+import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage;
+
public enum TrustLevel {
UNTRUSTED,
TRUSTED_UNVERIFIED,
}
return TrustLevel.cachedValues[i];
}
+
+ public static TrustLevel fromVerifiedState(VerifiedMessage.VerifiedState verifiedState) {
+ switch (verifiedState) {
+ case DEFAULT:
+ return TRUSTED_UNVERIFIED;
+ case UNVERIFIED:
+ return UNTRUSTED;
+ case VERIFIED:
+ return TRUSTED_VERIFIED;
+ }
+ throw new RuntimeException("Unknown verified state: " + verifiedState);
+ }
+
+ public VerifiedMessage.VerifiedState toVerifiedState() {
+ switch (this) {
+ case TRUSTED_UNVERIFIED:
+ return VerifiedMessage.VerifiedState.DEFAULT;
+ case UNTRUSTED:
+ return VerifiedMessage.VerifiedState.UNVERIFIED;
+ case TRUSTED_VERIFIED:
+ return VerifiedMessage.VerifiedState.VERIFIED;
+ }
+ throw new RuntimeException("Unknown verified state: " + this);
+ }
}