diff options
author | Christian Schneppe <christian@pix-art.de> | 2018-05-05 20:56:55 +0200 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2018-05-05 20:56:55 +0200 |
commit | 6a4c366975dde87175b356084f2c258e782134e0 (patch) | |
tree | 0d29a8e5ce5554d509ff92ae41a0a3017be0a942 /src/main/java/de/pixart/messenger/utils | |
parent | 0446624c51942118e74fbba93d40d83a9856723d (diff) |
encode and decode % and # in invite links
Diffstat (limited to 'src/main/java/de/pixart/messenger/utils')
-rw-r--r-- | src/main/java/de/pixart/messenger/utils/Patterns.java | 6 | ||||
-rw-r--r-- | src/main/java/de/pixart/messenger/utils/XmppUri.java | 13 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/main/java/de/pixart/messenger/utils/Patterns.java b/src/main/java/de/pixart/messenger/utils/Patterns.java index a41f828c8..38f5641b0 100644 --- a/src/main/java/de/pixart/messenger/utils/Patterns.java +++ b/src/main/java/de/pixart/messenger/utils/Patterns.java @@ -28,6 +28,12 @@ import java.util.regex.Pattern; * Commonly used regular expression patterns. */ public class Patterns { + public static final Pattern XMPP_PATTERN = Pattern + .compile("xmpp\\:(?:(?:[" + + Patterns.GOOD_IRI_CHAR + + "\\;\\/\\?\\@\\&\\=\\#\\~\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])" + + "|(?:\\%[a-fA-F0-9]{2}))+"); + /** * Regular expression to match all IANA top-level domains. * List accurate as of 2011/07/18. List taken from: diff --git a/src/main/java/de/pixart/messenger/utils/XmppUri.java b/src/main/java/de/pixart/messenger/utils/XmppUri.java index 9ab3f1769..04b9f1d93 100644 --- a/src/main/java/de/pixart/messenger/utils/XmppUri.java +++ b/src/main/java/de/pixart/messenger/utils/XmppUri.java @@ -1,6 +1,7 @@ package de.pixart.messenger.utils; import android.net.Uri; +import android.util.Log; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; @@ -8,6 +9,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; +import de.pixart.messenger.Config; import rocks.xmpp.addr.Jid; public class XmppUri { @@ -64,8 +66,9 @@ public class XmppUri { if (segments.size() >= 2 && segments.get(1).contains("@")) { // sample : https://conversations.im/i/foo@bar.com try { - jid = Jid.of(segments.get(1)).toString(); + jid = Jid.of(lameUrlDecode(segments.get(1))).toString(); } catch (Exception e) { + Log.d(Config.LOGTAG, "parsing failed ", e); jid = null; } } else if (segments.size() >= 3) { @@ -261,4 +264,12 @@ public class XmppUri { return type.toString() + ": " + fingerprint + (deviceId != 0 ? " " + String.valueOf(deviceId) : ""); } } + + public static String lameUrlDecode(String url) { + return url.replace("%23", "#").replace("%25", "%"); + } + + public static String lameUrlEncode(String url) { + return url.replace("%", "%25").replace("#", "%23"); + } } |