Skip to content

Commit

Permalink
feat: Add support for wildcard hosts to query manager
Browse files Browse the repository at this point in the history
  • Loading branch information
1fexd committed Apr 5, 2024
1 parent f975cdf commit d86794c
Showing 1 changed file with 17 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package fe.linksheet.experiment.new.query.manager.query

import android.R.attr.host
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
Expand All @@ -14,6 +15,7 @@ import fe.linksheet.module.resolver.UriViewActivity
import fe.linksheet.util.AndroidVersion
import org.koin.core.component.KoinComponent


object PackageQueryManager : KoinComponent {
private val logger by injectLogger<PackageQueryManager>()

Expand All @@ -38,7 +40,21 @@ object PackageQueryManager : KoinComponent {
@RequiresApi(Build.VERSION_CODES.S)
private fun ResolveInfo.canHandle(dvm: DomainVerificationManager, host: String): Boolean {
// TODO: Does this work for wildcard subdomains? (*.example.org?)
return dvm.getDomainVerificationUserState(activityInfo.packageName)?.hostToStateMap?.containsKey(host) == true
val hostToStateMap = dvm.getDomainVerificationUserState(activityInfo.packageName)?.hostToStateMap
return hostToStateMap?.contains(host) == true || matchesWildcard(hostToStateMap, host)
}

private fun matchesWildcard(hostToStateMap: Map<String, Int>?, host: String): Boolean {
if (hostToStateMap == null) return false

// https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java;l=1918
for ((domain, _) in hostToStateMap) {
if (domain.startsWith("*.") && host.endsWith(domain.substring(2))) {
return true
}
}

return false
}

private fun ResolveInfo.toUriHandler(packageManager: PackageManager, viewIntent: Intent): UriViewActivity {
Expand Down

0 comments on commit d86794c

Please sign in to comment.