Change summary
src/main/java/eu/siacs/conversations/entities/Message.java | 8
src/main/java/eu/siacs/conversations/http/OmemoURLStreamHandler.java | 15
src/main/java/eu/siacs/conversations/http/OmemoURLStreamHandlerFactory.java | 16
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 6
4 files changed, 35 insertions(+), 10 deletions(-)
Detailed changes
@@ -657,6 +657,12 @@ public class Message extends AbstractEntity {
}
try {
URL url = new URL(body);
+ String ref = url.getRef();
+ final String protocol = url.getProtocol();
+ final boolean encrypted = ref != null && ref.matches("([A-Fa-f0-9]{2}){48}");
+ if ("omemo".equalsIgnoreCase(protocol) && encrypted) {
+ return Decision.MUST;
+ }
if (!url.getProtocol().equalsIgnoreCase("http") && !url.getProtocol().equalsIgnoreCase("https")) {
return Decision.NEVER;
} else if (oob) {
@@ -666,8 +672,6 @@ public class Message extends AbstractEntity {
if (extension == null) {
return Decision.NEVER;
}
- String ref = url.getRef();
- boolean encrypted = ref != null && ref.matches("([A-Fa-f0-9]{2}){48}");
if (encrypted) {
return Decision.MUST;
@@ -1,7 +1,14 @@
package eu.siacs.conversations.http;
-/**
- * Created by daniel on 2/7/17.
- */
-public class OmemoURLStreamHandler {
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+
+
+public class OmemoURLStreamHandler extends URLStreamHandler {
+ @Override
+ protected URLConnection openConnection(URL url) throws IOException {
+ return new URL("https"+url.toString().substring(5)).openConnection();
+ }
}
@@ -1,7 +1,15 @@
package eu.siacs.conversations.http;
-/**
- * Created by daniel on 2/7/17.
- */
-public class OmemoURLStreamHandlerFactory {
+import java.net.URLStreamHandler;
+import java.net.URLStreamHandlerFactory;
+
+public class OmemoURLStreamHandlerFactory implements URLStreamHandlerFactory {
+ @Override
+ public URLStreamHandler createURLStreamHandler(String protocol) {
+ if ("omemo".equals(protocol)) {
+ return new OmemoURLStreamHandler();
+ } else {
+ return null;
+ }
+ }
}
@@ -48,6 +48,7 @@ import org.openintents.openpgp.util.OpenPgpServiceConnection;
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
import java.math.BigInteger;
+import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
@@ -95,6 +96,7 @@ import eu.siacs.conversations.generator.IqGenerator;
import eu.siacs.conversations.generator.MessageGenerator;
import eu.siacs.conversations.generator.PresenceGenerator;
import eu.siacs.conversations.http.HttpConnectionManager;
+import eu.siacs.conversations.http.OmemoURLStreamHandlerFactory;
import eu.siacs.conversations.parser.AbstractParser;
import eu.siacs.conversations.parser.IqParser;
import eu.siacs.conversations.parser.MessageParser;
@@ -142,6 +144,10 @@ import me.leolin.shortcutbadger.ShortcutBadger;
public class XmppConnectionService extends Service {
+ static {
+ URL.setURLStreamHandlerFactory(new OmemoURLStreamHandlerFactory());
+ }
+
public static final String ACTION_REPLY_TO_CONVERSATION = "reply_to_conversations";
public static final String ACTION_CLEAR_NOTIFICATION = "clear_notification";
public static final String ACTION_DISABLE_FOREGROUND = "disable_foreground";