Fix encryption
This commit is contained in:
parent
d3a8186fd8
commit
1dc84cf46a
|
@ -19,6 +19,7 @@ import org.mercury_im.messenger.core.connection.message.PlaintextMessageConsigno
|
|||
import org.mercury_im.messenger.core.data.repository.MessageRepository;
|
||||
import org.mercury_im.messenger.core.exception.ConnectionNotFoundException;
|
||||
import org.mercury_im.messenger.core.exception.ContactAlreadyAddedException;
|
||||
import org.mercury_im.messenger.entity.Encryption;
|
||||
import org.mercury_im.messenger.entity.chat.Chat;
|
||||
import org.mercury_im.messenger.entity.contact.Peer;
|
||||
|
||||
|
@ -137,7 +138,9 @@ public class Messenger {
|
|||
}
|
||||
|
||||
public MessageConsignor getMessageConsignor(Chat chat) {
|
||||
switch (chat.getChatPreferences().getEncryption()) {
|
||||
Encryption encryption = // chat.getChatPreferences().getEncryption()
|
||||
Encryption.ox_signcrypt;
|
||||
switch (encryption) {
|
||||
case plain:
|
||||
return new PlaintextMessageConsignor(connectionManager, messageRepository, chat);
|
||||
case ox_sign:
|
||||
|
|
|
@ -1,11 +1,28 @@
|
|||
package org.mercury_im.messenger.core.connection.message;
|
||||
|
||||
import org.jivesoftware.smack.chat2.ChatManager;
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.jivesoftware.smack.packet.MessageBuilder;
|
||||
import org.jivesoftware.smack.packet.Stanza;
|
||||
import org.jivesoftware.smackx.bytestreams.ibb.packet.Open;
|
||||
import org.jivesoftware.smackx.ox.OpenPgpContact;
|
||||
import org.jivesoftware.smackx.ox.OpenPgpManager;
|
||||
import org.jivesoftware.smackx.ox_im.OXInstantMessagingManager;
|
||||
import org.jivesoftware.smackx.sid.element.OriginIdElement;
|
||||
import org.mercury_im.messenger.core.connection.MercuryConnection;
|
||||
import org.mercury_im.messenger.core.connection.MercuryConnectionManager;
|
||||
import org.mercury_im.messenger.core.data.repository.MessageRepository;
|
||||
import org.mercury_im.messenger.core.util.AppendCompletableToSingle;
|
||||
import org.mercury_im.messenger.entity.chat.Chat;
|
||||
import org.mercury_im.messenger.entity.chat.DirectChat;
|
||||
import org.mercury_im.messenger.entity.chat.GroupChat;
|
||||
import org.mercury_im.messenger.entity.message.MessageDeliveryState;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
|
||||
import io.reactivex.Completable;
|
||||
import io.reactivex.Single;
|
||||
|
||||
public class OxMessageConsignor extends AbstractMessageConsignor {
|
||||
|
@ -20,6 +37,55 @@ public class OxMessageConsignor extends AbstractMessageConsignor {
|
|||
|
||||
@Override
|
||||
public Single<UUID> sendTextMessage(Chat chat, String body) {
|
||||
return null;
|
||||
org.mercury_im.messenger.entity.message.Message message = messageComposer.createTextMessage(chat, body);
|
||||
MessageBuilder messageBuilder = commonMessageBuilder(message);
|
||||
|
||||
Completable deliverMessage = null;
|
||||
if (chat instanceof DirectChat) {
|
||||
deliverMessage = sendDirectChatMessage((DirectChat) chat, messageBuilder, body);
|
||||
} else if (chat instanceof GroupChat) {
|
||||
// deliverMessage = sendGroupChatMessage((GroupChat) chat, messageBuilder);
|
||||
} else {
|
||||
throw new AssertionError("Unknown chat type.");
|
||||
}
|
||||
|
||||
Single<UUID> deliverAndStore = messageRepository.insertMessage(message)
|
||||
.map(org.mercury_im.messenger.entity.message.Message::getId)
|
||||
.compose(new AppendCompletableToSingle<>(deliverMessage))
|
||||
.flatMap(messageId -> messageRepository.updateDeliveryState(messageId, MessageDeliveryState.delivered_to_server)
|
||||
.toSingle(() -> messageId));
|
||||
|
||||
return deliverAndStore;
|
||||
}
|
||||
|
||||
private Completable sendDirectChatMessage(DirectChat chat, MessageBuilder messageBuilder, String body) {
|
||||
return Completable.fromAction(() -> {
|
||||
MercuryConnection connection = connectionManager.getConnection(chat.getAccount());
|
||||
OpenPgpManager ox = OpenPgpManager.getInstanceFor(connection.getConnection());
|
||||
OXInstantMessagingManager oxim = OXInstantMessagingManager.getInstanceFor(connection.getConnection());
|
||||
|
||||
OpenPgpContact contact = ox.getOpenPgpContact(chat.getJid().asEntityBareJid());
|
||||
contact.updateKeys(connection.getConnection());
|
||||
|
||||
OpenPgpContact self = ox.getOpenPgpSelf();
|
||||
self.updateKeys(connection.getConnection());
|
||||
|
||||
Message.Body bodyElement = new Message.Body(Stanza.getDefaultLanguage(), body);
|
||||
oxim.addOxMessage(messageBuilder, contact, Collections.singletonList(bodyElement));
|
||||
|
||||
|
||||
ChatManager chatManager = ChatManager.getInstanceFor(connection.getConnection());
|
||||
org.jivesoftware.smack.chat2.Chat smackChat = chatManager.chatWith(chat.getJid().asEntityBareJid());
|
||||
smackChat.send(messageBuilder.build());
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private MessageBuilder commonMessageBuilder(org.mercury_im.messenger.entity.message.Message message) {
|
||||
return MessageBuilder.buildMessage(message.getLegacyStanzaId())
|
||||
.ofType(org.jivesoftware.smack.packet.Message.Type.chat)
|
||||
.addExtension(new OriginIdElement(message.getOriginId()))
|
||||
.to(chat.getJid())
|
||||
.from(chat.getAccount().getJid());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ public class IkeyAwareOpenPgpStore extends MercuryOpenPgpStore {
|
|||
if (record.getTrust() == Trust.trusted && record.hasSubordinate(fingerprint)) {
|
||||
return Trust.ikey_trusted;
|
||||
}
|
||||
return record.getTrust();
|
||||
return Trust.undecided;
|
||||
})
|
||||
.firstElement()
|
||||
.flatMap(t -> t == Trust.undecided ? readManualTrust(owner, fingerprint).toMaybe() : Maybe.just(t))
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 695a7982bfc9aa4720e9eb846bfaaf367b1fcaaa
|
||||
Subproject commit d35354b1b05d80a6ab45fed9548304707eaab460
|
Loading…
Reference in New Issue