From 03a5b697bb50e55eda03ffbe473c0c78593e2013 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 31 Aug 2023 10:17:29 +0200 Subject: [PATCH] [db] Handle fdroidrepos:// Uris as well --- .../java/org/fdroid/repo/RepoUriGetter.kt | 13 ++++++++- .../java/org/fdroid/repo/RepoUriGetterTest.kt | 29 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/libs/database/src/main/java/org/fdroid/repo/RepoUriGetter.kt b/libs/database/src/main/java/org/fdroid/repo/RepoUriGetter.kt index 20b897d80..7cc20dcb5 100644 --- a/libs/database/src/main/java/org/fdroid/repo/RepoUriGetter.kt +++ b/libs/database/src/main/java/org/fdroid/repo/RepoUriGetter.kt @@ -7,7 +7,18 @@ internal object RepoUriGetter { fun getUri(url: String): NormalizedUri { val uri = Uri.parse(url).let { - if (it.host == "fdroid.link") getFdroidLinkUri(it) else it + when { + it.scheme.equals("fdroidrepos", ignoreCase = true) -> { + it.buildUpon().scheme("https").build() + } + + it.scheme.equals("fdroidrepo", ignoreCase = true) -> { + it.buildUpon().scheme("http").build() + } + + it.host == "fdroid.link" -> getFdroidLinkUri(it) + else -> it + } } val fingerprint = uri.getQueryParameter("fingerprint")?.lowercase() diff --git a/libs/database/src/test/java/org/fdroid/repo/RepoUriGetterTest.kt b/libs/database/src/test/java/org/fdroid/repo/RepoUriGetterTest.kt index 71cbd9d1a..fe82236e7 100644 --- a/libs/database/src/test/java/org/fdroid/repo/RepoUriGetterTest.kt +++ b/libs/database/src/test/java/org/fdroid/repo/RepoUriGetterTest.kt @@ -76,4 +76,33 @@ internal class RepoUriGetterTest { assertEquals("http://f-droid.org/repo", uri3.uri.toString()) assertNull(uri3.fingerprint) } + + @Test + fun testFDroidRepoUriScheme() { + val uri1 = + RepoUriGetter.getUri("fdroidrepos://grobox.de/fdroid/repo?fingerprint=" + + "28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c") + assertEquals("https://grobox.de/fdroid/repo", uri1.uri.toString()) + assertEquals( + "28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c", + uri1.fingerprint, + ) + + val uri2 = RepoUriGetter.getUri("fdroidrepo://grobox.de/fdroid/repo") + assertEquals("http://grobox.de/fdroid/repo", uri2.uri.toString()) + assertNull(uri2.fingerprint) + + val uri3 = + RepoUriGetter.getUri("FDROIDREPOS://grobox.de/fdroid/repo?fingerprint=" + + "28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c") + assertEquals("https://grobox.de/fdroid/repo", uri3.uri.toString()) + assertEquals( + "28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c", + uri3.fingerprint, + ) + + val uri4 = RepoUriGetter.getUri("fdroidREPO://grobox.de/fdroid/repo") + assertEquals("http://grobox.de/fdroid/repo", uri4.uri.toString()) + assertNull(uri4.fingerprint) + } }