diff --git a/src/main/java/eu/siacs/conversations/xmpp/Jid.java b/src/main/java/eu/siacs/conversations/xmpp/Jid.java index c6b26903f32bea1deb59182cda9938112bf4bbc2..a83c762872b18f9b6f9a17a2662016ecd64c4297 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/Jid.java +++ b/src/main/java/eu/siacs/conversations/xmpp/Jid.java @@ -1,9 +1,10 @@ package eu.siacs.conversations.xmpp; import androidx.annotation.NonNull; -import com.google.common.base.CharMatcher; +import eu.siacs.conversations.utils.IP; import im.conversations.android.xmpp.model.stanza.Stanza; import java.io.Serializable; +import java.util.regex.Pattern; import org.jxmpp.jid.impl.JidCreate; import org.jxmpp.jid.parts.Domainpart; import org.jxmpp.jid.parts.Localpart; @@ -12,6 +13,10 @@ import org.jxmpp.stringprep.XmppStringprepException; public abstract class Jid implements Comparable, Serializable, CharSequence { + private static final Pattern HOSTNAME_PATTERN = + Pattern.compile( + "^(?=.{1,253}$)(?=.{1,253}$)(?!-)(?!.*--)(?!.*-$)[A-Za-z0-9-]+(?:\\.[A-Za-z0-9-]+)*$"); + public static Jid of( final CharSequence local, final CharSequence domain, final CharSequence resource) { if (local == null) { @@ -77,10 +82,14 @@ public abstract class Jid implements Comparable, Serializable, CharSequence public static Jid ofUserInput(final CharSequence input) { final var jid = of(input); - if (CharMatcher.is('@').matchesAnyOf(jid.getDomain())) { - throw new IllegalArgumentException("Domain should not contain @"); + final var domain = jid.getDomain().toString(); + if (domain.isEmpty()) { + throw new IllegalArgumentException("Domain can not be empty"); + } + if (HOSTNAME_PATTERN.matcher(domain).matches() || IP.matches(domain)) { + return jid; } - return jid; + throw new IllegalArgumentException("Invalid hostname"); } public static Jid ofOrInvalid(final String input) { diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index d10e1b7aa6d1c55328d4492fb1fd01e227b28818..e143b167cc19d9189fd545eebf32737505493109 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -171,6 +171,7 @@ Incompatible client Stream error Stream opening error + Channel binding unavailable Clear text OTR OpenPGP