Check if link title has valid parent domain

pull/204/head
M66B 4 years ago
parent 528720932d
commit e866bfaa25

@ -171,9 +171,11 @@ public class FragmentDialogOpenLink extends FragmentDialogBase {
// Process title // Process title
final Uri uriTitle; final Uri uriTitle;
if (title != null && PatternsCompat.WEB_URL.matcher(title).matches()) if (title != null && PatternsCompat.WEB_URL.matcher(title).matches()) {
uriTitle = Uri.parse(title.contains("://") ? title : "http://" + title); Uri u = Uri.parse(title.contains("://") ? title : "http://" + title);
else String host = u.getHost(); // Capture1.PNG
uriTitle = (UriHelper.hasParentDomain(context, host) ? u : null);
} else
uriTitle = null; uriTitle = null;
// Get views // Get views

@ -26,6 +26,7 @@ import java.io.BufferedReader;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale;
public class UriHelper { public class UriHelper {
// https://publicsuffix.org/ // https://publicsuffix.org/
@ -37,14 +38,23 @@ public class UriHelper {
static String getParentDomain(Context context, String host) { static String getParentDomain(Context context, String host) {
if (host == null) if (host == null)
return null; return null;
String parent = _getSuffix(context, host);
return (parent == null ? host : parent);
}
static boolean hasParentDomain(Context context, String host) {
return (host != null && _getSuffix(context, host) != null);
}
private static String _getSuffix(Context context, String host) {
ensureSuffixList(context); ensureSuffixList(context);
String h = host; String h = host.toLowerCase(Locale.ROOT);
while (true) { while (true) {
int dot = h.indexOf('.'); int dot = h.indexOf('.');
if (dot < 0) if (dot < 0)
return host; return null;
String prefix = h.substring(0, dot); String prefix = h.substring(0, dot);
h = h.substring(dot + 1); h = h.substring(dot + 1);
@ -52,8 +62,8 @@ public class UriHelper {
String w = (d < 0 ? null : '*' + h.substring(d)); String w = (d < 0 ? null : '*' + h.substring(d));
synchronized (suffixList) { synchronized (suffixList) {
if ((suffixList.contains(h) || suffixList.contains(w)) && if (!suffixList.contains('!' + h) &&
!suffixList.contains('!' + h)) { (suffixList.contains(h) || suffixList.contains(w))) {
String parent = prefix + "." + h; String parent = prefix + "." + h;
Log.d("Host=" + host + " parent=" + parent); Log.d("Host=" + host + " parent=" + parent);
return parent; return parent;

Loading…
Cancel
Save