From 9d55978063947d5865bb3fa4e0c2ebef78f78812 Mon Sep 17 00:00:00 2001 From: Guillaume Jacquart Date: Mon, 6 Nov 2023 08:14:27 +0000 Subject: epic18: Manage VPN services for Tor or Tracker control --- trackersservicee/.gitignore | 1 - trackersservicee/build.gradle | 40 -------- trackersservicee/consumer-rules.pro | 0 trackersservicee/proguard-rules.pro | 21 ----- trackersservicee/src/main/AndroidManifest.xml | 35 ------- .../advancedprivacy/trackers/service/DNSBlocker.kt | 104 --------------------- .../trackers/service/TrackersService.kt | 58 ------------ .../service/TrackersServiceSupervisorImpl.kt | 53 ----------- 8 files changed, 312 deletions(-) delete mode 100644 trackersservicee/.gitignore delete mode 100644 trackersservicee/build.gradle delete mode 100644 trackersservicee/consumer-rules.pro delete mode 100644 trackersservicee/proguard-rules.pro delete mode 100644 trackersservicee/src/main/AndroidManifest.xml delete mode 100644 trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/DNSBlocker.kt delete mode 100644 trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt delete mode 100644 trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersServiceSupervisorImpl.kt (limited to 'trackersservicee') diff --git a/trackersservicee/.gitignore b/trackersservicee/.gitignore deleted file mode 100644 index 42afabf..0000000 --- a/trackersservicee/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/trackersservicee/build.gradle b/trackersservicee/build.gradle deleted file mode 100644 index e93d5d6..0000000 --- a/trackersservicee/build.gradle +++ /dev/null @@ -1,40 +0,0 @@ -plugins { - id 'com.android.library' - id 'org.jetbrains.kotlin.android' -} - -android { - namespace 'foundation.e.advancedprivacy.trackers.service' - compileSdkVersion buildConfig.compileSdk - - defaultConfig { - minSdkVersion buildConfig.minSdk - targetSdkVersion buildConfig.targetSdk - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - kotlinOptions { - jvmTarget = '1.8' - } -} - -dependencies { - implementation project(":core") - implementation project(":trackers") - - implementation( - libs.androidx.core.ktx, - libs.bundles.koin, - libs.kotlinx.coroutines, - libs.timber, - ) -} diff --git a/trackersservicee/consumer-rules.pro b/trackersservicee/consumer-rules.pro deleted file mode 100644 index e69de29..0000000 diff --git a/trackersservicee/proguard-rules.pro b/trackersservicee/proguard-rules.pro deleted file mode 100644 index 481bb43..0000000 --- a/trackersservicee/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/trackersservicee/src/main/AndroidManifest.xml b/trackersservicee/src/main/AndroidManifest.xml deleted file mode 100644 index 2290432..0000000 --- a/trackersservicee/src/main/AndroidManifest.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/DNSBlocker.kt b/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/DNSBlocker.kt deleted file mode 100644 index 6a2b218..0000000 --- a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/DNSBlocker.kt +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2023 MURENA SAS - * Copyright (C) 2022 E FOUNDATION - * - * This program 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. - * - * This program 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 this program. If not, see . - */ - -package foundation.e.advancedprivacy.trackers.service - -import android.net.LocalServerSocket -import android.system.ErrnoException -import android.system.Os -import android.system.OsConstants -import foundation.e.advancedprivacy.core.utils.runSuspendCatching -import foundation.e.advancedprivacy.trackers.domain.usecases.FilterHostnameUseCase -import kotlinx.coroutines.CancellationException -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.isActive -import kotlinx.coroutines.launch -import timber.log.Timber -import java.io.BufferedReader -import java.io.InputStreamReader -import java.io.PrintWriter - -class DNSBlocker( - val filterHostnameUseCase: FilterHostnameUseCase -) { - private var resolverReceiver: LocalServerSocket? = null - - companion object { - private const val SOCKET_NAME = "foundation.e.advancedprivacy" - } - - private fun closeSocket() { - // Known bug and workaround that LocalServerSocket::close is not working well - // https://issuetracker.google.com/issues/36945762 - if (resolverReceiver != null) { - try { - Os.shutdown(resolverReceiver!!.fileDescriptor, OsConstants.SHUT_RDWR) - resolverReceiver!!.close() - resolverReceiver = null - } catch (e: ErrnoException) { - if (e.errno != OsConstants.EBADF) { - Timber.w("Socket already closed") - } else { - Timber.e(e, "Exception: cannot close DNS port on stop $SOCKET_NAME !") - } - } catch (e: Exception) { - Timber.e(e, "Exception: cannot close DNS port on stop $SOCKET_NAME !") - } - } - } - - fun listenJob(scope: CoroutineScope): Job = scope.launch(Dispatchers.IO) { - val resolverReceiver = runSuspendCatching { - LocalServerSocket(SOCKET_NAME) - }.getOrElse { - Timber.e(it, "Exception: cannot open DNS port on $SOCKET_NAME") - return@launch - } - - this@DNSBlocker.resolverReceiver = resolverReceiver - Timber.d("DNSFilterProxy running on port $SOCKET_NAME") - - while (isActive) { - runSuspendCatching { - val socket = resolverReceiver.accept() - val reader = BufferedReader(InputStreamReader(socket.inputStream)) - val line = reader.readLine() - val params = line.split(",").toTypedArray() - val output = socket.outputStream - val writer = PrintWriter(output, true) - val domainName = params[0] - val appUid = params[1].toInt() - if (filterHostnameUseCase.shouldBlock(domainName, appUid)) { - writer.println("block") - } else { - writer.println("pass") - } - socket.close() - }.onFailure { - if (it is CancellationException) { - closeSocket() - throw it - } else { - Timber.w(it, "Exception while listening DNS resolver") - } - } - } - } -} diff --git a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt b/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt deleted file mode 100644 index 5f573b0..0000000 --- a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2023 MURENA SAS - * Copyright (C) 2021 E FOUNDATION - * - * This program 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. - * - * This program 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 this program. If not, see . - */ -package foundation.e.advancedprivacy.trackers.service - -import android.app.Service -import android.content.Intent -import android.os.IBinder -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.cancel -import org.koin.java.KoinJavaComponent.get - -class TrackersService : Service() { - companion object { - const val ACTION_START = "foundation.e.privacymodules.trackers.intent.action.START" - - var coroutineScope = CoroutineScope(Dispatchers.IO) - } - - override fun onBind(intent: Intent): IBinder? { - throw UnsupportedOperationException("Not yet implemented") - } - - override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - if (ACTION_START == intent?.action) { - stop() - start() - } - return START_REDELIVER_INTENT - } - - private fun start() { - coroutineScope = CoroutineScope(Dispatchers.IO) - get(DNSBlocker::class.java).apply { - filterHostnameUseCase.writeLogJob(coroutineScope) - listenJob(coroutineScope) - } - } - - private fun stop() { - kotlin.runCatching { coroutineScope.cancel() } - } -} diff --git a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersServiceSupervisorImpl.kt b/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersServiceSupervisorImpl.kt deleted file mode 100644 index dcdf0d4..0000000 --- a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersServiceSupervisorImpl.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 MURENA SAS - * - * This program 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. - * - * This program 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 this program. If not, see . - */ -package foundation.e.advancedprivacy.trackers.service - -import android.content.Context -import android.content.Intent -import foundation.e.advancedprivacy.trackers.domain.externalinterfaces.TrackersServiceSupervisor -import foundation.e.advancedprivacy.trackers.service.TrackersService.Companion.ACTION_START -import kotlinx.coroutines.isActive -import org.koin.core.module.dsl.bind -import org.koin.core.module.dsl.factoryOf -import org.koin.core.module.dsl.singleOf -import org.koin.dsl.module - -class TrackersServiceSupervisorImpl(private val context: Context) : TrackersServiceSupervisor { - - override fun start(): Boolean { - val intent = Intent(context, TrackersService::class.java) - intent.action = ACTION_START - return context.startService(intent) != null - } - - override fun stop(): Boolean { - return context.stopService(Intent(context, TrackersService::class.java)) - } - - override fun isRunning(): Boolean { - return TrackersService.coroutineScope.isActive - } - - override val dnsFilterForIpScrambling = null -} - -val trackerServiceModule = module { - factoryOf(::DNSBlocker) - singleOf(::TrackersServiceSupervisorImpl) { - bind() - } -} -- cgit v1.2.1