From 6f55d00c2c248676896b81a8f189a9de6d7a4ad7 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Sat, 16 Dec 2017 23:06:37 +0100 Subject: XmppUri: Parse 'message action' query --- .../java/de/pixart/messenger/utils/XmppUri.java | 27 ++++++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'src/main/java/de/pixart/messenger/utils') diff --git a/src/main/java/de/pixart/messenger/utils/XmppUri.java b/src/main/java/de/pixart/messenger/utils/XmppUri.java index f16ee58ad..63640089e 100644 --- a/src/main/java/de/pixart/messenger/utils/XmppUri.java +++ b/src/main/java/de/pixart/messenger/utils/XmppUri.java @@ -14,13 +14,15 @@ import de.pixart.messenger.xmpp.jid.Jid; public class XmppUri { protected String jid; - protected boolean muc; protected String fingerprint; protected List fingerprints = new ArrayList<>(); private String body; + private String action; protected boolean safeSource = true; public static final String OMEMO_URI_PARAM = "omemo-sid-"; public static final String OTR_URI_PARAM = "otr-fingerprint"; + public static final String ACTION_JOIN = "join"; + public static final String ACTION_MESSAGE = "message"; public XmppUri(String uri) { try { @@ -68,11 +70,18 @@ public class XmppUri { // sample : https://conversations.im/i/foo/bar.com jid = segments.get(1) + "@" + segments.get(2); } - muc = segments.size() > 1 && "j".equalsIgnoreCase(segments.get(0)); + if (segments.size() > 1 && "j".equalsIgnoreCase(segments.get(0))) { + action = ACTION_JOIN; + } fingerprints = parseFingerprints(uri.getQuery(),'&'); } else if ("xmpp".equalsIgnoreCase(scheme)) { // sample: xmpp:foo@bar.com - muc = isMuc(uri.getQuery()); + final String query = uri.getQuery(); + if (hasAction(query, ACTION_JOIN)) { + this.action = ACTION_JOIN; + } else if (hasAction(query, ACTION_MESSAGE)) { + this.action = ACTION_MESSAGE; + } if (uri.getAuthority() != null) { jid = uri.getAuthority(); } else { @@ -143,16 +152,24 @@ public class XmppUri { return null; } - protected boolean isMuc(String query) { + private boolean hasAction(String query, String action) { for(String pair : query == null ? new String[0] : query.split(";")) { final String[] parts = pair.split("=",2); - if (parts.length == 1 && "join".equals(parts[0])) { + if (parts.length == 1 && parts[0].equals(action)) { return true; } } return false; } + public boolean isAction(final String action) { + if (this.action == null) { + return false; + } + + return this.action.equals(action); + } + public Jid getJid() { try { return this.jid == null ? null : Jid.fromString(this.jid.toLowerCase()); -- cgit v1.2.3