From 5dc78bb8db242a068ec38565ef2a9e635224487a Mon Sep 17 00:00:00 2001 From: Soren Stoutner Date: Tue, 18 Apr 2023 13:36:56 -0700 Subject: [PATCH] Split the blocklist helper. https://redmine.stoutner.com/issues/953 --- .../activities/MainWebViewActivity.kt | 52 +- .../activities/RequestsActivity.kt | 16 +- .../adapters/RequestsArrayAdapter.kt | 13 +- .../coroutines/PopulateBlocklistsCoroutine.kt | 16 +- .../dialogs/ViewRequestDialog.kt | 98 ++-- .../helpers/CheckBlocklistHelper.kt | 484 ++++++++++++++++ ...klistHelper.kt => ParseBlocklistHelper.kt} | 535 ++---------------- app/src/main/res/values-ru/strings.xml | 4 +- 8 files changed, 641 insertions(+), 577 deletions(-) create mode 100644 app/src/main/java/com/stoutner/privacybrowser/helpers/CheckBlocklistHelper.kt rename app/src/main/java/com/stoutner/privacybrowser/helpers/{BlocklistHelper.kt => ParseBlocklistHelper.kt} (77%) diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.kt b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.kt index 59d91ac5..2d0fc04a 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.kt @@ -137,8 +137,12 @@ import com.stoutner.privacybrowser.dialogs.UrlHistoryDialog import com.stoutner.privacybrowser.dialogs.ViewSslCertificateDialog import com.stoutner.privacybrowser.dialogs.WaitingForProxyDialog import com.stoutner.privacybrowser.fragments.WebViewTabFragment -import com.stoutner.privacybrowser.helpers.BlocklistHelper +import com.stoutner.privacybrowser.helpers.REQUEST_ALLOWED +import com.stoutner.privacybrowser.helpers.REQUEST_BLOCKED +import com.stoutner.privacybrowser.helpers.REQUEST_DEFAULT +import com.stoutner.privacybrowser.helpers.REQUEST_THIRD_PARTY import com.stoutner.privacybrowser.helpers.BookmarksDatabaseHelper +import com.stoutner.privacybrowser.helpers.CheckBlocklistHelper import com.stoutner.privacybrowser.helpers.DomainsDatabaseHelper import com.stoutner.privacybrowser.helpers.ProxyHelper import com.stoutner.privacybrowser.helpers.SanitizeUrlHelper @@ -215,7 +219,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Declare the class variables. private lateinit var appBar: ActionBar - private lateinit var blocklistHelper: BlocklistHelper + private lateinit var checkBlocklistHelper: CheckBlocklistHelper private lateinit var bookmarksCursorAdapter: CursorAdapter private lateinit var bookmarksListView: ListView private lateinit var bookmarksDrawerPinnedImageView: ImageView @@ -4261,8 +4265,8 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Update the domains settings set. updateDomainsSettingsSet() - // Instantiate the blocklist helper. - blocklistHelper = BlocklistHelper() + // Instantiate the check blocklist helper. + checkBlocklistHelper = CheckBlocklistHelper() } @SuppressLint("ClickableViewAccessibility") @@ -4859,7 +4863,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Block third-party requests if enabled. if (isThirdPartyRequest && nestedScrollWebView.blockAllThirdPartyRequests) { // Add the result to the resource requests. - nestedScrollWebView.addResourceRequest(arrayOf(BlocklistHelper.REQUEST_THIRD_PARTY, requestUrlString)) + nestedScrollWebView.addResourceRequest(arrayOf(REQUEST_THIRD_PARTY, requestUrlString)) // Increment the blocked requests counters. nestedScrollWebView.incrementRequestsCount(BLOCKED_REQUESTS) @@ -4888,10 +4892,10 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Check UltraList if it is enabled. if (nestedScrollWebView.ultraListEnabled) { // Check the URL against UltraList. - val ultraListResults = blocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, ultraList) + val ultraListResults = checkBlocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, ultraList) // Process the UltraList results. - if (ultraListResults[0] == BlocklistHelper.REQUEST_BLOCKED) { // The resource request matched UltraList's blacklist. + if (ultraListResults[0] == REQUEST_BLOCKED) { // The resource request matched UltraList's blacklist. // Add the result to the resource requests. nestedScrollWebView.addResourceRequest(arrayOf(ultraListResults[0], ultraListResults[1], ultraListResults[2], ultraListResults[3], ultraListResults[4], ultraListResults[5])) @@ -4916,7 +4920,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // The resource request was blocked. Return an empty web resource response. return emptyWebResourceResponse - } else if (ultraListResults[0] == BlocklistHelper.REQUEST_ALLOWED) { // The resource request matched UltraList's whitelist. + } else if (ultraListResults[0] == REQUEST_ALLOWED) { // The resource request matched UltraList's whitelist. // Add a whitelist entry to the resource requests array. nestedScrollWebView.addResourceRequest(arrayOf(ultraListResults[0], ultraListResults[1], ultraListResults[2], ultraListResults[3], ultraListResults[4], ultraListResults[5])) @@ -4928,10 +4932,10 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Check UltraPrivacy if it is enabled. if (nestedScrollWebView.ultraPrivacyEnabled) { // Check the URL against UltraPrivacy. - val ultraPrivacyResults = blocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, ultraPrivacy!!) + val ultraPrivacyResults = checkBlocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, ultraPrivacy!!) // Process the UltraPrivacy results. - if (ultraPrivacyResults[0] == BlocklistHelper.REQUEST_BLOCKED) { // The resource request matched UltraPrivacy's blacklist. + if (ultraPrivacyResults[0] == REQUEST_BLOCKED) { // The resource request matched UltraPrivacy's blacklist. // Add the result to the resource requests. nestedScrollWebView.addResourceRequest(arrayOf(ultraPrivacyResults[0], ultraPrivacyResults[1], ultraPrivacyResults[2], ultraPrivacyResults[3], ultraPrivacyResults[4], ultraPrivacyResults[5])) @@ -4957,7 +4961,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // The resource request was blocked. Return an empty web resource response. return emptyWebResourceResponse - } else if (ultraPrivacyResults[0] == BlocklistHelper.REQUEST_ALLOWED) { // The resource request matched UltraPrivacy's whitelist. + } else if (ultraPrivacyResults[0] == REQUEST_ALLOWED) { // The resource request matched UltraPrivacy's whitelist. // Add a whitelist entry to the resource requests array. nestedScrollWebView.addResourceRequest(arrayOf(ultraPrivacyResults[0], ultraPrivacyResults[1], ultraPrivacyResults[2], ultraPrivacyResults[3], ultraPrivacyResults[4], ultraPrivacyResults[5])) @@ -4970,10 +4974,10 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Check EasyList if it is enabled. if (nestedScrollWebView.easyListEnabled) { // Check the URL against EasyList. - val easyListResults = blocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, easyList) + val easyListResults = checkBlocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, easyList) // Process the EasyList results. - if (easyListResults[0] == BlocklistHelper.REQUEST_BLOCKED) { // The resource request matched EasyList's blacklist. + if (easyListResults[0] == REQUEST_BLOCKED) { // The resource request matched EasyList's blacklist. // Add the result to the resource requests. nestedScrollWebView.addResourceRequest(arrayOf(easyListResults[0], easyListResults[1], easyListResults[2], easyListResults[3], easyListResults[4], easyListResults[5])) @@ -4998,7 +5002,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // The resource request was blocked. Return an empty web resource response. return emptyWebResourceResponse - } else if (easyListResults[0] == BlocklistHelper.REQUEST_ALLOWED) { // The resource request matched EasyList's whitelist. + } else if (easyListResults[0] == REQUEST_ALLOWED) { // The resource request matched EasyList's whitelist. // Update the whitelist result string array tracker. whitelistResultStringArray = arrayOf(easyListResults[0], easyListResults[1], easyListResults[2], easyListResults[3], easyListResults[4], easyListResults[5]) } @@ -5007,10 +5011,10 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Check EasyPrivacy if it is enabled. if (nestedScrollWebView.easyPrivacyEnabled) { // Check the URL against EasyPrivacy. - val easyPrivacyResults = blocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, easyPrivacy) + val easyPrivacyResults = checkBlocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, easyPrivacy) // Process the EasyPrivacy results. - if (easyPrivacyResults[0] == BlocklistHelper.REQUEST_BLOCKED) { // The resource request matched EasyPrivacy's blacklist. + if (easyPrivacyResults[0] == REQUEST_BLOCKED) { // The resource request matched EasyPrivacy's blacklist. // Add the result to the resource requests. nestedScrollWebView.addResourceRequest(arrayOf(easyPrivacyResults[0], easyPrivacyResults[1], easyPrivacyResults[2], easyPrivacyResults[3], easyPrivacyResults[4], easyPrivacyResults[5])) @@ -5035,7 +5039,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // The resource request was blocked. Return an empty web resource response. return emptyWebResourceResponse - } else if (easyPrivacyResults[0] == BlocklistHelper.REQUEST_ALLOWED) { // The resource request matched EasyPrivacy's whitelist. + } else if (easyPrivacyResults[0] == REQUEST_ALLOWED) { // The resource request matched EasyPrivacy's whitelist. // Update the whitelist result string array tracker. whitelistResultStringArray = arrayOf(easyPrivacyResults[0], easyPrivacyResults[1], easyPrivacyResults[2], easyPrivacyResults[3], easyPrivacyResults[4], easyPrivacyResults[5]) } @@ -5044,10 +5048,10 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Check Fanboy’s Annoyance List if it is enabled. if (nestedScrollWebView.fanboysAnnoyanceListEnabled) { // Check the URL against Fanboy's Annoyance List. - val fanboysAnnoyanceListResults = blocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, fanboysAnnoyanceList) + val fanboysAnnoyanceListResults = checkBlocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, fanboysAnnoyanceList) // Process the Fanboy's Annoyance List results. - if (fanboysAnnoyanceListResults[0] == BlocklistHelper.REQUEST_BLOCKED) { // The resource request matched Fanboy's Annoyance List's blacklist. + if (fanboysAnnoyanceListResults[0] == REQUEST_BLOCKED) { // The resource request matched Fanboy's Annoyance List's blacklist. // Add the result to the resource requests. nestedScrollWebView.addResourceRequest(arrayOf(fanboysAnnoyanceListResults[0], fanboysAnnoyanceListResults[1], fanboysAnnoyanceListResults[2], fanboysAnnoyanceListResults[3], fanboysAnnoyanceListResults[4], fanboysAnnoyanceListResults[5])) @@ -5073,17 +5077,17 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // The resource request was blocked. Return an empty web resource response. return emptyWebResourceResponse - } else if (fanboysAnnoyanceListResults[0] == BlocklistHelper.REQUEST_ALLOWED) { // The resource request matched Fanboy's Annoyance List's whitelist. + } else if (fanboysAnnoyanceListResults[0] == REQUEST_ALLOWED) { // The resource request matched Fanboy's Annoyance List's whitelist. // Update the whitelist result string array tracker. whitelistResultStringArray = arrayOf(fanboysAnnoyanceListResults[0], fanboysAnnoyanceListResults[1], fanboysAnnoyanceListResults[2], fanboysAnnoyanceListResults[3], fanboysAnnoyanceListResults[4], fanboysAnnoyanceListResults[5]) } } else if (nestedScrollWebView.fanboysSocialBlockingListEnabled) { // Only check Fanboy’s Social Blocking List if Fanboy’s Annoyance List is disabled. // Check the URL against Fanboy's Annoyance List. - val fanboysSocialListResults = blocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, fanboysSocialList) + val fanboysSocialListResults = checkBlocklistHelper.checkBlocklist(currentDomain, requestUrlString, isThirdPartyRequest, fanboysSocialList) // Process the Fanboy's Social Blocking List results. - if (fanboysSocialListResults[0] == BlocklistHelper.REQUEST_BLOCKED) { // The resource request matched Fanboy's Social Blocking List's blacklist. + if (fanboysSocialListResults[0] == REQUEST_BLOCKED) { // The resource request matched Fanboy's Social Blocking List's blacklist. // Add the result to the resource requests. nestedScrollWebView.addResourceRequest(arrayOf(fanboysSocialListResults[0], fanboysSocialListResults[1], fanboysSocialListResults[2], fanboysSocialListResults[3], fanboysSocialListResults[4], fanboysSocialListResults[5])) @@ -5110,7 +5114,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // The resource request was blocked. Return an empty web resource response. return emptyWebResourceResponse - } else if (fanboysSocialListResults[0] == BlocklistHelper.REQUEST_ALLOWED) { // The resource request matched Fanboy's Social Blocking List's whitelist. + } else if (fanboysSocialListResults[0] == REQUEST_ALLOWED) { // The resource request matched Fanboy's Social Blocking List's whitelist. // Update the whitelist result string array tracker. whitelistResultStringArray = arrayOf(fanboysSocialListResults[0], fanboysSocialListResults[1], fanboysSocialListResults[2], fanboysSocialListResults[3], fanboysSocialListResults[4], fanboysSocialListResults[5]) @@ -5121,7 +5125,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook if (whitelistResultStringArray != null) { // The request was processed by a whitelist. nestedScrollWebView.addResourceRequest(whitelistResultStringArray) } else { // The request didn't match any blocklist entry. Log it as a default request. - nestedScrollWebView.addResourceRequest(arrayOf(BlocklistHelper.REQUEST_DEFAULT, requestUrlString)) + nestedScrollWebView.addResourceRequest(arrayOf(REQUEST_DEFAULT, requestUrlString)) } // The resource request has not been blocked. `return null` loads the requested resource. diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/RequestsActivity.kt b/app/src/main/java/com/stoutner/privacybrowser/activities/RequestsActivity.kt index 8311f003..d00bcb0c 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/RequestsActivity.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/RequestsActivity.kt @@ -42,7 +42,11 @@ import com.stoutner.privacybrowser.R import com.stoutner.privacybrowser.adapters.RequestsArrayAdapter import com.stoutner.privacybrowser.dialogs.ViewRequestDialog.Companion.request import com.stoutner.privacybrowser.dialogs.ViewRequestDialog.ViewRequestListener -import com.stoutner.privacybrowser.helpers.BlocklistHelper +import com.stoutner.privacybrowser.helpers.REQUEST_ALLOWED +import com.stoutner.privacybrowser.helpers.REQUEST_BLOCKED +import com.stoutner.privacybrowser.helpers.REQUEST_DEFAULT +import com.stoutner.privacybrowser.helpers.REQUEST_DISPOSITION +import com.stoutner.privacybrowser.helpers.REQUEST_THIRD_PARTY // Define the public constants. const val BLOCK_ALL_THIRD_PARTY_REQUESTS = "block_all_third_party_requests" @@ -119,23 +123,23 @@ class RequestsActivity : AppCompatActivity(), ViewRequestListener { // Add the request to the list of all requests. allResourceRequests.add(request) - when (request[BlocklistHelper.REQUEST_DISPOSITION]) { - BlocklistHelper.REQUEST_DEFAULT -> { + when (request[REQUEST_DISPOSITION]) { + REQUEST_DEFAULT -> { // Add the request to the list of default requests. defaultResourceRequests.add(request) } - BlocklistHelper.REQUEST_ALLOWED -> { + REQUEST_ALLOWED -> { // Add the request to the list of allowed requests. allowedResourceRequests.add(request) } - BlocklistHelper.REQUEST_THIRD_PARTY -> { + REQUEST_THIRD_PARTY -> { // Add the request to the list of third-party requests. thirdPartyResourceRequests.add(request) } - BlocklistHelper.REQUEST_BLOCKED -> { + REQUEST_BLOCKED -> { // Add the request to the list of blocked requests. blockedResourceRequests.add(request) } diff --git a/app/src/main/java/com/stoutner/privacybrowser/adapters/RequestsArrayAdapter.kt b/app/src/main/java/com/stoutner/privacybrowser/adapters/RequestsArrayAdapter.kt index f79ab07a..30f8f6dd 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/adapters/RequestsArrayAdapter.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/adapters/RequestsArrayAdapter.kt @@ -28,7 +28,10 @@ import android.widget.LinearLayout import android.widget.TextView import com.stoutner.privacybrowser.R -import com.stoutner.privacybrowser.helpers.BlocklistHelper +import com.stoutner.privacybrowser.helpers.REQUEST_ALLOWED +import com.stoutner.privacybrowser.helpers.REQUEST_BLOCKED +import com.stoutner.privacybrowser.helpers.REQUEST_DEFAULT +import com.stoutner.privacybrowser.helpers.REQUEST_THIRD_PARTY // `0` is the `textViewResourceId`, which is unused in this implementation. class RequestsArrayAdapter(context: Context, resourceRequestsList: List>) : ArrayAdapter>(context, 0, resourceRequestsList) { @@ -54,7 +57,7 @@ class RequestsArrayAdapter(context: Context, resourceRequestsList: List { + REQUEST_DEFAULT -> { // Set the disposition text. dispositionTextView.text = context.resources.getString(R.string.request_allowed, id) @@ -62,7 +65,7 @@ class RequestsArrayAdapter(context: Context, resourceRequestsList: List { + REQUEST_ALLOWED -> { // Set the disposition text. dispositionTextView.text = context.resources.getString(R.string.request_allowed, id) @@ -70,7 +73,7 @@ class RequestsArrayAdapter(context: Context, resourceRequestsList: List { + REQUEST_THIRD_PARTY -> { // Set the disposition text. dispositionTextView.text = context.resources.getString(R.string.request_blocked, id) @@ -78,7 +81,7 @@ class RequestsArrayAdapter(context: Context, resourceRequestsList: List { + REQUEST_BLOCKED -> { // Set the disposition text. dispositionTextView.text = context.resources.getString(R.string.request_blocked, id) diff --git a/app/src/main/java/com/stoutner/privacybrowser/coroutines/PopulateBlocklistsCoroutine.kt b/app/src/main/java/com/stoutner/privacybrowser/coroutines/PopulateBlocklistsCoroutine.kt index fb0c1e8f..32a4b3b3 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/coroutines/PopulateBlocklistsCoroutine.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/coroutines/PopulateBlocklistsCoroutine.kt @@ -27,7 +27,7 @@ import android.widget.TextView import androidx.drawerlayout.widget.DrawerLayout import com.stoutner.privacybrowser.R -import com.stoutner.privacybrowser.helpers.BlocklistHelper +import com.stoutner.privacybrowser.helpers.ParseBlocklistHelper import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -69,7 +69,7 @@ class PopulateBlocklistsCoroutine(context: Context) { loadingBlocklistsRelativeLayout.visibility = View.VISIBLE // Instantiate the blocklist helper. - val blocklistHelper = BlocklistHelper() + val parseBlocklistHelper = ParseBlocklistHelper() // Create a combined array list. val combinedBlocklists = ArrayList>>>() @@ -80,7 +80,7 @@ class PopulateBlocklistsCoroutine(context: Context) { // Populate the blocklists on the IO thread. withContext(Dispatchers.IO) { // Populate EasyList. - val easyList = blocklistHelper.parseBlocklist(context.assets, "blocklists/easylist.txt") + val easyList = parseBlocklistHelper.parseBlocklist(context.assets, "blocklists/easylist.txt") // Advertise the loading of EasyPrivacy. withContext(Dispatchers.Main) { @@ -88,7 +88,7 @@ class PopulateBlocklistsCoroutine(context: Context) { } // Populate EasyPrivacy. - val easyPrivacy = blocklistHelper.parseBlocklist(context.assets, "blocklists/easyprivacy.txt") + val easyPrivacy = parseBlocklistHelper.parseBlocklist(context.assets, "blocklists/easyprivacy.txt") // Advertise the loading of Fanboy's Annoyance List. withContext(Dispatchers.Main) { @@ -96,7 +96,7 @@ class PopulateBlocklistsCoroutine(context: Context) { } // Populate Fanboy's Annoyance List. - val fanboysAnnoyanceList = blocklistHelper.parseBlocklist(context.assets, "blocklists/fanboy-annoyance.txt") + val fanboysAnnoyanceList = parseBlocklistHelper.parseBlocklist(context.assets, "blocklists/fanboy-annoyance.txt") // Advertise the loading of Fanboy's social blocking list. withContext(Dispatchers.Main) { @@ -104,7 +104,7 @@ class PopulateBlocklistsCoroutine(context: Context) { } // Populate Fanboy's Social Blocking List. - val fanboysSocialList = blocklistHelper.parseBlocklist(context.assets, "blocklists/fanboy-social.txt") + val fanboysSocialList = parseBlocklistHelper.parseBlocklist(context.assets, "blocklists/fanboy-social.txt") // Advertise the loading of UltraList withContext(Dispatchers.Main) { @@ -112,7 +112,7 @@ class PopulateBlocklistsCoroutine(context: Context) { } // Populate UltraList. - val ultraList = blocklistHelper.parseBlocklist(context.assets, "blocklists/ultralist.txt") + val ultraList = parseBlocklistHelper.parseBlocklist(context.assets, "blocklists/ultralist.txt") // Advertise the loading of UltraPrivacy. withContext(Dispatchers.Main) { @@ -120,7 +120,7 @@ class PopulateBlocklistsCoroutine(context: Context) { } // Populate UltraPrivacy. - val ultraPrivacy = blocklistHelper.parseBlocklist(context.assets, "blocklists/ultraprivacy.txt") + val ultraPrivacy = parseBlocklistHelper.parseBlocklist(context.assets, "blocklists/ultraprivacy.txt") // Populate the combined array list. combinedBlocklists.add(easyList) diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewRequestDialog.kt b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewRequestDialog.kt index 8c9aed2f..b7e514ed 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewRequestDialog.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewRequestDialog.kt @@ -33,7 +33,38 @@ import androidx.fragment.app.DialogFragment import androidx.preference.PreferenceManager import com.stoutner.privacybrowser.R -import com.stoutner.privacybrowser.helpers.BlocklistHelper +import com.stoutner.privacybrowser.helpers.DOMAIN_BLACKLIST +import com.stoutner.privacybrowser.helpers.DOMAIN_FINAL_BLACKLIST +import com.stoutner.privacybrowser.helpers.DOMAIN_FINAL_WHITELIST +import com.stoutner.privacybrowser.helpers.DOMAIN_INITIAL_BLACKLIST +import com.stoutner.privacybrowser.helpers.DOMAIN_INITIAL_WHITELIST +import com.stoutner.privacybrowser.helpers.DOMAIN_REGULAR_EXPRESSION_BLACKLIST +import com.stoutner.privacybrowser.helpers.DOMAIN_WHITELIST +import com.stoutner.privacybrowser.helpers.INITIAL_BLACKLIST +import com.stoutner.privacybrowser.helpers.REQUEST_ALLOWED +import com.stoutner.privacybrowser.helpers.REQUEST_BLOCKED +import com.stoutner.privacybrowser.helpers.REQUEST_BLOCKLIST +import com.stoutner.privacybrowser.helpers.REQUEST_BLOCKLIST_ENTRIES +import com.stoutner.privacybrowser.helpers.REQUEST_BLOCKLIST_ORIGINAL_ENTRY +import com.stoutner.privacybrowser.helpers.REQUEST_DEFAULT +import com.stoutner.privacybrowser.helpers.REQUEST_DISPOSITION +import com.stoutner.privacybrowser.helpers.FINAL_BLACKLIST +import com.stoutner.privacybrowser.helpers.FINAL_WHITELIST +import com.stoutner.privacybrowser.helpers.MAIN_BLACKLIST +import com.stoutner.privacybrowser.helpers.MAIN_WHITELIST +import com.stoutner.privacybrowser.helpers.REGULAR_EXPRESSION_BLACKLIST +import com.stoutner.privacybrowser.helpers.REQUEST_SUBLIST +import com.stoutner.privacybrowser.helpers.REQUEST_THIRD_PARTY +import com.stoutner.privacybrowser.helpers.REQUEST_URL +import com.stoutner.privacybrowser.helpers.THIRD_PARTY_BLACKLIST +import com.stoutner.privacybrowser.helpers.THIRD_PARTY_DOMAIN_BLACKLIST +import com.stoutner.privacybrowser.helpers.THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST +import com.stoutner.privacybrowser.helpers.THIRD_PARTY_DOMAIN_INITIAL_WHITELIST +import com.stoutner.privacybrowser.helpers.THIRD_PARTY_DOMAIN_REGULAR_EXPRESSION_BLACKLIST +import com.stoutner.privacybrowser.helpers.THIRD_PARTY_DOMAIN_WHITELIST +import com.stoutner.privacybrowser.helpers.THIRD_PARTY_INITIAL_BLACKLIST +import com.stoutner.privacybrowser.helpers.THIRD_PARTY_REGULAR_EXPRESSION_BLACKLIST +import com.stoutner.privacybrowser.helpers.THIRD_PARTY_WHITELIST // Define the class constants. private const val ID = "id" @@ -154,8 +185,8 @@ class ViewRequestDialog : DialogFragment() { nextButton.isEnabled = !isLastRequest // Set the request action text. - when (requestDetails[BlocklistHelper.REQUEST_DISPOSITION]) { - BlocklistHelper.REQUEST_DEFAULT -> { + when (requestDetails[REQUEST_DISPOSITION]) { + REQUEST_DEFAULT -> { // Set the text. requestDisposition.setText(R.string.default_allowed) @@ -163,7 +194,7 @@ class ViewRequestDialog : DialogFragment() { requestDisposition.setBackgroundColor(getColor(requireContext(), R.color.transparent)) } - BlocklistHelper.REQUEST_ALLOWED -> { + REQUEST_ALLOWED -> { // Set the text. requestDisposition.setText(R.string.allowed) @@ -171,14 +202,15 @@ class ViewRequestDialog : DialogFragment() { requestDisposition.setBackgroundColor(getColor(requireContext(), R.color.blue_background)) } - BlocklistHelper.REQUEST_THIRD_PARTY -> { + REQUEST_THIRD_PARTY -> { // Set the text. requestDisposition.setText(R.string.third_party_blocked) // Set the background color to be yellow. requestDisposition.setBackgroundColor(getColor(requireContext(), R.color.yellow_background)) } - BlocklistHelper.REQUEST_BLOCKED -> { + + REQUEST_BLOCKED -> { // Set the text. requestDisposition.setText(R.string.blocked) @@ -188,7 +220,7 @@ class ViewRequestDialog : DialogFragment() { } // Display the request URL. - requestUrl.text = requestDetails[BlocklistHelper.REQUEST_URL] + requestUrl.text = requestDetails[REQUEST_URL] // Modify the dialog based on the request action. if (requestDetails.size == 2) { // A default request. @@ -203,32 +235,32 @@ class ViewRequestDialog : DialogFragment() { requestBlockListOriginalEntry.visibility = View.GONE } else { // A blocked or allowed request. // Set the text on the text views. - requestBlockList.text = requestDetails[BlocklistHelper.REQUEST_BLOCKLIST] - requestBlockListEntries.text = requestDetails[BlocklistHelper.REQUEST_BLOCKLIST_ENTRIES] - requestBlockListOriginalEntry.text = requestDetails[BlocklistHelper.REQUEST_BLOCKLIST_ORIGINAL_ENTRY] - when (requestDetails[BlocklistHelper.REQUEST_SUBLIST]) { - BlocklistHelper.MAIN_WHITELIST -> requestSubList.setText(R.string.main_whitelist) - BlocklistHelper.FINAL_WHITELIST -> requestSubList.setText(R.string.final_whitelist) - BlocklistHelper.DOMAIN_WHITELIST -> requestSubList.setText(R.string.domain_whitelist) - BlocklistHelper.DOMAIN_INITIAL_WHITELIST -> requestSubList.setText(R.string.domain_initial_whitelist) - BlocklistHelper.DOMAIN_FINAL_WHITELIST -> requestSubList.setText(R.string.domain_final_whitelist) - BlocklistHelper.THIRD_PARTY_WHITELIST -> requestSubList.setText(R.string.third_party_whitelist) - BlocklistHelper.THIRD_PARTY_DOMAIN_WHITELIST -> requestSubList.setText(R.string.third_party_domain_whitelist) - BlocklistHelper.THIRD_PARTY_DOMAIN_INITIAL_WHITELIST -> requestSubList.setText(R.string.third_party_domain_initial_whitelist) - BlocklistHelper.MAIN_BLACKLIST -> requestSubList.setText(R.string.main_blacklist) - BlocklistHelper.INITIAL_BLACKLIST -> requestSubList.setText(R.string.initial_blacklist) - BlocklistHelper.FINAL_BLACKLIST -> requestSubList.setText(R.string.final_blacklist) - BlocklistHelper.DOMAIN_BLACKLIST -> requestSubList.setText(R.string.domain_blacklist) - BlocklistHelper.DOMAIN_INITIAL_BLACKLIST -> requestSubList.setText(R.string.domain_initial_blacklist) - BlocklistHelper.DOMAIN_FINAL_BLACKLIST -> requestSubList.setText(R.string.domain_final_blacklist) - BlocklistHelper.DOMAIN_REGULAR_EXPRESSION_BLACKLIST -> requestSubList.setText(R.string.domain_regular_expression_blacklist) - BlocklistHelper.THIRD_PARTY_BLACKLIST -> requestSubList.setText(R.string.third_party_blacklist) - BlocklistHelper.THIRD_PARTY_INITIAL_BLACKLIST -> requestSubList.setText(R.string.third_party_initial_blacklist) - BlocklistHelper.THIRD_PARTY_DOMAIN_BLACKLIST -> requestSubList.setText(R.string.third_party_domain_blacklist) - BlocklistHelper.THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST -> requestSubList.setText(R.string.third_party_domain_initial_blacklist) - BlocklistHelper.THIRD_PARTY_REGULAR_EXPRESSION_BLACKLIST -> requestSubList.setText(R.string.third_party_regular_expression_blacklist) - BlocklistHelper.THIRD_PARTY_DOMAIN_REGULAR_EXPRESSION_BLACKLIST -> requestSubList.setText(R.string.third_party_domain_regular_expression_blacklist) - BlocklistHelper.REGULAR_EXPRESSION_BLACKLIST -> requestSubList.setText(R.string.regular_expression_blacklist) + requestBlockList.text = requestDetails[REQUEST_BLOCKLIST] + requestBlockListEntries.text = requestDetails[REQUEST_BLOCKLIST_ENTRIES] + requestBlockListOriginalEntry.text = requestDetails[REQUEST_BLOCKLIST_ORIGINAL_ENTRY] + when (requestDetails[REQUEST_SUBLIST]) { + MAIN_WHITELIST -> requestSubList.setText(R.string.main_whitelist) + FINAL_WHITELIST -> requestSubList.setText(R.string.final_whitelist) + DOMAIN_WHITELIST -> requestSubList.setText(R.string.domain_whitelist) + DOMAIN_INITIAL_WHITELIST -> requestSubList.setText(R.string.domain_initial_whitelist) + DOMAIN_FINAL_WHITELIST -> requestSubList.setText(R.string.domain_final_whitelist) + THIRD_PARTY_WHITELIST -> requestSubList.setText(R.string.third_party_whitelist) + THIRD_PARTY_DOMAIN_WHITELIST -> requestSubList.setText(R.string.third_party_domain_whitelist) + THIRD_PARTY_DOMAIN_INITIAL_WHITELIST -> requestSubList.setText(R.string.third_party_domain_initial_whitelist) + MAIN_BLACKLIST -> requestSubList.setText(R.string.main_blacklist) + INITIAL_BLACKLIST -> requestSubList.setText(R.string.initial_blacklist) + FINAL_BLACKLIST -> requestSubList.setText(R.string.final_blacklist) + DOMAIN_BLACKLIST -> requestSubList.setText(R.string.domain_blacklist) + DOMAIN_INITIAL_BLACKLIST -> requestSubList.setText(R.string.domain_initial_blacklist) + DOMAIN_FINAL_BLACKLIST -> requestSubList.setText(R.string.domain_final_blacklist) + DOMAIN_REGULAR_EXPRESSION_BLACKLIST -> requestSubList.setText(R.string.domain_regular_expression_blacklist) + THIRD_PARTY_BLACKLIST -> requestSubList.setText(R.string.third_party_blacklist) + THIRD_PARTY_INITIAL_BLACKLIST -> requestSubList.setText(R.string.third_party_initial_blacklist) + THIRD_PARTY_DOMAIN_BLACKLIST -> requestSubList.setText(R.string.third_party_domain_blacklist) + THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST -> requestSubList.setText(R.string.third_party_domain_initial_blacklist) + THIRD_PARTY_REGULAR_EXPRESSION_BLACKLIST -> requestSubList.setText(R.string.third_party_regular_expression_blacklist) + THIRD_PARTY_DOMAIN_REGULAR_EXPRESSION_BLACKLIST -> requestSubList.setText(R.string.third_party_domain_regular_expression_blacklist) + REGULAR_EXPRESSION_BLACKLIST -> requestSubList.setText(R.string.regular_expression_blacklist) } } diff --git a/app/src/main/java/com/stoutner/privacybrowser/helpers/CheckBlocklistHelper.kt b/app/src/main/java/com/stoutner/privacybrowser/helpers/CheckBlocklistHelper.kt new file mode 100644 index 00000000..48867a8e --- /dev/null +++ b/app/src/main/java/com/stoutner/privacybrowser/helpers/CheckBlocklistHelper.kt @@ -0,0 +1,484 @@ +/* + * Copyright 2018-2019,2021-2023 Soren Stoutner . + * + * This file is part of Privacy Browser Android . + * + * Privacy Browser Android is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Privacy Browser Android is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Browser Android. If not, see . + */ + +package com.stoutner.privacybrowser.helpers +import java.util.ArrayList +import java.util.regex.Pattern + +// Define the request disposition options. +const val REQUEST_DEFAULT = "0" +const val REQUEST_ALLOWED = "1" +const val REQUEST_THIRD_PARTY = "2" +const val REQUEST_BLOCKED = "3" + +class CheckBlocklistHelper { + fun checkBlocklist(currentDomain: String?, resourceUrl: String, isThirdPartyRequest: Boolean, blocklist: ArrayList>>): Array { + // Get the blocklist name. + val blocklistName = blocklist[0][1][0] + + // Process the whitelists. + // Main whitelist. + for (whitelistEntry in blocklist[MAIN_WHITELIST.toInt()]) { + when (whitelistEntry.size) { + // There is one entry. + 2 -> if (resourceUrl.contains(whitelistEntry[0])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, MAIN_WHITELIST, whitelistEntry[0], whitelistEntry[1]) + } + + // There are two entries. + 3 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, MAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}", whitelistEntry[2] + ) + } + + // There are three entries. + 4 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, MAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) + } + } + } + + // Final whitelist. + for (whitelistEntry in blocklist[FINAL_WHITELIST.toInt()]) { + when (whitelistEntry.size) { + // There is one entry. + 2 -> if (resourceUrl.contains(whitelistEntry[0])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, FINAL_WHITELIST, whitelistEntry[0], whitelistEntry[1]) + } + + // There are two entries. + 3 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, FINAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}", whitelistEntry[2]) + } + } + } + + // Only check the domain lists if the current domain is not null (like `about:blank`). + if (currentDomain != null) { + // Domain whitelist. + for (whitelistEntry in blocklist[DOMAIN_WHITELIST.toInt()]) { + when (whitelistEntry.size) { + // There is one entry. + 3 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}", whitelistEntry[2]) + } + + // There are two entries. + 4 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) + } + + // There are three entries. + 5 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2]) && resourceUrl.contains(whitelistEntry[3])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}\n${whitelistEntry[3]}", whitelistEntry[4]) + } + + // There are four entries. + 6 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2]) && resourceUrl.contains(whitelistEntry[3]) && + resourceUrl.contains(whitelistEntry[4])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_WHITELIST, + "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}\n${whitelistEntry[3]}\n${whitelistEntry[4]}", whitelistEntry[5]) + } + } + } + + // Domain initial whitelist. + for (whitelistEntry in blocklist[DOMAIN_INITIAL_WHITELIST.toInt()]) { + when (whitelistEntry.size) { + // There is one entry. + 3 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.startsWith(whitelistEntry[1])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_INITIAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}".trimIndent(), whitelistEntry[2]) + } + + // There are two entries. + 4 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.startsWith(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_INITIAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) + } + + // There are three entries. + 5 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.startsWith(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2]) && resourceUrl.startsWith(whitelistEntry[3])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_INITIAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}\n${whitelistEntry[3]}", + whitelistEntry[4]) + } + } + } + + // Domain final whitelist. + for (whitelistEntry in blocklist[DOMAIN_FINAL_WHITELIST.toInt()]) { + when (whitelistEntry.size) { + // There is one entry. + 3 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.endsWith(whitelistEntry[1])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_FINAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}", whitelistEntry[2]) + } + + // There are two entries. + 4 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.endsWith(whitelistEntry[2])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_FINAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) + } + } + } + } + + // Only check the third-party whitelists if this is a third-party request. + if (isThirdPartyRequest) { + // Third-party whitelist. + for (whitelistEntry in blocklist[THIRD_PARTY_WHITELIST.toInt()]) { + when (whitelistEntry.size) { + // There is one entry. + 2 -> if (resourceUrl.contains(whitelistEntry[0])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_WHITELIST, whitelistEntry[0], whitelistEntry[1]) + } + + // There are two entries. + 3 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}", whitelistEntry[2]) + } + + // There are three entries. + 4 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) + } + + // There are four entries. + 5 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2]) && resourceUrl.contains(whitelistEntry[3])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}\n${whitelistEntry[3]}", + whitelistEntry[4]) + } + + // There are five entries. + 6 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2]) && resourceUrl.contains(whitelistEntry[3]) && + resourceUrl.contains(whitelistEntry[4])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_WHITELIST, + "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}\n${whitelistEntry[3]}\n${whitelistEntry[4]}", whitelistEntry[5]) + } + } + } + + // Third-party domain whitelist. + for (whitelistEntry in blocklist[THIRD_PARTY_DOMAIN_WHITELIST.toInt()]) { + when (whitelistEntry.size) { + // There is one entry. + 3 -> if (currentDomain!!.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n", whitelistEntry[2]) + } + + // There are two entries. + 4 -> if (currentDomain!!.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) + } + } + } + + // Third-party domain initial whitelist. + for (whitelistEntry in blocklist[THIRD_PARTY_DOMAIN_INITIAL_WHITELIST.toInt()]) { + when (whitelistEntry.size) { + // There is one entry. + 3 -> if (currentDomain!!.endsWith(whitelistEntry[0]) && resourceUrl.startsWith(whitelistEntry[1])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_INITIAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n", whitelistEntry[2]) + } + + // There are two entries. + 4 -> if (currentDomain!!.endsWith(whitelistEntry[0]) && resourceUrl.startsWith(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { + // Return a whitelist match request allowed. + return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) + } + } + } + } + + // Process the blacklists. + // Main blacklist. + for (blacklistEntry in blocklist[MAIN_BLACKLIST.toInt()]) { + when (blacklistEntry.size) { + // There is one entry. + 2 -> if (resourceUrl.contains(blacklistEntry[0])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, MAIN_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) + } + + // There are two entries. + 3 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, MAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) + } + + // There are three entries. + 4 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, MAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) + } + + // There are four entries. + 5 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2]) && resourceUrl.contains(blacklistEntry[3])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, MAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}\n${blacklistEntry[3]}", blacklistEntry[4]) + } + + // There are five entries. + 6 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2]) && resourceUrl.contains(blacklistEntry[3]) && + resourceUrl.contains(blacklistEntry[4])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, MAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}\n${blacklistEntry[3]}\n${blacklistEntry[4]}", + blacklistEntry[5]) + } + } + } + + // Initial blacklist. + for (blacklistEntry in blocklist[INITIAL_BLACKLIST.toInt()]) { + when (blacklistEntry.size) { + // There is one entry. + 2 -> if (resourceUrl.startsWith(blacklistEntry[0])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, INITIAL_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) + } + + // There are two entries + 3 -> if (resourceUrl.startsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, INITIAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) + } + } + } + + // Final blacklist. + for (blacklistEntry in blocklist[FINAL_BLACKLIST.toInt()]) { + when (blacklistEntry.size) { + // There is one entry. + 2 -> if (resourceUrl.endsWith(blacklistEntry[0])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, FINAL_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) + } + + // There are two entries. + 3 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.endsWith(blacklistEntry[1])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, FINAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) + } + + // There are three entries. + 4 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.endsWith(blacklistEntry[2])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, FINAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) + } + } + } + + // Only check the domain lists if the current domain is not null (like `about:blank`). + if (currentDomain != null) { + // Domain blacklist. + for (blacklistEntry in blocklist[DOMAIN_BLACKLIST.toInt()]) { + when (blacklistEntry.size) { + // There is one entry. + 3 -> if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) + } + + // There are two entries. + 4 -> if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) + } + + // There are three entries. + 5 -> if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2]) && resourceUrl.contains(blacklistEntry[3])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}\n${blacklistEntry[3]}", blacklistEntry[4]) + } + } + } + + // Domain initial blacklist. + for (blacklistEntry in blocklist[DOMAIN_INITIAL_BLACKLIST.toInt()]) { + // Store the entry in the resource request log. + if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.startsWith(blacklistEntry[1])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_INITIAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) + } + } + + // Domain final blacklist. + for (blacklistEntry in blocklist[DOMAIN_FINAL_BLACKLIST.toInt()]) { + when (blacklistEntry.size) { + // There is one entry. + 3 -> if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.endsWith(blacklistEntry[1])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_FINAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) + } + + // There are two entries. + 4 -> if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.endsWith(blacklistEntry[2])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_FINAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) + } + } + } + + // Domain regular expression blacklist. + for (blacklistEntry in blocklist[DOMAIN_REGULAR_EXPRESSION_BLACKLIST.toInt()]) { + if (currentDomain.endsWith(blacklistEntry[0]) && Pattern.matches(blacklistEntry[1], resourceUrl)) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_REGULAR_EXPRESSION_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) + } + } + } + + // Only check the third-party blacklists if this is a third-party request. + if (isThirdPartyRequest) { + // Third-party blacklist. + for (blacklistEntry in blocklist[THIRD_PARTY_BLACKLIST.toInt()]) { + when (blacklistEntry.size) { + // There is one entry. + 2 -> if (resourceUrl.contains(blacklistEntry[0])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) + } + + // There are two entries. + 3 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { + // Return a blacklist match request blocked. + return arrayOf( + REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n", blacklistEntry[2]) + } + + // There are three entries. + 4 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) + } + + // There are four entries. + 5 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2]) && resourceUrl.contains(blacklistEntry[3])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}\n${blacklistEntry[3]}", + blacklistEntry[4]) + } + } + } + + // Third-party initial blacklist. + for (blacklistEntry in blocklist[THIRD_PARTY_INITIAL_BLACKLIST.toInt()]) { + when (blacklistEntry.size) { + // There is one entry. + 2 -> if (resourceUrl.startsWith(blacklistEntry[0])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_INITIAL_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) + } + + // There are two entries. + 3 -> if (resourceUrl.startsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_INITIAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) + } + } + } + + // Third-party domain blacklist. + for (blacklistEntry in blocklist[THIRD_PARTY_DOMAIN_BLACKLIST.toInt()]) { + when (blacklistEntry.size) { + // There is one entry. + 3 -> if (currentDomain!!.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) + } + + // There are two entries. + 4 -> if (currentDomain!!.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) + } + } + } + + // Third-party domain initial blacklist. + for (blacklistEntry in blocklist[THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST.toInt()]) { + when (blacklistEntry.size) { + // There is one entry. + 3 -> if (currentDomain!!.endsWith(blacklistEntry[0]) && resourceUrl.startsWith(blacklistEntry[1])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n", blacklistEntry[2]) + } + + // There are two entries. + 4 -> if (currentDomain!!.endsWith(blacklistEntry[0]) && resourceUrl.startsWith(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) + } + + // There are three entries. + 5 -> if (currentDomain!!.endsWith(blacklistEntry[0]) && resourceUrl.startsWith(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2]) && resourceUrl.contains(blacklistEntry[3])) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST, + "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}\n${blacklistEntry[3]}", blacklistEntry[4]) + } + } + } + + // Third-party regular expression blacklist. + for (blacklistEntry in blocklist[THIRD_PARTY_REGULAR_EXPRESSION_BLACKLIST.toInt()]) { + if (Pattern.matches(blacklistEntry[0], resourceUrl)) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_REGULAR_EXPRESSION_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) + } + } + + // Third-party domain regular expression blacklist. + for (blacklistEntry in blocklist[THIRD_PARTY_DOMAIN_REGULAR_EXPRESSION_BLACKLIST.toInt()]) { + if (currentDomain!!.endsWith(blacklistEntry[0]) && Pattern.matches(blacklistEntry[1], resourceUrl)) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_REGULAR_EXPRESSION_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) + } + } + } + + // Regular expression blacklist. + for (blacklistEntry in blocklist[REGULAR_EXPRESSION_BLACKLIST.toInt()]) { + if (Pattern.matches(blacklistEntry[0], resourceUrl)) { + // Return a blacklist match request blocked. + return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, REGULAR_EXPRESSION_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) + } + } + + // Return a no match request default. + return arrayOf(REQUEST_DEFAULT) + } +} diff --git a/app/src/main/java/com/stoutner/privacybrowser/helpers/BlocklistHelper.kt b/app/src/main/java/com/stoutner/privacybrowser/helpers/ParseBlocklistHelper.kt similarity index 77% rename from app/src/main/java/com/stoutner/privacybrowser/helpers/BlocklistHelper.kt rename to app/src/main/java/com/stoutner/privacybrowser/helpers/ParseBlocklistHelper.kt index bded48c4..e6c8bf48 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/helpers/BlocklistHelper.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/helpers/ParseBlocklistHelper.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018-2019,2021-2022 Soren Stoutner . + * Copyright 2018-2019,2021-2023 Soren Stoutner . * * This file is part of Privacy Browser Android . * @@ -25,51 +25,42 @@ import java.io.BufferedReader import java.io.IOException import java.io.InputStreamReader import java.util.ArrayList -import java.util.regex.Pattern - -class BlocklistHelper { - companion object { - // Describe the schema of the string array in each entry of the resource requests array list. - const val REQUEST_DISPOSITION = 0 - const val REQUEST_URL = 1 - const val REQUEST_BLOCKLIST = 2 - const val REQUEST_SUBLIST = 3 - const val REQUEST_BLOCKLIST_ENTRIES = 4 - const val REQUEST_BLOCKLIST_ORIGINAL_ENTRY = 5 - - // The request disposition options. - const val REQUEST_DEFAULT = "0" - const val REQUEST_ALLOWED = "1" - const val REQUEST_THIRD_PARTY = "2" - const val REQUEST_BLOCKED = "3" - - // The whitelists. - const val MAIN_WHITELIST = "1" - const val FINAL_WHITELIST = "2" - const val DOMAIN_WHITELIST = "3" - const val DOMAIN_INITIAL_WHITELIST = "4" - const val DOMAIN_FINAL_WHITELIST = "5" - const val THIRD_PARTY_WHITELIST = "6" - const val THIRD_PARTY_DOMAIN_WHITELIST = "7" - const val THIRD_PARTY_DOMAIN_INITIAL_WHITELIST = "8" - - // The blacklists. - const val MAIN_BLACKLIST = "9" - const val INITIAL_BLACKLIST = "10" - const val FINAL_BLACKLIST = "11" - const val DOMAIN_BLACKLIST = "12" - const val DOMAIN_INITIAL_BLACKLIST = "13" - const val DOMAIN_FINAL_BLACKLIST = "14" - const val DOMAIN_REGULAR_EXPRESSION_BLACKLIST = "15" - const val THIRD_PARTY_BLACKLIST = "16" - const val THIRD_PARTY_INITIAL_BLACKLIST = "17" - const val THIRD_PARTY_DOMAIN_BLACKLIST = "18" - const val THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST = "19" - const val THIRD_PARTY_REGULAR_EXPRESSION_BLACKLIST = "20" - const val THIRD_PARTY_DOMAIN_REGULAR_EXPRESSION_BLACKLIST = "21" - const val REGULAR_EXPRESSION_BLACKLIST = "22" - } +// Define the schema of the string array in each entry of the resource requests array list. +const val REQUEST_DISPOSITION = 0 +const val REQUEST_URL = 1 +const val REQUEST_BLOCKLIST = 2 +const val REQUEST_SUBLIST = 3 +const val REQUEST_BLOCKLIST_ENTRIES = 4 +const val REQUEST_BLOCKLIST_ORIGINAL_ENTRY = 5 + +// Define the whitelists. +const val MAIN_WHITELIST = "1" +const val FINAL_WHITELIST = "2" +const val DOMAIN_WHITELIST = "3" +const val DOMAIN_INITIAL_WHITELIST = "4" +const val DOMAIN_FINAL_WHITELIST = "5" +const val THIRD_PARTY_WHITELIST = "6" +const val THIRD_PARTY_DOMAIN_WHITELIST = "7" +const val THIRD_PARTY_DOMAIN_INITIAL_WHITELIST = "8" + +// Define the blacklists. +const val MAIN_BLACKLIST = "9" +const val INITIAL_BLACKLIST = "10" +const val FINAL_BLACKLIST = "11" +const val DOMAIN_BLACKLIST = "12" +const val DOMAIN_INITIAL_BLACKLIST = "13" +const val DOMAIN_FINAL_BLACKLIST = "14" +const val DOMAIN_REGULAR_EXPRESSION_BLACKLIST = "15" +const val THIRD_PARTY_BLACKLIST = "16" +const val THIRD_PARTY_INITIAL_BLACKLIST = "17" +const val THIRD_PARTY_DOMAIN_BLACKLIST = "18" +const val THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST = "19" +const val THIRD_PARTY_REGULAR_EXPRESSION_BLACKLIST = "20" +const val THIRD_PARTY_DOMAIN_REGULAR_EXPRESSION_BLACKLIST = "21" +const val REGULAR_EXPRESSION_BLACKLIST = "22" + +class ParseBlocklistHelper { fun parseBlocklist(assetManager: AssetManager, blocklistName: String): ArrayList>> { // Initialize the header list. val headers: MutableList> = ArrayList() // 0. @@ -1609,458 +1600,4 @@ class BlocklistHelper { // Return the combined lists. return combinedLists } - - fun checkBlocklist(currentDomain: String?, resourceUrl: String, isThirdPartyRequest: Boolean, blocklist: ArrayList>>): Array { - // Get the blocklist name. - val blocklistName = blocklist[0][1][0] - - // Process the whitelists. - // Main whitelist. - for (whitelistEntry in blocklist[MAIN_WHITELIST.toInt()]) { - when (whitelistEntry.size) { - // There is one entry. - 2 -> if (resourceUrl.contains(whitelistEntry[0])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, MAIN_WHITELIST, whitelistEntry[0], whitelistEntry[1]) - } - - // There are two entries. - 3 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, MAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}", whitelistEntry[2] - ) - } - - // There are three entries. - 4 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, MAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) - } - } - } - - // Final whitelist. - for (whitelistEntry in blocklist[FINAL_WHITELIST.toInt()]) { - when (whitelistEntry.size) { - // There is one entry. - 2 -> if (resourceUrl.contains(whitelistEntry[0])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, FINAL_WHITELIST, whitelistEntry[0], whitelistEntry[1]) - } - - // There are two entries. - 3 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, FINAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}", whitelistEntry[2]) - } - } - } - - // Only check the domain lists if the current domain is not null (like `about:blank`). - if (currentDomain != null) { - // Domain whitelist. - for (whitelistEntry in blocklist[DOMAIN_WHITELIST.toInt()]) { - when (whitelistEntry.size) { - // There is one entry. - 3 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}", whitelistEntry[2]) - } - - // There are two entries. - 4 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) - } - - // There are three entries. - 5 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2]) && resourceUrl.contains(whitelistEntry[3])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}\n${whitelistEntry[3]}", whitelistEntry[4]) - } - - // There are four entries. - 6 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2]) && resourceUrl.contains(whitelistEntry[3]) && - resourceUrl.contains(whitelistEntry[4])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_WHITELIST, - "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}\n${whitelistEntry[3]}\n${whitelistEntry[4]}", whitelistEntry[5]) - } - } - } - - // Domain initial whitelist. - for (whitelistEntry in blocklist[DOMAIN_INITIAL_WHITELIST.toInt()]) { - when (whitelistEntry.size) { - // There is one entry. - 3 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.startsWith(whitelistEntry[1])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_INITIAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}".trimIndent(), whitelistEntry[2]) - } - - // There are two entries. - 4 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.startsWith(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_INITIAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) - } - - // There are three entries. - 5 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.startsWith(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2]) && resourceUrl.startsWith(whitelistEntry[3])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_INITIAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}\n${whitelistEntry[3]}", - whitelistEntry[4]) - } - } - } - - // Domain final whitelist. - for (whitelistEntry in blocklist[DOMAIN_FINAL_WHITELIST.toInt()]) { - when (whitelistEntry.size) { - // There is one entry. - 3 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.endsWith(whitelistEntry[1])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_FINAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}", whitelistEntry[2]) - } - - // There are two entries. - 4 -> if (currentDomain.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.endsWith(whitelistEntry[2])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, DOMAIN_FINAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) - } - } - } - } - - // Only check the third-party whitelists if this is a third-party request. - if (isThirdPartyRequest) { - // Third-party whitelist. - for (whitelistEntry in blocklist[THIRD_PARTY_WHITELIST.toInt()]) { - when (whitelistEntry.size) { - // There is one entry. - 2 -> if (resourceUrl.contains(whitelistEntry[0])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_WHITELIST, whitelistEntry[0], whitelistEntry[1]) - } - - // There are two entries. - 3 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}", whitelistEntry[2]) - } - - // There are three entries. - 4 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) - } - - // There are four entries. - 5 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2]) && resourceUrl.contains(whitelistEntry[3])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}\n${whitelistEntry[3]}", - whitelistEntry[4]) - } - - // There are five entries. - 6 -> if (resourceUrl.contains(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2]) && resourceUrl.contains(whitelistEntry[3]) && - resourceUrl.contains(whitelistEntry[4])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_WHITELIST, - "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}\n${whitelistEntry[3]}\n${whitelistEntry[4]}", whitelistEntry[5]) - } - } - } - - // Third-party domain whitelist. - for (whitelistEntry in blocklist[THIRD_PARTY_DOMAIN_WHITELIST.toInt()]) { - when (whitelistEntry.size) { - // There is one entry. - 3 -> if (currentDomain!!.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n", whitelistEntry[2]) - } - - // There are two entries. - 4 -> if (currentDomain!!.endsWith(whitelistEntry[0]) && resourceUrl.contains(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) - } - } - } - - // Third-party domain initial whitelist. - for (whitelistEntry in blocklist[THIRD_PARTY_DOMAIN_INITIAL_WHITELIST.toInt()]) { - when (whitelistEntry.size) { - // There is one entry. - 3 -> if (currentDomain!!.endsWith(whitelistEntry[0]) && resourceUrl.startsWith(whitelistEntry[1])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_INITIAL_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n", whitelistEntry[2]) - } - - // There are two entries. - 4 -> if (currentDomain!!.endsWith(whitelistEntry[0]) && resourceUrl.startsWith(whitelistEntry[1]) && resourceUrl.contains(whitelistEntry[2])) { - // Return a whitelist match request allowed. - return arrayOf(REQUEST_ALLOWED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_WHITELIST, "${whitelistEntry[0]}\n${whitelistEntry[1]}\n${whitelistEntry[2]}", whitelistEntry[3]) - } - } - } - } - - // Process the blacklists. - // Main blacklist. - for (blacklistEntry in blocklist[MAIN_BLACKLIST.toInt()]) { - when (blacklistEntry.size) { - // There is one entry. - 2 -> if (resourceUrl.contains(blacklistEntry[0])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, MAIN_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) - } - - // There are two entries. - 3 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, MAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) - } - - // There are three entries. - 4 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, MAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) - } - - // There are four entries. - 5 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2]) && resourceUrl.contains(blacklistEntry[3])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, MAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}\n${blacklistEntry[3]}", blacklistEntry[4]) - } - - // There are five entries. - 6 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2]) && resourceUrl.contains(blacklistEntry[3]) && - resourceUrl.contains(blacklistEntry[4])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, MAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}\n${blacklistEntry[3]}\n${blacklistEntry[4]}", - blacklistEntry[5]) - } - } - } - - // Initial blacklist. - for (blacklistEntry in blocklist[INITIAL_BLACKLIST.toInt()]) { - when (blacklistEntry.size) { - // There is one entry. - 2 -> if (resourceUrl.startsWith(blacklistEntry[0])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, INITIAL_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) - } - - // There are two entries - 3 -> if (resourceUrl.startsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, INITIAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) - } - } - } - - // Final blacklist. - for (blacklistEntry in blocklist[FINAL_BLACKLIST.toInt()]) { - when (blacklistEntry.size) { - // There is one entry. - 2 -> if (resourceUrl.endsWith(blacklistEntry[0])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, FINAL_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) - } - - // There are two entries. - 3 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.endsWith(blacklistEntry[1])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, FINAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) - } - - // There are three entries. - 4 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.endsWith(blacklistEntry[2])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, FINAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) - } - } - } - - // Only check the domain lists if the current domain is not null (like `about:blank`). - if (currentDomain != null) { - // Domain blacklist. - for (blacklistEntry in blocklist[DOMAIN_BLACKLIST.toInt()]) { - when (blacklistEntry.size) { - // There is one entry. - 3 -> if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) - } - - // There are two entries. - 4 -> if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) - } - - // There are three entries. - 5 -> if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2]) && resourceUrl.contains(blacklistEntry[3])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}\n${blacklistEntry[3]}", blacklistEntry[4]) - } - } - } - - // Domain initial blacklist. - for (blacklistEntry in blocklist[DOMAIN_INITIAL_BLACKLIST.toInt()]) { - // Store the entry in the resource request log. - if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.startsWith(blacklistEntry[1])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_INITIAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) - } - } - - // Domain final blacklist. - for (blacklistEntry in blocklist[DOMAIN_FINAL_BLACKLIST.toInt()]) { - when (blacklistEntry.size) { - // There is one entry. - 3 -> if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.endsWith(blacklistEntry[1])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_FINAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) - } - - // There are two entries. - 4 -> if (currentDomain.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.endsWith(blacklistEntry[2])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_FINAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) - } - } - } - - // Domain regular expression blacklist. - for (blacklistEntry in blocklist[DOMAIN_REGULAR_EXPRESSION_BLACKLIST.toInt()]) { - if (currentDomain.endsWith(blacklistEntry[0]) && Pattern.matches(blacklistEntry[1], resourceUrl)) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, DOMAIN_REGULAR_EXPRESSION_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) - } - } - } - - // Only check the third-party blacklists if this is a third-party request. - if (isThirdPartyRequest) { - // Third-party blacklist. - for (blacklistEntry in blocklist[THIRD_PARTY_BLACKLIST.toInt()]) { - when (blacklistEntry.size) { - // There is one entry. - 2 -> if (resourceUrl.contains(blacklistEntry[0])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) - } - - // There are two entries. - 3 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { - // Return a blacklist match request blocked. - return arrayOf( - REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n", blacklistEntry[2]) - } - - // There are three entries. - 4 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) - } - - // There are four entries. - 5 -> if (resourceUrl.contains(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2]) && resourceUrl.contains(blacklistEntry[3])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}\n${blacklistEntry[3]}", - blacklistEntry[4]) - } - } - } - - // Third-party initial blacklist. - for (blacklistEntry in blocklist[THIRD_PARTY_INITIAL_BLACKLIST.toInt()]) { - when (blacklistEntry.size) { - // There is one entry. - 2 -> if (resourceUrl.startsWith(blacklistEntry[0])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_INITIAL_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) - } - - // There are two entries. - 3 -> if (resourceUrl.startsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_INITIAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) - } - } - } - - // Third-party domain blacklist. - for (blacklistEntry in blocklist[THIRD_PARTY_DOMAIN_BLACKLIST.toInt()]) { - when (blacklistEntry.size) { - // There is one entry. - 3 -> if (currentDomain!!.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) - } - - // There are two entries. - 4 -> if (currentDomain!!.endsWith(blacklistEntry[0]) && resourceUrl.contains(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) - } - } - } - - // Third-party domain initial blacklist. - for (blacklistEntry in blocklist[THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST.toInt()]) { - when (blacklistEntry.size) { - // There is one entry. - 3 -> if (currentDomain!!.endsWith(blacklistEntry[0]) && resourceUrl.startsWith(blacklistEntry[1])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n", blacklistEntry[2]) - } - - // There are two entries. - 4 -> if (currentDomain!!.endsWith(blacklistEntry[0]) && resourceUrl.startsWith(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}", blacklistEntry[3]) - } - - // There are three entries. - 5 -> if (currentDomain!!.endsWith(blacklistEntry[0]) && resourceUrl.startsWith(blacklistEntry[1]) && resourceUrl.contains(blacklistEntry[2]) && resourceUrl.contains(blacklistEntry[3])) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_INITIAL_BLACKLIST, - "${blacklistEntry[0]}\n${blacklistEntry[1]}\n${blacklistEntry[2]}\n${blacklistEntry[3]}", blacklistEntry[4]) - } - } - } - - // Third-party regular expression blacklist. - for (blacklistEntry in blocklist[THIRD_PARTY_REGULAR_EXPRESSION_BLACKLIST.toInt()]) { - if (Pattern.matches(blacklistEntry[0], resourceUrl)) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_REGULAR_EXPRESSION_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) - } - } - - // Third-party domain regular expression blacklist. - for (blacklistEntry in blocklist[THIRD_PARTY_DOMAIN_REGULAR_EXPRESSION_BLACKLIST.toInt()]) { - if (currentDomain!!.endsWith(blacklistEntry[0]) && Pattern.matches(blacklistEntry[1], resourceUrl)) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, THIRD_PARTY_DOMAIN_REGULAR_EXPRESSION_BLACKLIST, "${blacklistEntry[0]}\n${blacklistEntry[1]}", blacklistEntry[2]) - } - } - } - - // Regular expression blacklist. - for (blacklistEntry in blocklist[REGULAR_EXPRESSION_BLACKLIST.toInt()]) { - if (Pattern.matches(blacklistEntry[0], resourceUrl)) { - // Return a blacklist match request blocked. - return arrayOf(REQUEST_BLOCKED, resourceUrl, blocklistName, REGULAR_EXPRESSION_BLACKLIST, blacklistEntry[0], blacklistEntry[1]) - } - } - - // Return a no match request default. - return arrayOf(REQUEST_DEFAULT) - } } diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index cec5571b..a76bbdab 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -368,8 +368,8 @@ Экспорт Импорт Расшифровать - Privacy Browser Android %1$s Настройки - Schema %2$d.pbs - Privacy Browser Android %1$s Настройки - Schema %2$d.pbs.aes + Privacy Browser Android %1$s Настройки - Схема %2$d.pbs + Privacy Browser Android %1$s Настройки - Схема %2$d.pbs.aes Экспорт выполнен. Сбой при экспорте:\u0020 %1$s Сбой при импорте:\u0020 %1$s -- 2.45.2