Skip to content

Commit

Permalink
Use etld+1 to compare exceptions for the user agent (#3886)
Browse files Browse the repository at this point in the history
Task/Issue URL:
https://app.asana.com/0/488551667048375/1205957264014376/f

### Description
Use etld+1 instead of sameorsubdomain for UA exceptions

### Steps to test this PR

- [ ] Test should pass
  • Loading branch information
marcosholgado authored Nov 17, 2023
1 parent 3696b0d commit fee3168
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@
package com.duckduckgo.common.utils

import android.net.Uri
import androidx.core.net.toUri
import androidx.core.util.PatternsCompat
import java.lang.IllegalArgumentException
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import timber.log.Timber

class UriString {
Expand All @@ -35,6 +37,16 @@ class UriString {
return Uri.parse(uriString).baseHost
}

fun sameEffectiveTldPlusOne(child: String, parent: String): Boolean {
val childDomain = child.toUri().withScheme().toString().toHttpUrlOrNull() ?: return false
val parentDomain = parent.toUri().withScheme().toString().toHttpUrlOrNull() ?: return false

val childETldPlusOne = childDomain.topPrivateDomain()
val parentETldPlusOne = parentDomain.topPrivateDomain()

return childETldPlusOne == parentETldPlusOne
}

fun sameOrSubdomain(
child: String,
parent: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,20 @@ class RealUserAgent @Inject constructor(
) : UserAgent {

override fun isAnApplicationException(url: String): Boolean {
return userAgentRepository.omitApplicationExceptions.any { UriString.sameOrSubdomain(url, it.domain) }
return userAgentRepository.omitApplicationExceptions.any { UriString.sameEffectiveTldPlusOne(url, it.domain) }
}

override fun isAVersionException(url: String): Boolean {
return userAgentRepository.omitVersionExceptions.any { UriString.sameOrSubdomain(url, it.domain) }
return userAgentRepository.omitVersionExceptions.any { UriString.sameEffectiveTldPlusOne(url, it.domain) }
}

override fun isADefaultException(url: String): Boolean {
return unprotectedTemporary.isAnException(url) || userAgentRepository.defaultExceptions.any { UriString.sameOrSubdomain(url, it.domain) }
return unprotectedTemporary.isAnException(url) || userAgentRepository.defaultExceptions.any {
UriString.sameEffectiveTldPlusOne(
url,
it.domain,
)
}
}

override fun defaultPolicy(): DefaultPolicy {
Expand All @@ -56,11 +61,11 @@ class RealUserAgent @Inject constructor(
}

override fun isADdgDefaultSite(url: String): Boolean {
return userAgentRepository.ddgDefaultSites.any { UriString.sameOrSubdomain(url, it.domain) }
return userAgentRepository.ddgDefaultSites.any { UriString.sameEffectiveTldPlusOne(url, it.domain) }
}

override fun isADdgFixedSite(url: String): Boolean {
return userAgentRepository.ddgFixedSites.any { UriString.sameOrSubdomain(url, it.domain) }
return userAgentRepository.ddgFixedSites.any { UriString.sameEffectiveTldPlusOne(url, it.domain) }
}

override fun closestUserAgentEnabled(): Boolean {
Expand Down

0 comments on commit fee3168

Please sign in to comment.