mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-12-25 03:57:58 +01:00
Fix message sending, filebased store storage
This commit is contained in:
parent
ffc8cbbf79
commit
48862962db
8 changed files with 54 additions and 7 deletions
|
@ -143,10 +143,7 @@ public class BCOpenPgpProvider implements OpenPgpProvider {
|
|||
Streams.pipeAll(decrypted, decryptedOut);
|
||||
|
||||
return new OpenPgpMessage(OpenPgpMessage.State.signcrypt, new String(decryptedOut.toByteArray(), Charset.forName("UTF-8")));
|
||||
} catch (IOException e) {
|
||||
// TODO: Hm...
|
||||
return null;
|
||||
} catch (NoSuchProviderException e) {
|
||||
} catch (IOException | NoSuchProviderException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -346,6 +346,7 @@ public class FileBasedBcOpenPgpStore implements BCOpenPgpStore {
|
|||
}
|
||||
primaryKeyFingerprint = selectedKey;
|
||||
writePrivateKeysToFile(keyringConfig, secretKeyringPath());
|
||||
writePublicKeysToFile(keyring, publicKeyringPath());
|
||||
}
|
||||
} catch (PGPException | IOException e) {
|
||||
throw new SmackOpenPgpException(e);
|
||||
|
@ -359,6 +360,8 @@ public class FileBasedBcOpenPgpStore implements BCOpenPgpStore {
|
|||
PGPSecretKeyRing ourKey = BCOpenPgpProvider.generateKey(user).generateSecretKeyRing();
|
||||
keyringConfig.addSecretKey(ourKey.getSecretKey().getEncoded());
|
||||
keyringConfig.addPublicKey(ourKey.getPublicKey().getEncoded());
|
||||
writePrivateKeysToFile(keyringConfig, secretKeyringPath());
|
||||
writePublicKeysToFile(keyringConfig, publicKeyringPath());
|
||||
primaryKeyFingerprint = BCOpenPgpProvider.getFingerprint(ourKey.getPublicKey());
|
||||
return primaryKeyFingerprint;
|
||||
} catch (PGPException | IOException e) {
|
||||
|
@ -456,7 +459,8 @@ public class FileBasedBcOpenPgpStore implements BCOpenPgpStore {
|
|||
BufferedOutputStream bufferedStream = new BufferedOutputStream(outputStream);
|
||||
|
||||
bufferedStream.write(bytes);
|
||||
outputStream.close();
|
||||
bufferedStream.flush();
|
||||
bufferedStream.close();
|
||||
} catch (IOException e) {
|
||||
if (outputStream != null) {
|
||||
outputStream.close();
|
||||
|
|
|
@ -79,6 +79,11 @@ public final class OXInstantMessagingManager extends Manager {
|
|||
return manager;
|
||||
}
|
||||
|
||||
public void announceSupportForOxInstantMessaging() {
|
||||
ServiceDiscoveryManager.getInstanceFor(connection())
|
||||
.addFeature(NAMESPACE_0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine, whether a contact announces support for XEP-0374: OpenPGP for XMPP: Instant Messaging.
|
||||
*
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.util.HashSet;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.chat2.Chat;
|
||||
import org.jivesoftware.smack.packet.ExtensionElement;
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
|
@ -54,7 +55,7 @@ public class OpenPgpEncryptedChat {
|
|||
}
|
||||
|
||||
public void send(Message message, List<ExtensionElement> payload)
|
||||
throws MissingOpenPgpKeyPairException {
|
||||
throws MissingOpenPgpKeyPairException, SmackException.NotConnectedException, InterruptedException {
|
||||
Set<OpenPgpV4Fingerprint> encryptionFingerprints = new HashSet<>(contactsFingerprints.getActiveKeys());
|
||||
encryptionFingerprints.addAll(ourFingerprints.getActiveKeys());
|
||||
|
||||
|
@ -81,10 +82,12 @@ public class OpenPgpEncryptedChat {
|
|||
ExplicitMessageEncryptionElement.ExplicitMessageEncryptionProtocol.openpgpV0));
|
||||
StoreHint.set(message);
|
||||
message.setBody("This message is encrypted using XEP-0374: OpenPGP for XMPP: Instant Messaging.");
|
||||
|
||||
chat.send(message);
|
||||
}
|
||||
|
||||
public void send(Message message, CharSequence body)
|
||||
throws MissingOpenPgpKeyPairException {
|
||||
throws MissingOpenPgpKeyPairException, SmackException.NotConnectedException, InterruptedException {
|
||||
List<ExtensionElement> payload = new ArrayList<>();
|
||||
payload.add(new Message.Body(null, body.toString()));
|
||||
send(message, payload);
|
||||
|
|
|
@ -17,5 +17,15 @@
|
|||
package org.jivesoftware.smackx.ox.callback;
|
||||
|
||||
public interface AskForBackupCodeCallback {
|
||||
|
||||
/**
|
||||
* This callback is used to ask the user to provide a backup code.
|
||||
* The backup code must follow the format described in XEP-0373 §5.3
|
||||
*
|
||||
* @see <a href="https://xmpp.org/extensions/xep-0373.html#sect-idm139662753819792">
|
||||
* XEP-0373 §5.3 about the format of the backup code</a>
|
||||
*
|
||||
* @return backup code provided by the user.
|
||||
*/
|
||||
String askForBackupCode();
|
||||
}
|
||||
|
|
|
@ -17,5 +17,16 @@
|
|||
package org.jivesoftware.smackx.ox.callback;
|
||||
|
||||
public interface DisplayBackupCodeCallback {
|
||||
|
||||
/**
|
||||
* This method is used to provide a client access to the generated backup code.
|
||||
* The client can then go ahead and display the code to the user.
|
||||
* The backup code follows the format described in XEP-0373 §5.3
|
||||
*
|
||||
* @see <a href="https://xmpp.org/extensions/xep-0373.html#sect-idm139662753819792">
|
||||
* XEP-0373 §5.3 about the format of the backup code</a>
|
||||
*
|
||||
* @param backupCode
|
||||
*/
|
||||
void displayBackupCode(String backupCode);
|
||||
}
|
||||
|
|
|
@ -172,6 +172,11 @@ public abstract class OpenPgpContentElement implements ExtensionElement {
|
|||
xml.closeElement(ELEM_PAYLOAD);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a {@link ByteArrayInputStream} that reads the bytes of the XML representation of this element.
|
||||
*
|
||||
* @return InputStream over xml.
|
||||
*/
|
||||
public InputStream toInputStream() {
|
||||
byte[] encoded = toXML(null).toString().getBytes(Charset.forName("UTF-8"));
|
||||
return new ByteArrayInputStream(encoded);
|
||||
|
|
|
@ -18,12 +18,24 @@ package org.jivesoftware.smackx.ox.listener;
|
|||
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.jivesoftware.smackx.ox.OpenPgpEncryptedChat;
|
||||
import org.jivesoftware.smackx.ox.element.OpenPgpElement;
|
||||
import org.jivesoftware.smackx.ox.element.SigncryptElement;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
|
||||
public interface OpenPgpEncryptedMessageListener {
|
||||
|
||||
/**
|
||||
* This method gets invoked, whenever an OX-IM encrypted message gets received.
|
||||
*
|
||||
* @see <a href="https://xmpp.org/extensions/xep-0374.html">
|
||||
* XEP-0374: OpenPGP for XMPP: Instant Messaging (OX-IM)</a>
|
||||
*
|
||||
* @param from sender of the message.
|
||||
* @param originalMessage the received message that is carrying the encrypted {@link OpenPgpElement}.
|
||||
* @param decryptedPayload decrypted {@link SigncryptElement} which is carrying the payload.
|
||||
* @param chat {@link OpenPgpEncryptedChat} which is the context of the message.
|
||||
*/
|
||||
void newIncomingEncryptedMessage(EntityBareJid from,
|
||||
Message originalMessage,
|
||||
SigncryptElement decryptedPayload,
|
||||
|
|
Loading…
Reference in a new issue