From e063636d618dcbacebfe70c5a067f81e7e24b86e Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 2 Dec 2013 19:27:58 -0500 Subject: [PATCH] make all incoming repo URLs all lowercase --- src/org/fdroid/fdroid/ManageRepo.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/org/fdroid/fdroid/ManageRepo.java b/src/org/fdroid/fdroid/ManageRepo.java index a9df1b347..b9913b293 100644 --- a/src/org/fdroid/fdroid/ManageRepo.java +++ b/src/org/fdroid/fdroid/ManageRepo.java @@ -116,13 +116,25 @@ public class ManageRepo extends ListActivity { /* an URL from a click or a QRCode scan */ Uri uri = intent.getData(); if (uri != null) { - // scheme should only ever be pure ASCII: + // scheme should only ever be pure ASCII aka Locale.ENGLISH String scheme = intent.getScheme().toLowerCase(Locale.ENGLISH); String fingerprint = uri.getUserInfo(); + String host = uri.getHost().toLowerCase(Locale.ENGLISH); if (scheme.equals("fdroidrepos") || scheme.equals("fdroidrepo") || scheme.equals("https") || scheme.equals("http")) { - String uriString = uri.toString().replace("fdroidrepo", "http"). - replace(fingerprint + "@", ""); + // QRCode are more efficient in all upper case, so some incoming + // URLs might be encoded in all upper case. Therefore, we allow + // the standard paths to be encoded all upper case, then they'll + // be forced to lower case. The scheme and host are downcased + // just to make them more readable in the dialog. + String uriString = uri.toString() + .replace(fingerprint + "@", "") // remove fingerprint + .replaceAll("/*$", "") // remove all trailing slashes + .replaceAll("/FDROID/REPO$", "/fdroid/repo") + .replaceAll("/FDROID/ARCHIVE$", "/fdroid/archive") + .replace(uri.getHost(), host) // downcase host name + .replace(intent.getScheme(), scheme) // downcase scheme + .replace("fdroidrepo", "http"); // make proper URL showAddRepo(uriString, fingerprint); Log.i("ManageRepo", uriString + " fingerprint: " + fingerprint); }