diff --git a/app/build.gradle b/app/build.gradle deleted file mode 100644 index c6c5d7d..0000000 --- a/app/build.gradle +++ /dev/null @@ -1,237 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - id "com.google.devtools.ksp" - id "androidx.navigation.safeargs" - id "com.google.protobuf" version "0.9.0" - id "org.jetbrains.kotlin.plugin.serialization" version "1.8.21" - id "com.google.dagger.hilt.android" -} - -kotlin { - jvmToolchain(11) -} - -android { - namespace "de.tomcory.heimdall" - - defaultConfig { - applicationId "de.tomcory.heimdall" - - minSdk 28 - compileSdk 34 - targetSdk 34 - - versionCode 1 - versionName "0.1" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - - vectorDrawables { - useSupportLibrary true - } - - /*def secureProps = new Properties() - if (file("../secure.properties").exists()) { - file("../secure.properties")?.withInputStream { secureProps.load(it) } - } - resValue "string", "maps_api_key", (secureProps.getProperty("EXAMPLE") ?: "")*/ - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" - } - } - - // Enables data binding. - buildFeatures { - //noinspection DataBindingWithoutKapt - dataBinding true - viewBinding true - compose true - } - - compileOptions { - def javaVersion = JavaVersion.VERSION_11 - sourceCompatibility = javaVersion - targetCompatibility = javaVersion - } - - kotlinOptions { - // make sure that this matches the Java version used for compilation! - jvmTarget = "11" - } - - testOptions { - unitTests.includeAndroidResources = true - } - - dependenciesInfo { - includeInApk false - includeInBundle false - } - - composeOptions { - kotlinCompilerExtensionVersion "$compose_compiler_version" - } - - // configure protobuf for the datastore - sourceSets { - main { - proto { - srcDir "src/main/proto/proto" // default value - } - } - main.java.srcDirs += "src/main/proto" - } - - // netty stuff below - ndkVersion = "21.0.6113669" - packagingOptions { - resources { - excludes += ["META-INF/INDEX.LIST", "META-INF/io.netty.versions.properties"] - } - } - compileSdk 34 - configurations.configureEach { - resolutionStrategy { - force "io.netty:netty-all:4.1.58.Final" - } - } -} - -protobuf { - protoc { - artifact = "com.google.protobuf:protoc:3.25.0" - } - - // Generates the java protobuf-lite code for the Protobuffers in this project. See - // https://github.com/google/protobuf-gradle-plugin#customizing-protobuf-compilation - // for more information. - generateProtoTasks { - all().each { task -> - task.builtins { - java { - option "lite" - } - } - } - } -} - -ext { - lifecycle_version = "2.6.2" - test_version = "1.5.0" - room_version = "2.6.0" - compose_version = "1.5.4" - compose_m3_version = "1.2.0-alpha10" - compose_accompanist_version = "0.29.0-alpha" - vico_version = "1.12.0" - pcap4j_version = "1.7.6" - retrofit_version = "2.9.0" - bouncycastle_version = "1.69" -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - - // AndroidX compatibility library - implementation "androidx.legacy:legacy-support-v4:1.0.0" - implementation "androidx.appcompat:appcompat:1.6.1" - implementation "androidx.constraintlayout:constraintlayout:2.1.4" - implementation "androidx.preference:preference-ktx:1.2.1" - implementation "androidx.palette:palette-ktx:1.0.0" - - // AndroidX Lifecycle Components - implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" - implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" - implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" - implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" - - // Hilt dependency injection - implementation "com.google.dagger:hilt-android:$hilt_version" - ksp "com.google.dagger:dagger-compiler:$hilt_version" - ksp "com.google.dagger:hilt-compiler:$hilt_version" - - // Jetpack Compose Base - implementation "androidx.activity:activity-compose:1.8.0" - implementation "androidx.compose.ui:ui:$compose_version" - implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" - debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" - debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version" - androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" - - // Jetpack Compose Material 3 - implementation "androidx.compose.material3:material3:$compose_m3_version" - implementation "androidx.compose.material3:material3-window-size-class:$compose_m3_version" - - // Jetpack Compose Addons - implementation "com.google.accompanist:accompanist-drawablepainter:$compose_accompanist_version" - implementation "com.google.accompanist:accompanist-systemuicontroller:$compose_accompanist_version" - - // Jetpack DataStore - implementation "androidx.datastore:datastore:1.0.0" - implementation "com.google.protobuf:protobuf-javalite:3.21.12" - - // Vico Charts for Jetpack Compose https://github.com/patrykandpatrick/vico - implementation("com.patrykandpatrick.vico:compose:$vico_version") - implementation("com.patrykandpatrick.vico:compose-m3:$vico_version") - implementation("com.patrykandpatrick.vico:core:$vico_version") - - // Kotlin serialisation - implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0" - - // Room dependencies - implementation "androidx.room:room-runtime:$room_version" - implementation "androidx.room:room-ktx:$room_version" - ksp "androidx.room:room-compiler:$room_version" - - // Navigation - implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" - implementation "androidx.navigation:navigation-ui-ktx:$nav_version" - implementation "androidx.navigation:navigation-compose:$nav_version" - - // Retrofit - implementation "com.squareup.retrofit2:retrofit:$retrofit_version" - implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version" - - // OpenCSV library - implementation "com.opencsv:opencsv:5.6" - - // pcap4j - implementation "org.pcap4j:pcap4j-core:$pcap4j_version" - implementation "org.pcap4j:pcap4j-packetfactory-static:$pcap4j_version" - - // Dex analyser used to detect tracker libraries in apps - implementation "com.github.lanchon.dexpatcher:multidexlib2:2.3.4.r2" - implementation "net.dongliu:apk-parser:2.6.10" - - // various UI libraries - implementation "com.github.PhilJay:MPAndroidChart:v3.1.0" - - // Timber - implementation "com.jakewharton.timber:timber:4.7.1" - - // BouncyCastle and Littleshoot - implementation "org.bouncycastle:bcprov-jdk15on:$bouncycastle_version" - implementation "org.bouncycastle:bcpkix-jdk15on:$bouncycastle_version" - implementation ("org.littleshoot:dnssec4j:0.1.6") { exclude group: "org.slf4j" } - implementation "commons-io:commons-io:2.6" - implementation group: "io.netty", name: "netty-all", version: "4.1.58.Final" - implementation "com.squareup.okhttp3:okhttp:5.0.0-alpha.2" - implementation ("net.lightbody.bmp:mitm:2.1.5") { exclude group: "org.slf4j"} - implementation group: "com.jcraft", name: "jzlib", version: "1.1.3" - implementation "com.google.guava:guava:24.1-jre" - - // test stuff - testImplementation "junit:junit:4.13.2" - androidTestImplementation "androidx.test.ext:junit:1.1.5" - androidTestImplementation "androidx.test:core:$test_version" - androidTestImplementation "androidx.test:runner:$test_version" - androidTestImplementation "androidx.test:rules:$test_version" - androidTestImplementation "androidx.test.espresso:espresso-core:3.5.1" - testImplementation "org.robolectric:robolectric:4.8" -} \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..796ad6a --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,171 @@ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + id ("com.android.application") + id ("org.jetbrains.kotlin.android") + alias (libs.plugins.protobuf) + alias (libs.plugins.ksp) + alias (libs.plugins.kotlin.serialization) + alias (libs.plugins.hilt) +} + +kotlin { + jvmToolchain (11) +} + +android { + namespace = "de.tomcory.heimdall" + + defaultConfig { + applicationId = "de.tomcory.heimdall" + minSdk = 28 + compileSdk = 34 + targetSdk = 34 + + versionCode = 1 + versionName = "0.1" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + + vectorDrawables { + useSupportLibrary = true + } + + /* val secureProps = Properties() + val securePropsFile = file("../secure.properties") + if (securePropsFile.exists()) { + secureProps.load(securePropsFile.inputStream()) + } + resValue("string", "maps_api_key", secureProps.getProperty("EXAMPLE", "")) */ + } + + buildTypes { + getByName("release") { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + + buildFeatures { + compose = true + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = "11" + } + + testOptions { + unitTests.isIncludeAndroidResources = true + } + + dependenciesInfo { + includeInApk = false + includeInBundle = false + } + + composeOptions { + kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() + } + + ndkVersion = "21.0.6113669" +} + +dependencies { + implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) + + // AndroidX compatibility library + implementation (libs.androidx.legacy.support.v4) + implementation (libs.androidx.appcompat) + implementation (libs.androidx.constraintlayout) + implementation (libs.androidx.preference.ktx) + implementation (libs.androidx.palette.ktx) + + // AndroidX Lifecycle Components + implementation (libs.lifecycle.livedata.ktx) + implementation (libs.lifecycle.viewmodel.ktx) + implementation (libs.lifecycle.runtime.ktx) + implementation (libs.lifecycle.common.java8) + implementation (libs.lifecycle.runtime.compose) + + // Jetpack Compose Base + implementation (libs.activity.compose) + implementation (libs.androidx.ui) + implementation (libs.androidx.ui.tooling.preview) + debugImplementation (libs.androidx.ui.tooling) + debugImplementation (libs.ui.test.manifest) + androidTestImplementation (libs.ui.test.junit4) + + // Jetpack Compose Material 3 + implementation (libs.androidx.compose.material3) + implementation (libs.androidx.compose.material3.windowsizeclass) + + // Jetpack Compose Addons + implementation (libs.accompanist.drawablepainter) + implementation (libs.accompanist.systemuicontroller) + + // Jetpack DataStore TODO: REFACTOR ACCESS TO ENABLE DEPENDENCY REMOVAL + implementation (libs.androidx.datastore) + implementation (libs.protobuf.javalite) + + // Hilt dependency injection + implementation (libs.hilt.android) + ksp (libs.dagger.compiler) + ksp (libs.hilt.compiler) + implementation (libs.androidx.hilt.navigation.compose) + + // Vico Charts for Jetpack Compose https://github.com/patrykandpatrick/vico + implementation (libs.vico.compose) + implementation (libs.vico.composem3) + implementation (libs.vico.core) + + // Kotlin serialisation + implementation (libs.kotlinx.serialization.json) + + // Room dependencies + implementation (libs.androidx.room.runtime) + implementation (libs.androidx.room.ktx) + ksp (libs.androidx.room.compiler) + + // Navigation + implementation (libs.androidx.navigation.fragment.ktx) + implementation (libs.androidx.navigation.ui.ktx) + implementation (libs.androidx.navigation.compose) + + // Dex analyser used to detect tracker libraries in apps + implementation (libs.multidexlib2) + implementation (libs.apk.parser) + + // various UI libraries + implementation (libs.mpAndroidChart) + + // Timber + implementation (libs.timber) + + // test stuff + testImplementation (libs.junit) + androidTestImplementation (libs.androidx.test.junit) + androidTestImplementation (libs.androidx.test.core) + androidTestImplementation (libs.androidx.test.runner) + androidTestImplementation (libs.androidx.test.rules) + androidTestImplementation (libs.androidx.espresso.core) + testImplementation (libs.robolectric) + + // project modules + implementation (project(":core:database")) + implementation (project(":core:datastore")) + implementation (project(":core:export")) + implementation (project(":core:proxy")) + implementation (project(":core:scanner")) + implementation (project(":core:util")) + implementation (project(":core:vpn")) +} + +afterEvaluate { + tasks.named("kspDebugKotlin") { + mustRunAfter(":app:generateDebugProto") + } +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 3ffe372..9921b3a 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,6 +1,6 @@ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. +# proguardFiles setting in build.gradle.kts. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4ed5f4e..1d564cf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -41,7 +41,7 @@ @@ -50,13 +50,13 @@ diff --git a/app/src/main/java/de/tomcory/heimdall/application/AppModule.kt b/app/src/main/java/de/tomcory/heimdall/application/AppModule.kt new file mode 100644 index 0000000..89584a7 --- /dev/null +++ b/app/src/main/java/de/tomcory/heimdall/application/AppModule.kt @@ -0,0 +1,41 @@ +package de.tomcory.heimdall.application + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.dataStore +import androidx.room.Room +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import de.tomcory.heimdall.Preferences +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.datastore.PreferencesSerializer +import de.tomcory.heimdall.ui.scanner.traffic.TrafficScannerRepository +import javax.inject.Singleton + +val Context.preferencesStore: DataStore by dataStore( + fileName = "proto/preferences.proto", + serializer = PreferencesSerializer +) + +@Module +@InstallIn(SingletonComponent::class) +object AppModule { + + @Singleton + @Provides + fun provideHeimdallDatabase(@ApplicationContext context: Context): HeimdallDatabase { + return Room.databaseBuilder( + context, + HeimdallDatabase::class.java, "heimdall" + ).fallbackToDestructiveMigration().build() + } + + @Singleton + @Provides + fun provideTrafficScannerRepository(datastore: DataStore, database: HeimdallDatabase): TrafficScannerRepository { + return TrafficScannerRepository(datastore, database) + } +} \ No newline at end of file diff --git a/app/src/main/java/de/tomcory/heimdall/application/HeimdallApplication.kt b/app/src/main/java/de/tomcory/heimdall/application/HeimdallApplication.kt index b2d6079..03ad7bf 100644 --- a/app/src/main/java/de/tomcory/heimdall/application/HeimdallApplication.kt +++ b/app/src/main/java/de/tomcory/heimdall/application/HeimdallApplication.kt @@ -6,7 +6,7 @@ import android.app.NotificationManager import android.os.Build import dagger.hilt.android.HiltAndroidApp import de.tomcory.heimdall.R -import de.tomcory.heimdall.persistence.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.HeimdallDatabase import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/VpnStats.java b/app/src/main/java/de/tomcory/heimdall/persistence/VpnStats.java deleted file mode 100644 index e74b926..0000000 --- a/app/src/main/java/de/tomcory/heimdall/persistence/VpnStats.java +++ /dev/null @@ -1,119 +0,0 @@ -package de.tomcory.heimdall.persistence; - -import android.content.Context; -import android.content.SharedPreferences; - -import androidx.preference.PreferenceManager; - -public class VpnStats { - - //the singleton - private static VpnStats instance = new VpnStats(); - - private boolean initalised = false; - - private long initialConnections = 0; - private long initialPackets = 0; - private long initialBytesOut = 0; - private long initialBytesIn = 0; - - private long sessionConnections = 0; - private long sessionPackets = 0; - private long sessionBytesOut = 0; - private long sessionBytesIn = 0; - - public static synchronized void initialise(Context context) { - if(!instance.initalised) { - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); - instance.initialConnections = sharedPreferences.getLong("total_connections", 0); - instance.initialPackets = sharedPreferences.getLong("total_packets", 0); - instance.initialBytesOut = sharedPreferences.getLong("total_bytes_out", 0); - instance.initialBytesIn = sharedPreferences.getLong("total_bytes_in", 0); - - instance.initalised = true; - } - } - - public static synchronized void close(Context context) { - if(instance.initalised) { - - instance.initialConnections += instance.sessionConnections; - instance.initialPackets += instance.sessionPackets; - instance.initialBytesOut += instance.sessionBytesOut; - instance.initialBytesIn += instance.sessionBytesIn; - - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); - sharedPreferences.edit() - .putLong("total_connections", instance.initialConnections) - .putLong("total_packets", instance.initialPackets) - .putLong("total_bytes_out", instance.initialBytesOut) - .putLong("total_bytes_in", instance.initialBytesIn) - .apply(); - - instance.sessionConnections = 0; - instance.sessionPackets = 0; - instance.sessionBytesOut = 0; - instance.sessionBytesIn = 0; - - instance.initalised = false; - } - } - - public static synchronized long getTotalConnections() { - return instance.initialConnections + instance.sessionConnections; - } - - public static synchronized long getTotalPackets() { - return instance.initialPackets + instance.sessionPackets; - } - - public static synchronized long getTotalBytesIn() { - return instance.initialBytesIn + instance.sessionBytesIn; - } - - public static synchronized long getTotalBytesOut() { - return instance.initialBytesOut + instance.sessionBytesOut; - } - - public static synchronized long getSessionConnections() { - return instance.sessionConnections; - } - - public static synchronized long getSessionPackets() { - return instance.sessionPackets; - } - - public static synchronized long getSessionBytesIn() { - return instance.sessionBytesIn; - } - - public static long getSessionBytesOut() { - return instance.sessionBytesOut; - } - - public static synchronized void increaseSessionConnections(int amount) { - instance.sessionConnections += amount; - } - - public static synchronized void increaseSessionPackets(int amount) { - instance.sessionPackets += amount; - } - - public static synchronized void increaseSessionBytesIn(int amount) { - instance.sessionBytesIn += amount; - } - - public static synchronized void increaseSessionBytesOut(int amount) { - instance.sessionBytesOut += amount; - } - - public static void increaseSessionStatsOut(byte[] packet) { - increaseSessionBytesOut(packet.length); - increaseSessionPackets(1); - } - - public static void increaseSessionStatsIn(byte[] packet) { - increaseSessionBytesIn(packet.length); - increaseSessionPackets(1); - } -} diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/datastore/PreferencesSerializer.kt b/app/src/main/java/de/tomcory/heimdall/persistence/datastore/PreferencesSerializer.kt deleted file mode 100644 index 81907c8..0000000 --- a/app/src/main/java/de/tomcory/heimdall/persistence/datastore/PreferencesSerializer.kt +++ /dev/null @@ -1,38 +0,0 @@ -package de.tomcory.heimdall.persistence.datastore - -import androidx.datastore.core.CorruptionException -import androidx.datastore.core.Serializer -import com.google.protobuf.InvalidProtocolBufferException -import de.tomcory.heimdall.Preferences -import timber.log.Timber -import java.io.InputStream -import java.io.OutputStream - -object PreferencesSerializer : Serializer { - override val defaultValue: Preferences = Preferences.newBuilder() - .setVpnDnsServer("1.1.1.1") - .setVpnBaseAddress("10.120.0.1/32") - .setVpnRoute("0.0.0.0/0") - .setVpnProxyAddress("127.0.0.1:9090") - .addVpnBlacklistedApps("de.tomcory.heimdall") - .setScanEnable(true) - .setScanPermissionScannerEnable(true) - .setScanLibraryScannerEnable(true) - .setScanLibraryScannerPrepopulate(true) - .build() - - override suspend fun readFrom(input: InputStream): Preferences { - try { - val t = Preferences.parseFrom(input) - Timber.w("Reading from DataStore:\n%s", t.toString()) - return t - } catch (exception: InvalidProtocolBufferException) { - throw CorruptionException("Cannot read proto.", exception) - } - } - - override suspend fun writeTo(t: Preferences, output: OutputStream) { - Timber.w("Writing to DataStore:\n%s", t.toString()) - t.writeTo(output) - } -} \ No newline at end of file diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/cache/DnsCache.kt b/app/src/main/java/de/tomcory/heimdall/scanner/traffic/cache/DnsCache.kt deleted file mode 100644 index de70b6f..0000000 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/cache/DnsCache.kt +++ /dev/null @@ -1,28 +0,0 @@ -package de.tomcory.heimdall.scanner.traffic.cache - -import java.util.LinkedHashMap - -class DnsCache { - private val hosts: LinkedHashMap = object : LinkedHashMap( - de.tomcory.heimdall.scanner.traffic.cache.DnsCache.Companion.MAX_SIZE - ) { - override fun removeEldestEntry(eldest: Map.Entry): Boolean { - return size >= de.tomcory.heimdall.scanner.traffic.cache.DnsCache.Companion.MAX_SIZE - } - } - - companion object { - private const val MAX_SIZE = 128 - - //the singleton - private val cache = de.tomcory.heimdall.scanner.traffic.cache.DnsCache() - @JvmStatic - fun findHost(ipAddress: String): String? { - return de.tomcory.heimdall.scanner.traffic.cache.DnsCache.Companion.cache.hosts[ipAddress] - } - - fun addHost(ipAddress: String, hostname: String) { - de.tomcory.heimdall.scanner.traffic.cache.DnsCache.Companion.cache.hosts[ipAddress] = hostname - } - } -} \ No newline at end of file diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/code/HeimdallBroadcastReceiver.kt b/app/src/main/java/de/tomcory/heimdall/service/HeimdallBroadcastReceiver.kt similarity index 89% rename from app/src/main/java/de/tomcory/heimdall/scanner/code/HeimdallBroadcastReceiver.kt rename to app/src/main/java/de/tomcory/heimdall/service/HeimdallBroadcastReceiver.kt index e07b4f7..506f3c0 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/code/HeimdallBroadcastReceiver.kt +++ b/app/src/main/java/de/tomcory/heimdall/service/HeimdallBroadcastReceiver.kt @@ -1,9 +1,10 @@ -package de.tomcory.heimdall.scanner.code +package de.tomcory.heimdall.service import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import de.tomcory.heimdall.persistence.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.scanner.ScanManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/HeimdallVpnService.kt b/app/src/main/java/de/tomcory/heimdall/service/HeimdallVpnService.kt similarity index 94% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/HeimdallVpnService.kt rename to app/src/main/java/de/tomcory/heimdall/service/HeimdallVpnService.kt index bf930d7..c1a55f7 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/HeimdallVpnService.kt +++ b/app/src/main/java/de/tomcory/heimdall/service/HeimdallVpnService.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.components +package de.tomcory.heimdall.service import android.annotation.SuppressLint import android.app.Notification @@ -13,12 +13,12 @@ import androidx.core.app.NotificationCompat import androidx.preference.PreferenceManager import de.tomcory.heimdall.R import de.tomcory.heimdall.application.HeimdallApplication -import de.tomcory.heimdall.persistence.VpnStats -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.Session +import de.tomcory.heimdall.application.preferencesStore +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.entity.Session import de.tomcory.heimdall.ui.main.MainActivity -import de.tomcory.heimdall.ui.main.preferencesStore -import de.tomcory.heimdall.scanner.traffic.mitm.VpnComponentLaunchException +import de.tomcory.heimdall.core.vpn.components.ComponentManager +import de.tomcory.heimdall.core.vpn.mitm.VpnComponentLaunchException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.first @@ -120,10 +120,6 @@ class HeimdallVpnService : VpnService() { val dataStore = applicationContext.preferencesStore val doMitm = dataStore.data.first().mitmEnable - // (re)initialise the Statistics singleton - VpnStats.initialise(applicationContext) - Timber.d("VpnStats initialised") - // establish the VPN interface if (!establishInterface(useProxy)) { Timber.e("Unable to establish interface") @@ -292,9 +288,6 @@ class HeimdallVpnService : VpnService() { Timber.e(e, "Error closing FileDescriptor") } - // persist and reset the Statistics singleton - VpnStats.close(applicationContext) - HeimdallDatabase.instance?.sessionDao?.updateEndTime(sessionId, System.currentTimeMillis()) // set the flag to signal that the VPN components are no longer active diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/NotificationIntentService.java b/app/src/main/java/de/tomcory/heimdall/service/NotificationIntentService.java similarity index 95% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/NotificationIntentService.java rename to app/src/main/java/de/tomcory/heimdall/service/NotificationIntentService.java index 201a328..bd4ceae 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/NotificationIntentService.java +++ b/app/src/main/java/de/tomcory/heimdall/service/NotificationIntentService.java @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.components; +package de.tomcory.heimdall.service; import android.app.IntentService; import android.content.Intent; diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/code/ScanService.kt b/app/src/main/java/de/tomcory/heimdall/service/ScanService.kt similarity index 90% rename from app/src/main/java/de/tomcory/heimdall/scanner/code/ScanService.kt rename to app/src/main/java/de/tomcory/heimdall/service/ScanService.kt index 5b8bb3a..9e40835 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/code/ScanService.kt +++ b/app/src/main/java/de/tomcory/heimdall/service/ScanService.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.code +package de.tomcory.heimdall.service import android.app.Service import android.content.Intent @@ -7,6 +7,7 @@ import android.os.IBinder import androidx.core.app.NotificationCompat import de.tomcory.heimdall.R import de.tomcory.heimdall.application.HeimdallApplication +import de.tomcory.heimdall.core.scanner.ScanManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -37,7 +38,7 @@ class ScanService : Service() { CoroutineScope(Dispatchers.IO).launch { broadcastReceiver = HeimdallBroadcastReceiver( - scanManager = ScanManager.create(context = this@ScanService) + scanManager = de.tomcory.heimdall.core.scanner.ScanManager.create(context = this@ScanService) ) val filter = IntentFilter() diff --git a/app/src/main/java/de/tomcory/heimdall/ui/apps/Apps.kt b/app/src/main/java/de/tomcory/heimdall/ui/apps/Apps.kt index 68f4889..7946dad 100644 --- a/app/src/main/java/de/tomcory/heimdall/ui/apps/Apps.kt +++ b/app/src/main/java/de/tomcory/heimdall/ui/apps/Apps.kt @@ -7,6 +7,7 @@ import androidx.compose.animation.animateColorAsState import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.foundation.Image +import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn @@ -19,6 +20,7 @@ import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.ColorMatrix import androidx.compose.ui.platform.LocalContext @@ -35,22 +37,24 @@ import androidx.compose.ui.window.DialogProperties import androidx.navigation.NavHostController import com.google.accompanist.drawablepainter.rememberDrawablePainter import de.tomcory.heimdall.R -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.App -import de.tomcory.heimdall.scanner.code.ScanManager +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.entity.App import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @Composable -fun AppInfoList(paddingValues: PaddingValues, apps: List) { - LazyColumn(modifier = Modifier.padding(paddingValues)) { +fun AppInfoList(apps: List) { + LazyColumn(modifier = Modifier + .background(Color.Transparent)) { items(apps) { var showAppDetailDialog by remember { mutableStateOf(false) } AppListItem( app = it, - modifier = Modifier.clickable { - showAppDetailDialog = true - } + modifier = Modifier + .clickable { + showAppDetailDialog = true + } + .background(Color.Transparent) ) if(showAppDetailDialog) { @@ -68,6 +72,7 @@ fun AppInfoList(paddingValues: PaddingValues, apps: List) { @Composable fun AppListItem(app: App, modifier: Modifier) { ListItem( + colors = ListItemDefaults.colors(containerColor = Color.Transparent), headlineContent = { if(!app.isInstalled) { StrikethroughText(text = app.label) @@ -127,21 +132,17 @@ fun AppsScreen(navController: NavHostController?) { loadingApps = false }) - Scaffold( - topBar = { - AppsTopBar() - } - ) { - AnimatedVisibility(visible = loadingApps, enter = fadeIn(), exit = fadeOut()) { - Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, modifier = Modifier.fillMaxSize()) { - CircularProgressIndicator() - Text(text = "Loading apps...") - } + AnimatedVisibility(visible = loadingApps, enter = fadeIn(), exit = fadeOut()) { + Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, modifier = Modifier + .fillMaxSize() + .background(Color.Transparent)) { + CircularProgressIndicator(color = Color(0xff8fdaff)) + Text(text = "Loading apps...", color = Color.White) } + } - AnimatedVisibility(visible = !loadingApps, enter = fadeIn(), exit = fadeOut()) { - AppInfoList(it, apps = apps) - } + AnimatedVisibility(visible = !loadingApps, enter = fadeIn(), exit = fadeOut()) { + AppInfoList(apps = apps) } } @@ -248,7 +249,7 @@ suspend fun getApps(context: Context): List = withContext(Dispatchers.IO) { val apps = HeimdallDatabase.instance?.appDao?.getAll() ?: listOf() apps.forEach { if(it.icon == null && it.isInstalled) { - it.icon = ScanManager.getAppIcon(context, it.packageName) + it.icon = de.tomcory.heimdall.core.scanner.ScanManager.getAppIcon(context, it.packageName) } } return@withContext apps diff --git a/app/src/main/java/de/tomcory/heimdall/ui/apps/LibraryCard.kt b/app/src/main/java/de/tomcory/heimdall/ui/apps/LibraryCard.kt index 6572595..533a110 100644 --- a/app/src/main/java/de/tomcory/heimdall/ui/apps/LibraryCard.kt +++ b/app/src/main/java/de/tomcory/heimdall/ui/apps/LibraryCard.kt @@ -12,10 +12,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.core.content.ContextCompat.startActivity -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.Tracker +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.entity.Tracker -@OptIn(ExperimentalMaterial3Api::class) @Composable fun LibraryCard(pkgInfo: PackageInfo) { diff --git a/app/src/main/java/de/tomcory/heimdall/ui/database/DatabaseScreen.kt b/app/src/main/java/de/tomcory/heimdall/ui/database/DatabaseScreen.kt index f6d8120..2648a04 100644 --- a/app/src/main/java/de/tomcory/heimdall/ui/database/DatabaseScreen.kt +++ b/app/src/main/java/de/tomcory/heimdall/ui/database/DatabaseScreen.kt @@ -17,7 +17,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.lifecycle.viewmodel.compose.viewModel -import de.tomcory.heimdall.persistence.database.entity.Request +import de.tomcory.heimdall.R +import de.tomcory.heimdall.core.database.entity.Request @Composable fun DatabaseScreen( diff --git a/app/src/main/java/de/tomcory/heimdall/ui/database/DatabaseViewModel.kt b/app/src/main/java/de/tomcory/heimdall/ui/database/DatabaseViewModel.kt index 3471479..18db0d2 100644 --- a/app/src/main/java/de/tomcory/heimdall/ui/database/DatabaseViewModel.kt +++ b/app/src/main/java/de/tomcory/heimdall/ui/database/DatabaseViewModel.kt @@ -1,9 +1,10 @@ package de.tomcory.heimdall.ui.database import androidx.lifecycle.ViewModel -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.Request -import de.tomcory.heimdall.persistence.database.entity.Response +import androidx.lifecycle.viewModelScope +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.entity.Request +import de.tomcory.heimdall.core.database.entity.Response import kotlinx.coroutines.flow.Flow class DatabaseViewModel : ViewModel() { diff --git a/app/src/main/java/de/tomcory/heimdall/ui/main/MainActivity.kt b/app/src/main/java/de/tomcory/heimdall/ui/main/MainActivity.kt index a755c64..aa01d7b 100644 --- a/app/src/main/java/de/tomcory/heimdall/ui/main/MainActivity.kt +++ b/app/src/main/java/de/tomcory/heimdall/ui/main/MainActivity.kt @@ -1,6 +1,5 @@ package de.tomcory.heimdall.ui.main -import android.content.Context import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent @@ -10,21 +9,12 @@ import androidx.compose.material3.* import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import androidx.datastore.core.DataStore -import androidx.datastore.dataStore import androidx.navigation.compose.rememberNavController import dagger.hilt.android.AndroidEntryPoint -import de.tomcory.heimdall.Preferences -import de.tomcory.heimdall.persistence.datastore.PreferencesSerializer import de.tomcory.heimdall.ui.nav.BottomNavigationBar import de.tomcory.heimdall.ui.nav.Navigation import de.tomcory.heimdall.ui.theme.HeimdallTheme -val Context.preferencesStore: DataStore by dataStore( - fileName = "proto/preferences.proto", - serializer = PreferencesSerializer -) - @AndroidEntryPoint class MainActivity : ComponentActivity() { diff --git a/app/src/main/java/de/tomcory/heimdall/ui/settings/MagiskExporter.kt b/app/src/main/java/de/tomcory/heimdall/ui/settings/MagiskExporter.kt index f7e01bf..6a68355 100644 --- a/app/src/main/java/de/tomcory/heimdall/ui/settings/MagiskExporter.kt +++ b/app/src/main/java/de/tomcory/heimdall/ui/settings/MagiskExporter.kt @@ -19,7 +19,9 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.style.TextOverflow -import de.tomcory.heimdall.util.FileUtils +import de.tomcory.heimdall.core.util.FileUtils +import de.tomcory.heimdall.core.vpn.mitm.Authority +import de.tomcory.heimdall.core.vpn.mitm.KeyStoreHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -64,7 +66,7 @@ fun MagiskExportPreference(snackbarHostState: SnackbarHostState) { isGenerating = true coroutineScope.launch { withContext(Dispatchers.IO) { - filename = FileUtils.generateMagiskModule(context) + filename = generateMagiskModule(context) if (filename.isEmpty()) { Timber.e("Module creation failed") snackbarHostState.showSnackbar(message = "Could not create Magisk module", actionLabel = null, withDismissAction = false, duration = SnackbarDuration.Short) @@ -81,4 +83,16 @@ fun MagiskExportPreference(snackbarHostState: SnackbarHostState) { if (isGenerating) { LinearProgressIndicator(modifier = Modifier.fillMaxWidth()) } +} + +/** + * Generates a Magisk module based on the default Authority credentials and writes it to the app's internal cache directory. + */ +private suspend fun generateMagiskModule(context: Context): String { + Timber.d("Generating authority...") + val authority = Authority.getDefaultInstance(context) + Timber.d("Loading KeyStore...") + val keyStore = KeyStoreHelper.initialiseOrLoadKeyStore(authority) + Timber.d("Building Magisk module...") + return KeyStoreHelper.createMagiskModuleWithCertificate(context, keyStore, authority) ?: "" } \ No newline at end of file diff --git a/app/src/main/java/de/tomcory/heimdall/ui/settings/Preferences.kt b/app/src/main/java/de/tomcory/heimdall/ui/settings/Preferences.kt index f03ab30..53fb411 100644 --- a/app/src/main/java/de/tomcory/heimdall/ui/settings/Preferences.kt +++ b/app/src/main/java/de/tomcory/heimdall/ui/settings/Preferences.kt @@ -96,7 +96,9 @@ fun ActionPreference(text: String, hasProgress: Boolean = false, onClick: suspen trailingContent = { AnimatedVisibility(visible = showProgress, enter = fadeIn(), exit = fadeOut()) { if(rememberHasProgress) { - CircularProgressIndicator(progressState) + CircularProgressIndicator( + progress = { progressState }, + ) } else { CircularProgressIndicator() } @@ -259,6 +261,7 @@ fun MonitoringScopePreference(text: String, dialogText: String, value: Monitorin when (rememberedValue) { MonitoringScopeApps.APPS_ALL -> "All apps" MonitoringScopeApps.APPS_NON_SYSTEM -> "Non-system apps" + MonitoringScopeApps.APPS_NON_SYSTEM_BLACKLIST -> "Non-system + blacklist" MonitoringScopeApps.APPS_WHITELIST -> "Whitelist" MonitoringScopeApps.APPS_BLACKLIST -> "Blacklist" MonitoringScopeApps.UNRECOGNIZED -> "ERROR: UNRECOGNIZED" @@ -288,6 +291,7 @@ fun MonitoringScopePreference(text: String, dialogText: String, value: Monitorin when (it) { MonitoringScopeApps.APPS_ALL -> "All apps" MonitoringScopeApps.APPS_NON_SYSTEM -> "Non-system apps" + MonitoringScopeApps.APPS_NON_SYSTEM_BLACKLIST -> "Non-system + blacklist" MonitoringScopeApps.APPS_WHITELIST -> "Whitelist" MonitoringScopeApps.APPS_BLACKLIST -> "Blacklist" MonitoringScopeApps.UNRECOGNIZED -> "ERROR: UNRECOGNIZED" diff --git a/app/src/main/java/de/tomcory/heimdall/ui/settings/PreferencesScreen.kt b/app/src/main/java/de/tomcory/heimdall/ui/settings/PreferencesScreen.kt index f8cb704..c6f2959 100644 --- a/app/src/main/java/de/tomcory/heimdall/ui/settings/PreferencesScreen.kt +++ b/app/src/main/java/de/tomcory/heimdall/ui/settings/PreferencesScreen.kt @@ -1,6 +1,5 @@ package de.tomcory.heimdall.ui.settings -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn @@ -15,9 +14,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.compose.collectAsStateWithLifecycle -import de.tomcory.heimdall.persistence.datastore.PreferencesSerializer -import de.tomcory.heimdall.scanner.code.ScanManager -import de.tomcory.heimdall.ui.main.preferencesStore +import de.tomcory.heimdall.application.preferencesStore +import de.tomcory.heimdall.core.datastore.PreferencesSerializer @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -124,7 +122,7 @@ fun ScannerPreferences() { val preferences = dataStore.data.collectAsStateWithLifecycle(initialValue = PreferencesSerializer.defaultValue) - Column { + /*Column { CategoryHeadline(text = "Scanner preferences") BooleanPreference( @@ -197,7 +195,7 @@ fun ScannerPreferences() { } } ) - } + }*/ } @Composable @@ -206,7 +204,7 @@ fun VpnPreferences() { val preferences = dataStore.data.collectAsStateWithLifecycle(initialValue = PreferencesSerializer.defaultValue) - Column { + /*Column { CategoryHeadline(text = "VPN preferences") @@ -289,7 +287,7 @@ fun VpnPreferences() { } } ) - } + }*/ } @Composable @@ -297,7 +295,7 @@ fun MitmPreferences(snackBarHostState: SnackbarHostState) { val dataStore = LocalContext.current.preferencesStore val preferences = dataStore.data.collectAsState(initial = PreferencesSerializer.defaultValue) - Column { + /*Column { CategoryHeadline(text = "MitM-VPN preferences") @@ -339,7 +337,7 @@ fun MitmPreferences(snackBarHostState: SnackbarHostState) { } } ) - } + }*/ } @Preview diff --git a/app/src/main/java/de/tomcory/heimdall/ui/theme/Theme.kt b/app/src/main/java/de/tomcory/heimdall/ui/theme/Theme.kt index da52d40..f5eca46 100644 --- a/app/src/main/java/de/tomcory/heimdall/ui/theme/Theme.kt +++ b/app/src/main/java/de/tomcory/heimdall/ui/theme/Theme.kt @@ -75,7 +75,7 @@ private val DarkColors = darkColorScheme( @Composable fun HeimdallTheme( useDarkTheme: Boolean = isSystemInDarkTheme(), - content: @Composable() () -> Unit + content: @Composable () -> Unit ) { val colors = if (!useDarkTheme) { LightColors diff --git a/app/src/main/java/de/tomcory/heimdall/ui/traffic/TrafficScreen.kt b/app/src/main/java/de/tomcory/heimdall/ui/traffic/TrafficScreen.kt index 699f6ba..933f5f3 100644 --- a/app/src/main/java/de/tomcory/heimdall/ui/traffic/TrafficScreen.kt +++ b/app/src/main/java/de/tomcory/heimdall/ui/traffic/TrafficScreen.kt @@ -40,17 +40,15 @@ import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import de.tomcory.heimdall.persistence.datastore.PreferencesSerializer -import de.tomcory.heimdall.ui.main.preferencesStore +import de.tomcory.heimdall.core.datastore.PreferencesSerializer +import de.tomcory.heimdall.application.preferencesStore +import de.tomcory.heimdall.core.proxy.HeimdallHttpProxyServer import de.tomcory.heimdall.ui.settings.PreferencesScreen import de.tomcory.heimdall.ui.theme.HeimdallTheme -import de.tomcory.heimdall.scanner.traffic.components.HeimdallVpnService +import de.tomcory.heimdall.service.HeimdallVpnService import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import org.littleshoot.proxy.mitm.Authority -import org.littleshoot.proxy.mitm.CertificateSniffingMitmManager -import proxy.HeimdallHttpProxyServer import timber.log.Timber import java.net.InetSocketAddress @@ -203,9 +201,23 @@ fun launchVpn(context: Context, useProxy: Boolean) : ComponentName? { suspend fun launchProxy(context: Context) : HeimdallHttpProxyServer { return withContext(Dispatchers.IO) { - val newAuth = de.tomcory.heimdall.scanner.traffic.mitm.Authority.getDefaultInstance(context) - val oldAuth = Authority(newAuth.keyStoreDir, newAuth.alias, newAuth.password, newAuth.issuerCN, newAuth.issuerO, newAuth.issuerOU, newAuth.subjectO, newAuth.subjectOU) - val proxyServer = HeimdallHttpProxyServer(InetSocketAddress("127.0.0.1", 9090), CertificateSniffingMitmManager(oldAuth), context) + val newAuth = de.tomcory.heimdall.core.vpn.mitm.Authority.getDefaultInstance(context) + val oldAuth = de.tomcory.heimdall.core.proxy.littleshoot.mitm.Authority( + newAuth.keyStoreDir, + newAuth.alias, + newAuth.password, + newAuth.issuerCN, + newAuth.issuerO, + newAuth.issuerOU, + newAuth.subjectO, + newAuth.subjectOU + ) + val proxyServer = HeimdallHttpProxyServer( + InetSocketAddress( + "127.0.0.1", + 9090 + ), de.tomcory.heimdall.core.proxy.littleshoot.mitm.CertificateSniffingMitmManager(oldAuth), context + ) proxyServer.start() proxyServer } diff --git a/app/src/main/proto/proto/preferences.proto b/app/src/main/proto/proto/preferences.proto deleted file mode 100644 index 0989c64..0000000 --- a/app/src/main/proto/proto/preferences.proto +++ /dev/null @@ -1,64 +0,0 @@ -syntax = "proto3"; - -option java_package = "de.tomcory.heimdall"; -option java_multiple_files = true; - -enum MonitoringScopeApps { - APPS_ALL = 0; - APPS_NON_SYSTEM = 1; - APPS_WHITELIST = 2; - APPS_BLACKLIST = 3; -} - -enum MonitoringScopeHosts { - HOSTS_ALL = 0; - HOSTS_WHITELIST = 1; - HOSTS_BLACKLIST = 2; -} - -message Preferences { - // indicates whether transport-layer packets are written to the database - bool vpn_persist_transport_layer = 1; - // address of the DNS server used by the VPN - string vpn_dns_server = 2; - // base address of the VPN - string vpn_base_address = 3; - // route captured by the VPN - string vpn_route = 4; - // indicates whether an external proxy is used by the VPN (requires Android 10+) - bool vpn_use_proxy = 5; - // address of the proxy used by the VPN - string vpn_proxy_address = 6; - // list of whitelisted package names for the VpnService - repeated string vpn_whitelisted_apps = 7; - // list of blacklisted package names for the VpnService - repeated string vpn_blacklisted_apps = 8; - // defines the scope of apps captured by the VPN - MonitoringScopeApps vpn_monitoringScope = 9; - // indicates whether the MitM component is enabled - bool mitm_enable = 10; - // the path to the CA certificate required by the MitM component - string mitm_ca_cert_path = 11; - // defines the scope of apps captured by the MitM component - MonitoringScopeApps mitm_monitoringScope = 12; - // defines the scope of hosts captured by the MitM component - MonitoringScopeHosts mitm_monitoringScopeHosts = 13; - // list of whitelisted package names - repeated string mitm_whitelisted_apps = 14; - // list of blacklisted package names - repeated string mitm_blacklisted_apps = 15; - // indicates whether the ScanService should be started - bool scan_enable = 16; - // indicates whether the PermissionScanner is run by the ScanService - bool scan_permission_scanner_enable = 17; - // indicates whether the LibraryScanner is run by the ScanService - bool scan_library_scanner_enable = 18; - // defines the scope of apps scanned by the ScanService - MonitoringScopeApps scan_monitoringScope = 19; - // indicates whether the LibraryScanner auto-loads Exodus - bool scan_library_scanner_prepopulate = 20; - // list of whitelisted package names for the ScanManager - repeated string scan_whitelisted_apps = 21; - // list of blacklisted package names for the ScanManager - repeated string scan_blacklisted_apps = 22; -} diff --git a/build.gradle b/build.gradle deleted file mode 100644 index e0c32af..0000000 --- a/build.gradle +++ /dev/null @@ -1,60 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. -buildscript { - repositories { - google() - mavenCentral() - maven { - url "https://jitpack.io" - name "Jitpack" - } - } - - ext { - gradle_version = '8.1.3' - nav_version = "2.7.5" - hilt_version = "2.48.1" - - // ksp must match Kotlin version - kotlin_version = "1.9.10" - ksp_version = "1.9.10-1.0.13" - - // compose compiler must also match Kotlin version - // see https://developer.android.com/jetpack/androidx/releases/compose-kotlin - compose_compiler_version = "1.5.3" - } - - dependencies { - classpath "com.android.tools.build:gradle:$gradle_version" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" - classpath "com.google.dagger:hilt-android-gradle-plugin:2.48.1" - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -plugins { - id "com.google.devtools.ksp" version "$ksp_version" apply false - id 'com.google.dagger.hilt.android' version "$hilt_version" apply false -} - -allprojects { - repositories { - google() - mavenCentral() - maven { - url "https://jitpack.io" - name "Jitpack" - } - } - - tasks.withType(JavaCompile).tap { - configureEach { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..3c61638 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,32 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + dependencies { + classpath (libs.gradle) + classpath (libs.kotlin.gradle.plugin) + classpath (libs.hilt.android.gradle.plugin) + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + alias (libs.plugins.protobuf) apply false + alias (libs.plugins.ksp) apply false + alias (libs.plugins.kotlin.serialization) apply false + alias (libs.plugins.hilt) apply false + alias (libs.plugins.kotlin.jvm) apply false + alias(libs.plugins.android.library) apply false + alias(libs.plugins.kotlin.android) apply false +} + +allprojects { + tasks.withType().configureEach { + options.compilerArgs.add("-Xlint:unchecked") + options.compilerArgs.add("-Xlint:deprecation") + } +} + +tasks.register("clean", Delete::class) { + delete(rootProject.buildDir) +} diff --git a/core/database/.gitignore b/core/database/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/core/database/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts new file mode 100644 index 0000000..7a2df29 --- /dev/null +++ b/core/database/build.gradle.kts @@ -0,0 +1,25 @@ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) + alias (libs.plugins.ksp) +} + +kotlin { + jvmToolchain (11) +} + +android { + namespace = "de.tomcory.heimdall.core.database" + + defaultConfig { + compileSdk = 34 + } +} + +dependencies { + // Room dependencies + implementation (libs.androidx.room.runtime) + implementation (libs.androidx.room.ktx) + ksp (libs.androidx.room.compiler) +} \ No newline at end of file diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/HeimdallDatabase.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/HeimdallDatabase.kt similarity index 52% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/HeimdallDatabase.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/HeimdallDatabase.kt index a7e03dd..f855280 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/HeimdallDatabase.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/HeimdallDatabase.kt @@ -1,27 +1,27 @@ -package de.tomcory.heimdall.persistence.database +package de.tomcory.heimdall.core.database import android.content.Context import androidx.room.Database import androidx.room.Room.databaseBuilder import androidx.room.RoomDatabase -import de.tomcory.heimdall.persistence.database.dao.AppDao -import de.tomcory.heimdall.persistence.database.dao.AppXPermissionDao -import de.tomcory.heimdall.persistence.database.dao.AppXTrackerDao -import de.tomcory.heimdall.persistence.database.dao.ConnectionDao -import de.tomcory.heimdall.persistence.database.dao.PermissionDao -import de.tomcory.heimdall.persistence.database.dao.RequestDao -import de.tomcory.heimdall.persistence.database.dao.ResponseDao -import de.tomcory.heimdall.persistence.database.dao.SessionDao -import de.tomcory.heimdall.persistence.database.dao.TrackerDao -import de.tomcory.heimdall.persistence.database.entity.App -import de.tomcory.heimdall.persistence.database.entity.AppXPermission -import de.tomcory.heimdall.persistence.database.entity.AppXTracker -import de.tomcory.heimdall.persistence.database.entity.Connection -import de.tomcory.heimdall.persistence.database.entity.Permission -import de.tomcory.heimdall.persistence.database.entity.Request -import de.tomcory.heimdall.persistence.database.entity.Response -import de.tomcory.heimdall.persistence.database.entity.Session -import de.tomcory.heimdall.persistence.database.entity.Tracker +import de.tomcory.heimdall.core.database.dao.AppDao +import de.tomcory.heimdall.core.database.dao.AppXPermissionDao +import de.tomcory.heimdall.core.database.dao.AppXTrackerDao +import de.tomcory.heimdall.core.database.dao.ConnectionDao +import de.tomcory.heimdall.core.database.dao.PermissionDao +import de.tomcory.heimdall.core.database.dao.RequestDao +import de.tomcory.heimdall.core.database.dao.ResponseDao +import de.tomcory.heimdall.core.database.dao.SessionDao +import de.tomcory.heimdall.core.database.dao.TrackerDao +import de.tomcory.heimdall.core.database.entity.App +import de.tomcory.heimdall.core.database.entity.AppXPermission +import de.tomcory.heimdall.core.database.entity.AppXTracker +import de.tomcory.heimdall.core.database.entity.Connection +import de.tomcory.heimdall.core.database.entity.Permission +import de.tomcory.heimdall.core.database.entity.Request +import de.tomcory.heimdall.core.database.entity.Response +import de.tomcory.heimdall.core.database.entity.Session +import de.tomcory.heimdall.core.database.entity.Tracker @Database( version = 6, diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/AppDao.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/AppDao.kt similarity index 79% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/dao/AppDao.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/dao/AppDao.kt index 6ef5860..132599a 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/AppDao.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/AppDao.kt @@ -1,10 +1,10 @@ -package de.tomcory.heimdall.persistence.database.dao +package de.tomcory.heimdall.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query -import de.tomcory.heimdall.persistence.database.entity.App +import de.tomcory.heimdall.core.database.entity.App @Dao interface AppDao { diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/AppXPermissionDao.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/AppXPermissionDao.kt similarity index 76% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/dao/AppXPermissionDao.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/dao/AppXPermissionDao.kt index 85bebdb..4c8620c 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/AppXPermissionDao.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/AppXPermissionDao.kt @@ -1,13 +1,13 @@ -package de.tomcory.heimdall.persistence.database.dao +package de.tomcory.heimdall.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Transaction -import de.tomcory.heimdall.persistence.database.entity.AppWithPermissions -import de.tomcory.heimdall.persistence.database.entity.AppXPermission -import de.tomcory.heimdall.persistence.database.entity.PermissionWithApps +import de.tomcory.heimdall.core.database.entity.AppWithPermissions +import de.tomcory.heimdall.core.database.entity.AppXPermission +import de.tomcory.heimdall.core.database.entity.PermissionWithApps @Dao interface AppXPermissionDao { diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/AppXTrackerDao.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/AppXTrackerDao.kt similarity index 72% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/dao/AppXTrackerDao.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/dao/AppXTrackerDao.kt index aef8392..eab659a 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/AppXTrackerDao.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/AppXTrackerDao.kt @@ -1,9 +1,9 @@ -package de.tomcory.heimdall.persistence.database.dao +package de.tomcory.heimdall.core.database.dao import androidx.room.* -import de.tomcory.heimdall.persistence.database.entity.AppXTracker -import de.tomcory.heimdall.persistence.database.entity.AppWithTrackers -import de.tomcory.heimdall.persistence.database.entity.TrackerWithApps +import de.tomcory.heimdall.core.database.entity.AppXTracker +import de.tomcory.heimdall.core.database.entity.AppWithTrackers +import de.tomcory.heimdall.core.database.entity.TrackerWithApps @Dao interface AppXTrackerDao { diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/ConnectionDao.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/ConnectionDao.kt similarity index 85% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/dao/ConnectionDao.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/dao/ConnectionDao.kt index 08a93a8..84ffc75 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/ConnectionDao.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/ConnectionDao.kt @@ -1,11 +1,11 @@ -package de.tomcory.heimdall.persistence.database.dao +package de.tomcory.heimdall.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Update -import de.tomcory.heimdall.persistence.database.entity.Connection +import de.tomcory.heimdall.core.database.entity.Connection @Dao interface ConnectionDao { diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/PermissionDao.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/PermissionDao.kt similarity index 66% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/dao/PermissionDao.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/dao/PermissionDao.kt index 54d1802..f2a72db 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/PermissionDao.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/PermissionDao.kt @@ -1,9 +1,9 @@ -package de.tomcory.heimdall.persistence.database.dao +package de.tomcory.heimdall.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy -import de.tomcory.heimdall.persistence.database.entity.Permission +import de.tomcory.heimdall.core.database.entity.Permission @Dao interface PermissionDao { diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/RequestDao.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/RequestDao.kt similarity index 86% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/dao/RequestDao.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/dao/RequestDao.kt index bd4d5f4..6f3262d 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/RequestDao.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/RequestDao.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.dao +package de.tomcory.heimdall.core.database.dao import androidx.room.Dao import androidx.room.Delete @@ -6,7 +6,7 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Update -import de.tomcory.heimdall.persistence.database.entity.Request +import de.tomcory.heimdall.core.database.entity.Request import kotlinx.coroutines.flow.Flow @Dao diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/ResponseDao.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/ResponseDao.kt similarity index 87% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/dao/ResponseDao.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/dao/ResponseDao.kt index cf81d25..55a5621 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/ResponseDao.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/ResponseDao.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.dao +package de.tomcory.heimdall.core.database.dao import androidx.room.Dao import androidx.room.Delete @@ -6,7 +6,7 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Update -import de.tomcory.heimdall.persistence.database.entity.Response +import de.tomcory.heimdall.core.database.entity.Response import kotlinx.coroutines.flow.Flow @Dao diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/SessionDao.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/SessionDao.kt similarity index 88% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/dao/SessionDao.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/dao/SessionDao.kt index 9cc16b6..8a13feb 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/SessionDao.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/SessionDao.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.dao +package de.tomcory.heimdall.core.database.dao import androidx.room.Dao import androidx.room.Delete @@ -6,7 +6,7 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Update -import de.tomcory.heimdall.persistence.database.entity.Session +import de.tomcory.heimdall.core.database.entity.Session import kotlinx.coroutines.flow.Flow @Dao diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/TrackerDao.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/TrackerDao.kt similarity index 77% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/dao/TrackerDao.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/dao/TrackerDao.kt index 0db54da..6e7d9ee 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/dao/TrackerDao.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/dao/TrackerDao.kt @@ -1,10 +1,10 @@ -package de.tomcory.heimdall.persistence.database.dao +package de.tomcory.heimdall.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query -import de.tomcory.heimdall.persistence.database.entity.Tracker +import de.tomcory.heimdall.core.database.entity.Tracker @Dao interface TrackerDao { diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/App.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/App.kt similarity index 89% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/entity/App.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/entity/App.kt index 2a2aa94..bf86bee 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/App.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/App.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.entity +package de.tomcory.heimdall.core.database.entity import android.graphics.drawable.Drawable import androidx.room.ColumnInfo diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/AppXPermission.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/AppXPermission.kt similarity index 93% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/entity/AppXPermission.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/entity/AppXPermission.kt index 39d8126..ab8e81d 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/AppXPermission.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/AppXPermission.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.entity +package de.tomcory.heimdall.core.database.entity import androidx.room.ColumnInfo import androidx.room.Embedded diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/AppXTracker.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/AppXTracker.kt similarity index 93% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/entity/AppXTracker.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/entity/AppXTracker.kt index 3110784..b435405 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/AppXTracker.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/AppXTracker.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.entity +package de.tomcory.heimdall.core.database.entity import androidx.room.ColumnInfo import androidx.room.Embedded diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Connection.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Connection.kt similarity index 89% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Connection.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Connection.kt index 2b27b2f..f214590 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Connection.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Connection.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.entity +package de.tomcory.heimdall.core.database.entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Permission.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Permission.kt similarity index 82% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Permission.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Permission.kt index 04ce70d..f92e167 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Permission.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Permission.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.entity +package de.tomcory.heimdall.core.database.entity import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Request.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Request.kt similarity index 90% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Request.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Request.kt index 78876ca..dcffebe 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Request.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Request.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.entity +package de.tomcory.heimdall.core.database.entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Response.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Response.kt similarity index 90% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Response.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Response.kt index c186d2e..4eb7a1b 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Response.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Response.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.entity +package de.tomcory.heimdall.core.database.entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Session.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Session.kt similarity index 80% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Session.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Session.kt index c7d245f..aab73e3 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Session.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Session.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.entity +package de.tomcory.heimdall.core.database.entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Tracker.kt b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Tracker.kt similarity index 84% rename from app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Tracker.kt rename to core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Tracker.kt index 59be09a..3316b84 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/database/entity/Tracker.kt +++ b/core/database/src/main/java/de/tomcory/heimdall/core/database/entity/Tracker.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.database.entity +package de.tomcory.heimdall.core.database.entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/core/datastore-proto/.gitignore b/core/datastore-proto/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/core/datastore-proto/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/datastore-proto/build.gradle.kts b/core/datastore-proto/build.gradle.kts new file mode 100644 index 0000000..abea1fb --- /dev/null +++ b/core/datastore-proto/build.gradle.kts @@ -0,0 +1,51 @@ +import com.google.protobuf.gradle.proto + +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed + +plugins { + id ("com.android.library") + id ("org.jetbrains.kotlin.android") + alias (libs.plugins.protobuf) +} + +kotlin { + jvmToolchain (11) +} + +android { + namespace = "de.tomcory.heimdall.core.datastore.proto" + + defaultConfig { + compileSdk = 34 + } + + sourceSets { + getByName("main") { + java.srcDirs("src/main/proto") + } + } +} + +// Setup protobuf configuration, generating lite Java and Kotlin classes +protobuf { + protoc { + artifact = libs.protobuf.protoc.get().toString() + } + + generateProtoTasks { + all().forEach { task -> + task.builtins { + register("java") { + option("lite") + } + register("kotlin") { + option("lite") + } + } + } + } +} + +dependencies { + implementation(libs.protobuf.kotlin.lite) +} \ No newline at end of file diff --git a/core/datastore-proto/src/main/proto/de/tomcory/heimdall/core/datastore/preferences.proto b/core/datastore-proto/src/main/proto/de/tomcory/heimdall/core/datastore/preferences.proto new file mode 100644 index 0000000..697cb80 --- /dev/null +++ b/core/datastore-proto/src/main/proto/de/tomcory/heimdall/core/datastore/preferences.proto @@ -0,0 +1,63 @@ +syntax = "proto3"; + +option java_package = "de.tomcory.heimdall"; +option java_multiple_files = true; + +enum MonitoringScopeApps { + APPS_ALL = 0; + APPS_NON_SYSTEM = 1; + APPS_NON_SYSTEM_BLACKLIST = 2; + APPS_WHITELIST = 3; + APPS_BLACKLIST = 4; +} + +enum MonitoringScopeHosts { + HOSTS_ALL = 0; + HOSTS_WHITELIST = 1; + HOSTS_BLACKLIST = 2; +} + +message Preferences { + + // ---- VPN PREFERENCES + bool vpn_active = 1; + int64 vpn_lastUpdated = 2; + bool vpn_persist_transport_layer = 3; + string vpn_dns_server = 4; + string vpn_base_address = 5; + string vpn_route = 6; + bool vpn_use_proxy = 7; + string vpn_proxy_address = 8; + MonitoringScopeApps vpn_monitoringScope = 9; + repeated string vpn_whitelist_apps = 10; + repeated string vpn_blacklist_apps = 11; + + // ---- MITM PREFERENCES + bool mitm_enable = 12; + bool mitm_appLayer_passthrough = 13; + string mitm_caCert_path = 14; + MonitoringScopeApps mitm_monitoringScope_apps = 15; + MonitoringScopeHosts mitm_monitoringScope_hosts = 16; + repeated string mitm_whitelist_apps = 17; + repeated string mitm_blacklist_apps = 18; + repeated string mitm_whitelist_hosts = 19; + repeated string mitm_blacklist_hosts = 20; + + // ---- LIBRARY SCANNER PREFERENCES + bool library_active = 21; + bool library_onInstall = 22; + int64 library_lastUpdated = 23; + MonitoringScopeApps library_monitoringScope = 24; + repeated string library_whitelist = 25; + repeated string library_blacklist = 26; + bool library_prepopulate = 27; + + // ---- PERMISSION SCANNER PREFERENCES + bool permission_active = 28; + bool permission_onInstall = 29; + int64 permission_lastUpdated = 30; + MonitoringScopeApps permission_monitoringScope = 31; + repeated string permission_whitelist = 32; + repeated string permission_blacklist = 33; + +} diff --git a/core/datastore/.gitignore b/core/datastore/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/core/datastore/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/datastore/build.gradle.kts b/core/datastore/build.gradle.kts new file mode 100644 index 0000000..5ef4a76 --- /dev/null +++ b/core/datastore/build.gradle.kts @@ -0,0 +1,28 @@ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) + alias (libs.plugins.ksp) +} + +kotlin { + jvmToolchain (11) +} + +android { + namespace = "de.tomcory.heimdall.core.datastore" + + defaultConfig { + compileSdk = 34 + } +} + +dependencies { + api (project(":core:datastore-proto")) + implementation (libs.androidx.datastore) + implementation (libs.protobuf.kotlin.lite) + implementation (libs.timber) + implementation (libs.hilt.android) + ksp (libs.dagger.compiler) + ksp (libs.hilt.compiler) +} diff --git a/core/datastore/src/main/java/de/tomcory/heimdall/core/datastore/DatastoreModule.kt b/core/datastore/src/main/java/de/tomcory/heimdall/core/datastore/DatastoreModule.kt new file mode 100644 index 0000000..ec3515b --- /dev/null +++ b/core/datastore/src/main/java/de/tomcory/heimdall/core/datastore/DatastoreModule.kt @@ -0,0 +1,27 @@ +package de.tomcory.heimdall.core.datastore + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.dataStore +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import de.tomcory.heimdall.Preferences +import javax.inject.Singleton + +val Context.preferencesStore: DataStore by dataStore( + fileName = "proto/preferences.proto", + serializer = PreferencesSerializer +) + +@Module +@InstallIn(SingletonComponent::class) +object DatastoreModule { + @Singleton + @Provides + fun provideDatastore(@ApplicationContext context: Context): DataStore { + return context.preferencesStore + } +} \ No newline at end of file diff --git a/core/datastore/src/main/java/de/tomcory/heimdall/core/datastore/PreferencesSerializer.kt b/core/datastore/src/main/java/de/tomcory/heimdall/core/datastore/PreferencesSerializer.kt new file mode 100644 index 0000000..648f3d9 --- /dev/null +++ b/core/datastore/src/main/java/de/tomcory/heimdall/core/datastore/PreferencesSerializer.kt @@ -0,0 +1,70 @@ +package de.tomcory.heimdall.core.datastore + +import android.content.Context +import androidx.datastore.core.CorruptionException +import androidx.datastore.core.DataStore +import androidx.datastore.core.Serializer +import androidx.datastore.dataStore +import com.google.protobuf.InvalidProtocolBufferException +import de.tomcory.heimdall.MonitoringScopeApps +import de.tomcory.heimdall.MonitoringScopeHosts +import de.tomcory.heimdall.Preferences +import timber.log.Timber +import java.io.InputStream +import java.io.OutputStream + +object PreferencesSerializer : Serializer { + override val defaultValue: Preferences = Preferences.newBuilder() + .setVpnActive(true) + .setVpnLastUpdated(1L) + .setVpnPersistTransportLayer(true) + .setVpnDnsServer("1.1.1.1") + .setVpnBaseAddress("10.120.0.1/32") + .setVpnRoute("0.0.0.0/0") + .setVpnUseProxy(true) + .setVpnProxyAddress("127.0.0.1:9090") + .setVpnMonitoringScope(MonitoringScopeApps.APPS_ALL) + .addAllVpnWhitelistApps(listOf()) + .addAllVpnBlacklistApps(listOf("de.tomcory.heimdall")) + + .setMitmEnable(true) + .setMitmAppLayerPassthrough(true) + .setMitmCaCertPath("") + .setMitmMonitoringScopeApps(MonitoringScopeApps.APPS_ALL) + .setMitmMonitoringScopeHosts(MonitoringScopeHosts.HOSTS_ALL) + .addAllMitmWhitelistApps(listOf()) + .addAllMitmBlacklistApps(listOf()) + .addAllMitmWhitelistHosts(listOf()) + .addAllMitmBlacklistHosts(listOf()) + + .setLibraryActive(true) + .setLibraryOnInstall(true) + .setLibraryLastUpdated(1L) + .setLibraryMonitoringScope(MonitoringScopeApps.APPS_ALL) + .addAllLibraryWhitelist(listOf()) + .addAllLibraryBlacklist(listOf()) + .setLibraryPrepopulate(true) + + .setPermissionActive(true) + .setPermissionOnInstall(true) + .setPermissionLastUpdated(1L) + .setPermissionMonitoringScope(MonitoringScopeApps.APPS_ALL) + .addAllPermissionWhitelist(listOf()) + .addAllPermissionBlacklist(listOf()) + .build() + + override suspend fun readFrom(input: InputStream): Preferences { + try { + val t = Preferences.parseFrom(input) + Timber.w("Reading from DataStore:\n%s", t.toString()) + return t + } catch (exception: InvalidProtocolBufferException) { + throw CorruptionException("Cannot read proto.", exception) + } + } + + override suspend fun writeTo(t: Preferences, output: OutputStream) { + Timber.w("Writing to DataStore:\n%s", t.toString()) + t.writeTo(output) + } +} \ No newline at end of file diff --git a/core/export/.gitignore b/core/export/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/core/export/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/export/build.gradle.kts b/core/export/build.gradle.kts new file mode 100644 index 0000000..d33aa9f --- /dev/null +++ b/core/export/build.gradle.kts @@ -0,0 +1,26 @@ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) +} + +kotlin { + jvmToolchain (11) +} + +android { + namespace = "de.tomcory.heimdall.core.export" + + defaultConfig { + compileSdk = 34 + } +} + +dependencies { + implementation (libs.lifecycle.runtime.ktx) + + // Kotlin serialisation + implementation (libs.kotlinx.serialization.json) + + implementation (project(":core:database")) +} \ No newline at end of file diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/export/csv/CsvExport.kt b/core/export/src/main/java/de/tomcory/heimdall/core/export/csv/CsvExport.kt similarity index 88% rename from app/src/main/java/de/tomcory/heimdall/persistence/export/csv/CsvExport.kt rename to core/export/src/main/java/de/tomcory/heimdall/core/export/csv/CsvExport.kt index 045ea3d..d2c2fcb 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/export/csv/CsvExport.kt +++ b/core/export/src/main/java/de/tomcory/heimdall/core/export/csv/CsvExport.kt @@ -1,8 +1,8 @@ -package de.tomcory.heimdall.persistence.export.csv +package de.tomcory.heimdall.core.export.csv import android.content.Context -import de.tomcory.heimdall.persistence.database.dao.RequestDao -import de.tomcory.heimdall.persistence.database.entity.Request +import de.tomcory.heimdall.core.database.dao.RequestDao +import de.tomcory.heimdall.core.database.entity.Request import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.File diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/export/tex/TexData.kt b/core/export/src/main/java/de/tomcory/heimdall/core/export/tex/TexData.kt similarity index 96% rename from app/src/main/java/de/tomcory/heimdall/persistence/export/tex/TexData.kt rename to core/export/src/main/java/de/tomcory/heimdall/core/export/tex/TexData.kt index 06237d4..5f0ba53 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/export/tex/TexData.kt +++ b/core/export/src/main/java/de/tomcory/heimdall/core/export/tex/TexData.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.export.tex +package de.tomcory.heimdall.core.export.tex import kotlinx.serialization.Serializable diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/export/tex/TexExport.kt b/core/export/src/main/java/de/tomcory/heimdall/core/export/tex/TexExport.kt similarity index 81% rename from app/src/main/java/de/tomcory/heimdall/persistence/export/tex/TexExport.kt rename to core/export/src/main/java/de/tomcory/heimdall/core/export/tex/TexExport.kt index 7d22e52..1e41cc3 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/export/tex/TexExport.kt +++ b/core/export/src/main/java/de/tomcory/heimdall/core/export/tex/TexExport.kt @@ -1,16 +1,11 @@ -package de.tomcory.heimdall.persistence.export.tex +package de.tomcory.heimdall.core.export.tex -import android.content.Context -import de.tomcory.heimdall.persistence.database.entity.Request -import de.tomcory.heimdall.persistence.database.entity.Response -import de.tomcory.heimdall.persistence.export.util.swapJsonQuotes +import de.tomcory.heimdall.core.database.entity.Request +import de.tomcory.heimdall.core.database.entity.Response +import de.tomcory.heimdall.core.export.util.swapJsonQuotes import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject -fun export(context: Context) { - -} - private fun findResponse(request: Request, responses: List): TexResponse { val response = responses.find { it.reqResId == request.reqResId } return if(response != null) { @@ -25,7 +20,7 @@ private fun findResponse(request: Request, responses: List): TexRespon responseHeaders = listOf(), statusCode = 0, timeStamp = request.timestamp, - url = "https://" + request.remoteHost + (request.remotePath ?: ""), + url = "https://" + request.remoteHost + request.remotePath, ) } } @@ -41,7 +36,7 @@ private fun mapResponseToTex(response: Response, request: Request) : TexResponse statusCode = response.statusCode, timeStamp = response.timestamp, ip = request.remoteIp, - url = "https://" + request.remoteHost + (request.remotePath ?: ""), + url = "https://" + request.remoteHost + request.remotePath, ) } @@ -53,7 +48,7 @@ private fun mapRequestToTex(request: Request, responses: List) : TexRe method = request.method, requestId = request.reqResId.toString(), timeStamp = request.timestamp, // important - url = "https://" + request.remoteHost + (request.remotePath ?: ""), // = remoteHost + path + url = "https://" + request.remoteHost + request.remotePath, // = remoteHost + path requestHeaders = headersJsonToHeadersList(request.headers), response = response, success = response.statusCode > 0, // true if response exists diff --git a/app/src/main/java/de/tomcory/heimdall/persistence/export/util/ExportUtils.kt b/core/export/src/main/java/de/tomcory/heimdall/core/export/util/ExportUtils.kt similarity index 93% rename from app/src/main/java/de/tomcory/heimdall/persistence/export/util/ExportUtils.kt rename to core/export/src/main/java/de/tomcory/heimdall/core/export/util/ExportUtils.kt index 3c402f8..16ed7bf 100644 --- a/app/src/main/java/de/tomcory/heimdall/persistence/export/util/ExportUtils.kt +++ b/core/export/src/main/java/de/tomcory/heimdall/core/export/util/ExportUtils.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.persistence.export.util +package de.tomcory.heimdall.core.export.util fun swapJsonQuotes(json: String): String { val sb = StringBuilder() diff --git a/core/proxy/.gitignore b/core/proxy/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/core/proxy/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/proxy/build.gradle.kts b/core/proxy/build.gradle.kts new file mode 100644 index 0000000..a8b6df9 --- /dev/null +++ b/core/proxy/build.gradle.kts @@ -0,0 +1,54 @@ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) +} + +kotlin { + jvmToolchain (11) +} + +android { + namespace = "de.tomcory.heimdall.core.proxy" + + defaultConfig { + compileSdk = 34 + minSdk = 24 + } + + ndkVersion = "21.0.6113669" + + packagingOptions { + resources { + excludes.add("META-INF/INDEX.LIST") + excludes.add("META-INF/io.netty.versions.properties") + } + } + + configurations.configureEach { + resolutionStrategy { + force("io.netty:netty-all:${libs.versions.netty.get()}") + } + } +} + +dependencies { + // BouncyCastle and Littleshoot + implementation (libs.bouncycastle.bcprov.jdk15on) + implementation (libs.bouncycastle.bcpkix.jdk15on) + implementation (libs.dnssec4j) + implementation (libs.commons.io) + implementation (libs.netty.all) + implementation (libs.okhttp) + implementation (libs.lightbody.mitm) { exclude(group = "org.slf4j") } + implementation (libs.jzlib) + implementation (libs.guava) + + implementation (libs.timber) + implementation (libs.lifecycle.runtime.ktx) + implementation (libs.androidx.room.runtime) + implementation (libs.androidx.room.ktx) + + implementation (project(":core:database")) + implementation (project(":core:util")) +} \ No newline at end of file diff --git a/app/src/main/java/proxy/ApacheHttpdMimeTypes.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/ApacheHttpdMimeTypes.java similarity index 98% rename from app/src/main/java/proxy/ApacheHttpdMimeTypes.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/ApacheHttpdMimeTypes.java index 7eed29f..102ff53 100644 --- a/app/src/main/java/proxy/ApacheHttpdMimeTypes.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/ApacheHttpdMimeTypes.java @@ -1,4 +1,4 @@ -package proxy; +package de.tomcory.heimdall.core.proxy; import java.io.IOException; import java.nio.charset.StandardCharsets; diff --git a/app/src/main/java/proxy/HeimdallHttpProxyServer.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/HeimdallHttpProxyServer.java similarity index 72% rename from app/src/main/java/proxy/HeimdallHttpProxyServer.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/HeimdallHttpProxyServer.java index 0c09f34..f62b2ff 100644 --- a/app/src/main/java/proxy/HeimdallHttpProxyServer.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/HeimdallHttpProxyServer.java @@ -1,12 +1,13 @@ -package proxy; +package de.tomcory.heimdall.core.proxy; import android.content.Context; -import org.littleshoot.proxy.HttpProxyServer; -import org.littleshoot.proxy.HttpProxyServerBootstrap; -import org.littleshoot.proxy.SelectiveMitmManagerAdapter; -import org.littleshoot.proxy.impl.DefaultHttpProxyServer; -import org.littleshoot.proxy.mitm.CertificateSniffingMitmManager; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpProxyServer; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpProxyServerBootstrap; +import de.tomcory.heimdall.core.proxy.littleshoot.SelectiveMitmManager; +import de.tomcory.heimdall.core.proxy.littleshoot.SelectiveMitmManagerAdapter; +import de.tomcory.heimdall.core.proxy.littleshoot.impl.DefaultHttpProxyServer; +import de.tomcory.heimdall.core.proxy.littleshoot.mitm.CertificateSniffingMitmManager; import java.net.InetSocketAddress; @@ -33,7 +34,7 @@ private SelectiveMitmManagerAdapter getMitmManager() { return new SelectiveMitmManagerAdapter(mitmManager) { @Override public boolean shouldMITMPeer(String peerHost, int peerPort) { - if (whiteLsited.contains(peerHost + peerPort)) { + if (SelectiveMitmManager.whiteLsited.contains(peerHost + peerPort)) { removeWhiteListed(peerHost + peerHost); return false; } @@ -43,12 +44,12 @@ public boolean shouldMITMPeer(String peerHost, int peerPort) { @Override public void addWhiteListed(String hostAndPort) { - whiteLsited.add(hostAndPort); + SelectiveMitmManager.whiteLsited.add(hostAndPort); } @Override public void removeWhiteListed(String hostAndPort) { - whiteLsited.remove(hostAndPort); + SelectiveMitmManager.whiteLsited.remove(hostAndPort); } }; } diff --git a/app/src/main/java/proxy/HttpProxyFiltersImpl.kt b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/HttpProxyFiltersImpl.kt similarity index 94% rename from app/src/main/java/proxy/HttpProxyFiltersImpl.kt rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/HttpProxyFiltersImpl.kt index 71f2348..a54d45b 100644 --- a/app/src/main/java/proxy/HttpProxyFiltersImpl.kt +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/HttpProxyFiltersImpl.kt @@ -1,12 +1,14 @@ -package proxy +package de.tomcory.heimdall.core.proxy import android.content.Context +import android.net.ConnectivityManager import android.os.Build +import android.system.OsConstants import androidx.annotation.RequiresApi -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.Request -import de.tomcory.heimdall.persistence.database.entity.Response -import de.tomcory.heimdall.util.OsUtils +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.entity.Request +import de.tomcory.heimdall.core.database.entity.Response +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFiltersAdapter import io.netty.channel.ChannelHandlerContext import io.netty.handler.codec.http.FullHttpRequest import io.netty.handler.codec.http.FullHttpResponse @@ -19,7 +21,6 @@ import io.netty.util.AttributeKey import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import org.littleshoot.proxy.HttpFiltersAdapter import timber.log.Timber import java.net.InetSocketAddress import java.nio.charset.Charset @@ -51,7 +52,8 @@ class HttpProxyFiltersImpl( } // get the id of the app that initiated the request - aid = OsUtils.getAidQ(clientAddress, ctx.channel().localAddress() as InetSocketAddress, context) + val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager? + aid = cm?.getConnectionOwnerUid(OsConstants.IPPROTO_TCP, clientAddress, ctx.channel().localAddress() as InetSocketAddress) ?: -1 val pm = context.packageManager if (aid >= 0) { val packages = pm.getPackagesForUid(aid) diff --git a/app/src/main/java/proxy/HttpProxyFiltersSourceImpl.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/HttpProxyFiltersSourceImpl.java similarity index 85% rename from app/src/main/java/proxy/HttpProxyFiltersSourceImpl.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/HttpProxyFiltersSourceImpl.java index d17dc33..32a6366 100644 --- a/app/src/main/java/proxy/HttpProxyFiltersSourceImpl.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/HttpProxyFiltersSourceImpl.java @@ -1,11 +1,11 @@ -package proxy; +package de.tomcory.heimdall.core.proxy; import android.content.Context; import java.net.InetSocketAddress; -import org.littleshoot.proxy.HttpFilters; -import org.littleshoot.proxy.HttpFiltersSourceAdapter; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFilters; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFiltersSourceAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.HttpRequest; diff --git a/app/src/main/java/proxy/NettyUtil.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/NettyUtil.java similarity index 99% rename from app/src/main/java/proxy/NettyUtil.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/NettyUtil.java index a9d2bcb..ee4bd74 100644 --- a/app/src/main/java/proxy/NettyUtil.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/NettyUtil.java @@ -1,4 +1,4 @@ -package proxy; +package de.tomcory.heimdall.core.proxy; import java.nio.charset.StandardCharsets; import java.util.Map.Entry; diff --git a/app/src/main/java/proxy/ProxyUtils.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/ProxyUtils.java similarity index 93% rename from app/src/main/java/proxy/ProxyUtils.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/ProxyUtils.java index 49bc03f..c2ab55d 100644 --- a/app/src/main/java/proxy/ProxyUtils.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/ProxyUtils.java @@ -1,9 +1,9 @@ -package proxy; +package de.tomcory.heimdall.core.proxy; import android.content.Context; -import org.littleshoot.proxy.mitm.Authority; -import org.littleshoot.proxy.mitm.CertificateSniffingMitmManager; +import de.tomcory.heimdall.core.proxy.littleshoot.mitm.Authority; +import de.tomcory.heimdall.core.proxy.littleshoot.mitm.CertificateSniffingMitmManager; import java.io.BufferedReader; import java.io.File; diff --git a/app/src/main/java/org/littleshoot/proxy/ActivityTracker.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ActivityTracker.java similarity index 98% rename from app/src/main/java/org/littleshoot/proxy/ActivityTracker.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ActivityTracker.java index 8ff5146..d81b124 100644 --- a/app/src/main/java/org/littleshoot/proxy/ActivityTracker.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ActivityTracker.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; diff --git a/app/src/main/java/org/littleshoot/proxy/ActivityTrackerAdapter.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ActivityTrackerAdapter.java similarity index 96% rename from app/src/main/java/org/littleshoot/proxy/ActivityTrackerAdapter.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ActivityTrackerAdapter.java index 9e9087d..23b3049 100644 --- a/app/src/main/java/org/littleshoot/proxy/ActivityTrackerAdapter.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ActivityTrackerAdapter.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; diff --git a/app/src/main/java/org/littleshoot/proxy/ChainedProxy.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ChainedProxy.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/ChainedProxy.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ChainedProxy.java index 3292c42..e808546 100644 --- a/app/src/main/java/org/littleshoot/proxy/ChainedProxy.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ChainedProxy.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.handler.codec.http.HttpObject; diff --git a/app/src/main/java/org/littleshoot/proxy/ChainedProxyAdapter.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ChainedProxyAdapter.java similarity index 96% rename from app/src/main/java/org/littleshoot/proxy/ChainedProxyAdapter.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ChainedProxyAdapter.java index 61f4288..f82e0c5 100644 --- a/app/src/main/java/org/littleshoot/proxy/ChainedProxyAdapter.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ChainedProxyAdapter.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.handler.codec.http.HttpObject; diff --git a/app/src/main/java/org/littleshoot/proxy/ChainedProxyManager.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ChainedProxyManager.java similarity index 95% rename from app/src/main/java/org/littleshoot/proxy/ChainedProxyManager.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ChainedProxyManager.java index f73c69c..f259f31 100644 --- a/app/src/main/java/org/littleshoot/proxy/ChainedProxyManager.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ChainedProxyManager.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.handler.codec.http.HttpRequest; diff --git a/app/src/main/java/org/littleshoot/proxy/DefaultHostResolver.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/DefaultHostResolver.java similarity index 90% rename from app/src/main/java/org/littleshoot/proxy/DefaultHostResolver.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/DefaultHostResolver.java index 3519dcd..ef54620 100644 --- a/app/src/main/java/org/littleshoot/proxy/DefaultHostResolver.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/DefaultHostResolver.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import java.net.InetAddress; import java.net.InetSocketAddress; diff --git a/app/src/main/java/org/littleshoot/proxy/DnsSecServerResolver.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/DnsSecServerResolver.java similarity index 88% rename from app/src/main/java/org/littleshoot/proxy/DnsSecServerResolver.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/DnsSecServerResolver.java index debb075..f7d6d83 100644 --- a/app/src/main/java/org/littleshoot/proxy/DnsSecServerResolver.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/DnsSecServerResolver.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import java.net.InetSocketAddress; import java.net.UnknownHostException; diff --git a/app/src/main/java/org/littleshoot/proxy/FlowContext.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/FlowContext.java similarity index 88% rename from app/src/main/java/org/littleshoot/proxy/FlowContext.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/FlowContext.java index 15bf9ac..54fe21a 100644 --- a/app/src/main/java/org/littleshoot/proxy/FlowContext.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/FlowContext.java @@ -1,11 +1,11 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import java.net.InetSocketAddress; import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLSession; -import org.littleshoot.proxy.impl.ClientToProxyConnection; +import de.tomcory.heimdall.core.proxy.littleshoot.impl.ClientToProxyConnection; /** *

diff --git a/app/src/main/java/org/littleshoot/proxy/FullFlowContext.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/FullFlowContext.java similarity index 76% rename from app/src/main/java/org/littleshoot/proxy/FullFlowContext.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/FullFlowContext.java index 43a4d9f..d6f5fe3 100644 --- a/app/src/main/java/org/littleshoot/proxy/FullFlowContext.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/FullFlowContext.java @@ -1,7 +1,7 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; -import org.littleshoot.proxy.impl.ClientToProxyConnection; -import org.littleshoot.proxy.impl.ProxyToServerConnection; +import de.tomcory.heimdall.core.proxy.littleshoot.impl.ClientToProxyConnection; +import de.tomcory.heimdall.core.proxy.littleshoot.impl.ProxyToServerConnection; /** * Extension of {@link FlowContext} that provides additional information (which @@ -12,7 +12,7 @@ public class FullFlowContext extends FlowContext { private final ChainedProxy chainedProxy; public FullFlowContext(ClientToProxyConnection clientConnection, - ProxyToServerConnection serverConnection) { + ProxyToServerConnection serverConnection) { super(clientConnection); this.serverHostAndPort = serverConnection.getServerHostAndPort(); this.chainedProxy = serverConnection.getChainedProxy(); diff --git a/app/src/main/java/org/littleshoot/proxy/HostResolver.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HostResolver.java similarity index 83% rename from app/src/main/java/org/littleshoot/proxy/HostResolver.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HostResolver.java index 6041a45..88e78e3 100644 --- a/app/src/main/java/org/littleshoot/proxy/HostResolver.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HostResolver.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import java.net.InetSocketAddress; import java.net.UnknownHostException; diff --git a/app/src/main/java/org/littleshoot/proxy/HttpFilters.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFilters.java similarity index 98% rename from app/src/main/java/org/littleshoot/proxy/HttpFilters.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFilters.java index b01f0ce..795f783 100644 --- a/app/src/main/java/org/littleshoot/proxy/HttpFilters.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFilters.java @@ -1,8 +1,8 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.*; -import org.littleshoot.proxy.impl.ProxyUtils; +import de.tomcory.heimdall.core.proxy.littleshoot.impl.ProxyUtils; import java.net.InetSocketAddress; diff --git a/app/src/main/java/org/littleshoot/proxy/HttpFiltersAdapter.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFiltersAdapter.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/HttpFiltersAdapter.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFiltersAdapter.java index 2871364..5638632 100644 --- a/app/src/main/java/org/littleshoot/proxy/HttpFiltersAdapter.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFiltersAdapter.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.HttpObject; diff --git a/app/src/main/java/org/littleshoot/proxy/HttpFiltersSource.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFiltersSource.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/HttpFiltersSource.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFiltersSource.java index 8f57e8f..3949a08 100644 --- a/app/src/main/java/org/littleshoot/proxy/HttpFiltersSource.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFiltersSource.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.FullHttpRequest; diff --git a/app/src/main/java/org/littleshoot/proxy/HttpFiltersSourceAdapter.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFiltersSourceAdapter.java similarity index 93% rename from app/src/main/java/org/littleshoot/proxy/HttpFiltersSourceAdapter.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFiltersSourceAdapter.java index 1b2cecf..6e61f6b 100644 --- a/app/src/main/java/org/littleshoot/proxy/HttpFiltersSourceAdapter.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpFiltersSourceAdapter.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.HttpRequest; diff --git a/app/src/main/java/org/littleshoot/proxy/HttpProxyServer.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpProxyServer.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/HttpProxyServer.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpProxyServer.java index 275de54..0f35565 100644 --- a/app/src/main/java/org/littleshoot/proxy/HttpProxyServer.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpProxyServer.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import java.net.InetSocketAddress; diff --git a/app/src/main/java/org/littleshoot/proxy/HttpProxyServerBootstrap.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpProxyServerBootstrap.java similarity index 98% rename from app/src/main/java/org/littleshoot/proxy/HttpProxyServerBootstrap.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpProxyServerBootstrap.java index 367dc8d..f645e91 100644 --- a/app/src/main/java/org/littleshoot/proxy/HttpProxyServerBootstrap.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/HttpProxyServerBootstrap.java @@ -1,6 +1,6 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; -import org.littleshoot.proxy.impl.ThreadPoolConfiguration; +import de.tomcory.heimdall.core.proxy.littleshoot.impl.ThreadPoolConfiguration; import java.net.InetSocketAddress; diff --git a/app/src/main/java/org/littleshoot/proxy/MitmManager.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/MitmManager.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/MitmManager.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/MitmManager.java index 9969937..149e818 100644 --- a/app/src/main/java/org/littleshoot/proxy/MitmManager.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/MitmManager.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.handler.codec.http.HttpRequest; import javax.net.ssl.SSLEngine; diff --git a/app/src/main/java/org/littleshoot/proxy/ProxyAuthenticator.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ProxyAuthenticator.java similarity index 94% rename from app/src/main/java/org/littleshoot/proxy/ProxyAuthenticator.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ProxyAuthenticator.java index df77c68..85644d9 100644 --- a/app/src/main/java/org/littleshoot/proxy/ProxyAuthenticator.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/ProxyAuthenticator.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; /** * Interface for objects that can authenticate someone for using our Proxy on diff --git a/app/src/main/java/org/littleshoot/proxy/SelectiveMitmManager.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/SelectiveMitmManager.java similarity index 93% rename from app/src/main/java/org/littleshoot/proxy/SelectiveMitmManager.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/SelectiveMitmManager.java index 10cbbf2..0b07700 100644 --- a/app/src/main/java/org/littleshoot/proxy/SelectiveMitmManager.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/SelectiveMitmManager.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import java.util.HashSet; import java.util.Set; diff --git a/app/src/main/java/org/littleshoot/proxy/SelectiveMitmManagerAdapter.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/SelectiveMitmManagerAdapter.java similarity index 92% rename from app/src/main/java/org/littleshoot/proxy/SelectiveMitmManagerAdapter.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/SelectiveMitmManagerAdapter.java index 971132d..581165b 100644 --- a/app/src/main/java/org/littleshoot/proxy/SelectiveMitmManagerAdapter.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/SelectiveMitmManagerAdapter.java @@ -1,7 +1,4 @@ -package org.littleshoot.proxy; - -import java.util.HashSet; -import java.util.Set; +package de.tomcory.heimdall.core.proxy.littleshoot; import io.netty.handler.codec.http.HttpRequest; import javax.net.ssl.SSLEngine; diff --git a/app/src/main/java/org/littleshoot/proxy/SslEngineSource.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/SslEngineSource.java similarity index 93% rename from app/src/main/java/org/littleshoot/proxy/SslEngineSource.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/SslEngineSource.java index bb6ed1a..64595a6 100644 --- a/app/src/main/java/org/littleshoot/proxy/SslEngineSource.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/SslEngineSource.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; import javax.net.ssl.SSLEngine; diff --git a/app/src/main/java/org/littleshoot/proxy/TransportProtocol.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/TransportProtocol.java similarity index 69% rename from app/src/main/java/org/littleshoot/proxy/TransportProtocol.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/TransportProtocol.java index 8ca592e..754f178 100644 --- a/app/src/main/java/org/littleshoot/proxy/TransportProtocol.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/TransportProtocol.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; /** * Enumeration of transport protocols supported by LittleProxy. diff --git a/app/src/main/java/org/littleshoot/proxy/UnknownTransportProtocolException.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/UnknownTransportProtocolException.java similarity index 89% rename from app/src/main/java/org/littleshoot/proxy/UnknownTransportProtocolException.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/UnknownTransportProtocolException.java index b264b81..a44311d 100644 --- a/app/src/main/java/org/littleshoot/proxy/UnknownTransportProtocolException.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/UnknownTransportProtocolException.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy; +package de.tomcory.heimdall.core.proxy.littleshoot; /** * This exception indicates that the system was asked to use a TransportProtocol that it didn't know how to handle. diff --git a/app/src/main/java/org/littleshoot/proxy/extras/SelfSignedMitmManager.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/extras/SelfSignedMitmManager.java similarity index 87% rename from app/src/main/java/org/littleshoot/proxy/extras/SelfSignedMitmManager.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/extras/SelfSignedMitmManager.java index 45c71fe..e969009 100644 --- a/app/src/main/java/org/littleshoot/proxy/extras/SelfSignedMitmManager.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/extras/SelfSignedMitmManager.java @@ -1,7 +1,7 @@ -package org.littleshoot.proxy.extras; +package de.tomcory.heimdall.core.proxy.littleshoot.extras; import io.netty.handler.codec.http.HttpRequest; -import org.littleshoot.proxy.MitmManager; +import de.tomcory.heimdall.core.proxy.littleshoot.MitmManager; import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLSession; diff --git a/app/src/main/java/org/littleshoot/proxy/extras/SelfSignedSslEngineSource.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/extras/SelfSignedSslEngineSource.java similarity index 98% rename from app/src/main/java/org/littleshoot/proxy/extras/SelfSignedSslEngineSource.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/extras/SelfSignedSslEngineSource.java index 31b671c..23fe5bd 100644 --- a/app/src/main/java/org/littleshoot/proxy/extras/SelfSignedSslEngineSource.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/extras/SelfSignedSslEngineSource.java @@ -1,7 +1,7 @@ -package org.littleshoot.proxy.extras; +package de.tomcory.heimdall.core.proxy.littleshoot.extras; import com.google.common.io.ByteStreams; -import org.littleshoot.proxy.SslEngineSource; +import de.tomcory.heimdall.core.proxy.littleshoot.SslEngineSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/CategorizedThreadFactory.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/CategorizedThreadFactory.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/impl/CategorizedThreadFactory.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/CategorizedThreadFactory.java index 8ddbc39..7036cf7 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/CategorizedThreadFactory.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/CategorizedThreadFactory.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ClientToProxyConnection.java similarity index 98% rename from app/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ClientToProxyConnection.java index 6c922ab..61c78ba 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ClientToProxyConnection.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import android.util.Log; @@ -28,13 +28,13 @@ import timber.log.Timber; import org.apache.commons.lang3.StringUtils; -import org.littleshoot.proxy.ActivityTracker; -import org.littleshoot.proxy.FlowContext; -import org.littleshoot.proxy.FullFlowContext; -import org.littleshoot.proxy.HttpFilters; -import org.littleshoot.proxy.HttpFiltersAdapter; -import org.littleshoot.proxy.ProxyAuthenticator; -import org.littleshoot.proxy.SslEngineSource; +import de.tomcory.heimdall.core.proxy.littleshoot.ActivityTracker; +import de.tomcory.heimdall.core.proxy.littleshoot.FlowContext; +import de.tomcory.heimdall.core.proxy.littleshoot.FullFlowContext; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFilters; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFiltersAdapter; +import de.tomcory.heimdall.core.proxy.littleshoot.ProxyAuthenticator; +import de.tomcory.heimdall.core.proxy.littleshoot.SslEngineSource; import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.SSLSession; @@ -53,11 +53,11 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Pattern; -import static org.littleshoot.proxy.impl.ConnectionState.AWAITING_CHUNK; -import static org.littleshoot.proxy.impl.ConnectionState.AWAITING_INITIAL; -import static org.littleshoot.proxy.impl.ConnectionState.AWAITING_PROXY_AUTHENTICATION; -import static org.littleshoot.proxy.impl.ConnectionState.DISCONNECT_REQUESTED; -import static org.littleshoot.proxy.impl.ConnectionState.NEGOTIATING_CONNECT; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.AWAITING_CHUNK; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.AWAITING_INITIAL; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.AWAITING_PROXY_AUTHENTICATION; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.DISCONNECT_REQUESTED; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.NEGOTIATING_CONNECT; /** *

diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ConnectionFlow.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ConnectionFlow.java similarity index 99% rename from app/src/main/java/org/littleshoot/proxy/impl/ConnectionFlow.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ConnectionFlow.java index 808c911..089332b 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ConnectionFlow.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ConnectionFlow.java @@ -1,8 +1,7 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; -import timber.log.Timber; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ConnectionFlowStep.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ConnectionFlowStep.java similarity index 98% rename from app/src/main/java/org/littleshoot/proxy/impl/ConnectionFlowStep.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ConnectionFlowStep.java index c60910d..abedd73 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ConnectionFlowStep.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ConnectionFlowStep.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import io.netty.util.concurrent.Future; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ConnectionState.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ConnectionState.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/impl/ConnectionState.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ConnectionState.java index 371fcd5..ec8fceb 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ConnectionState.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ConnectionState.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; enum ConnectionState { /** diff --git a/app/src/main/java/org/littleshoot/proxy/impl/DefaultHttpProxyServer.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/DefaultHttpProxyServer.java similarity index 96% rename from app/src/main/java/org/littleshoot/proxy/impl/DefaultHttpProxyServer.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/DefaultHttpProxyServer.java index 583edf5..c730628 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/DefaultHttpProxyServer.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/DefaultHttpProxyServer.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import io.netty.bootstrap.ChannelFactory; import io.netty.bootstrap.ServerBootstrap; @@ -16,21 +16,18 @@ import io.netty.channel.udt.nio.NioUdtProvider; import io.netty.handler.traffic.GlobalTrafficShapingHandler; import io.netty.util.concurrent.GlobalEventExecutor; -import org.littleshoot.proxy.ActivityTracker; -import org.littleshoot.proxy.ChainedProxyManager; -import org.littleshoot.proxy.DefaultHostResolver; -import org.littleshoot.proxy.DnsSecServerResolver; -import org.littleshoot.proxy.HostResolver; -import org.littleshoot.proxy.HttpFilters; -import org.littleshoot.proxy.HttpFiltersSource; -import org.littleshoot.proxy.HttpFiltersSourceAdapter; -import org.littleshoot.proxy.HttpProxyServer; -import org.littleshoot.proxy.HttpProxyServerBootstrap; -import org.littleshoot.proxy.MitmManager; -import org.littleshoot.proxy.ProxyAuthenticator; -import org.littleshoot.proxy.SslEngineSource; -import org.littleshoot.proxy.TransportProtocol; -import org.littleshoot.proxy.UnknownTransportProtocolException; +import de.tomcory.heimdall.core.proxy.littleshoot.ActivityTracker; +import de.tomcory.heimdall.core.proxy.littleshoot.ChainedProxyManager; +import de.tomcory.heimdall.core.proxy.littleshoot.HostResolver; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFilters; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFiltersSource; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpProxyServer; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpProxyServerBootstrap; +import de.tomcory.heimdall.core.proxy.littleshoot.MitmManager; +import de.tomcory.heimdall.core.proxy.littleshoot.ProxyAuthenticator; +import de.tomcory.heimdall.core.proxy.littleshoot.SslEngineSource; +import de.tomcory.heimdall.core.proxy.littleshoot.TransportProtocol; +import de.tomcory.heimdall.core.proxy.littleshoot.UnknownTransportProtocolException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/DefaultHttpProxyServerBootstrap.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/DefaultHttpProxyServerBootstrap.java similarity index 92% rename from app/src/main/java/org/littleshoot/proxy/impl/DefaultHttpProxyServerBootstrap.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/DefaultHttpProxyServerBootstrap.java index 0c16805..52ab3a4 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/DefaultHttpProxyServerBootstrap.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/DefaultHttpProxyServerBootstrap.java @@ -1,20 +1,18 @@ -package org.littleshoot.proxy.impl; - -import android.util.Log; - -import org.littleshoot.proxy.ActivityTracker; -import org.littleshoot.proxy.ChainedProxyManager; -import org.littleshoot.proxy.DefaultHostResolver; -import org.littleshoot.proxy.DnsSecServerResolver; -import org.littleshoot.proxy.HostResolver; -import org.littleshoot.proxy.HttpFiltersSource; -import org.littleshoot.proxy.HttpFiltersSourceAdapter; -import org.littleshoot.proxy.HttpProxyServer; -import org.littleshoot.proxy.HttpProxyServerBootstrap; -import org.littleshoot.proxy.MitmManager; -import org.littleshoot.proxy.ProxyAuthenticator; -import org.littleshoot.proxy.SslEngineSource; -import org.littleshoot.proxy.TransportProtocol; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; + +import de.tomcory.heimdall.core.proxy.littleshoot.ActivityTracker; +import de.tomcory.heimdall.core.proxy.littleshoot.ChainedProxyManager; +import de.tomcory.heimdall.core.proxy.littleshoot.DefaultHostResolver; +import de.tomcory.heimdall.core.proxy.littleshoot.DnsSecServerResolver; +import de.tomcory.heimdall.core.proxy.littleshoot.HostResolver; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFiltersSource; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFiltersSourceAdapter; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpProxyServer; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpProxyServerBootstrap; +import de.tomcory.heimdall.core.proxy.littleshoot.MitmManager; +import de.tomcory.heimdall.core.proxy.littleshoot.ProxyAuthenticator; +import de.tomcory.heimdall.core.proxy.littleshoot.SslEngineSource; +import de.tomcory.heimdall.core.proxy.littleshoot.TransportProtocol; import java.net.InetSocketAddress; import java.util.Collection; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/NetworkUtils.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/NetworkUtils.java similarity index 96% rename from app/src/main/java/org/littleshoot/proxy/impl/NetworkUtils.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/NetworkUtils.java index 79a12b4..0ef4c37 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/NetworkUtils.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/NetworkUtils.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import java.net.InetAddress; import java.net.InterfaceAddress; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ProxyConnection.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyConnection.java similarity index 99% rename from app/src/main/java/org/littleshoot/proxy/impl/ProxyConnection.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyConnection.java index ded214f..c635dbb 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ProxyConnection.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyConnection.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -8,14 +8,13 @@ import io.netty.handler.timeout.IdleStateEvent; import io.netty.util.ReferenceCounted; import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.FutureListener; import io.netty.util.concurrent.GenericFutureListener; import io.netty.util.concurrent.Promise; -import org.littleshoot.proxy.HttpFilters; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFilters; import javax.net.ssl.SSLEngine; -import static org.littleshoot.proxy.impl.ConnectionState.*; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.*; /** *

diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ProxyConnectionLogger.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyConnectionLogger.java similarity index 99% rename from app/src/main/java/org/littleshoot/proxy/impl/ProxyConnectionLogger.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyConnectionLogger.java index c3856f3..1364b92 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ProxyConnectionLogger.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyConnectionLogger.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import java.util.Arrays; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ProxyThreadPools.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyThreadPools.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/impl/ProxyThreadPools.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyThreadPools.java index 2ca4f0f..bf7429f 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ProxyThreadPools.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyThreadPools.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import com.google.common.collect.ImmutableList; import io.netty.channel.EventLoopGroup; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ProxyToServerConnection.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyToServerConnection.java similarity index 96% rename from app/src/main/java/org/littleshoot/proxy/impl/ProxyToServerConnection.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyToServerConnection.java index b614c57..ab999a7 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ProxyToServerConnection.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyToServerConnection.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import com.google.common.net.HostAndPort; import io.netty.bootstrap.Bootstrap; @@ -31,19 +31,18 @@ import io.netty.handler.traffic.GlobalTrafficShapingHandler; import io.netty.util.ReferenceCounted; import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.GenericFutureListener; import timber.log.Timber; -import org.littleshoot.proxy.ActivityTracker; -import org.littleshoot.proxy.ChainedProxy; -import org.littleshoot.proxy.ChainedProxyAdapter; -import org.littleshoot.proxy.ChainedProxyManager; -import org.littleshoot.proxy.FullFlowContext; -import org.littleshoot.proxy.HttpFilters; -import org.littleshoot.proxy.MitmManager; -import org.littleshoot.proxy.SelectiveMitmManager; -import org.littleshoot.proxy.TransportProtocol; -import org.littleshoot.proxy.UnknownTransportProtocolException; +import de.tomcory.heimdall.core.proxy.littleshoot.ActivityTracker; +import de.tomcory.heimdall.core.proxy.littleshoot.ChainedProxy; +import de.tomcory.heimdall.core.proxy.littleshoot.ChainedProxyAdapter; +import de.tomcory.heimdall.core.proxy.littleshoot.ChainedProxyManager; +import de.tomcory.heimdall.core.proxy.littleshoot.FullFlowContext; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpFilters; +import de.tomcory.heimdall.core.proxy.littleshoot.MitmManager; +import de.tomcory.heimdall.core.proxy.littleshoot.SelectiveMitmManager; +import de.tomcory.heimdall.core.proxy.littleshoot.TransportProtocol; +import de.tomcory.heimdall.core.proxy.littleshoot.UnknownTransportProtocolException; import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.SSLProtocolException; @@ -55,12 +54,12 @@ import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.RejectedExecutionException; -import static org.littleshoot.proxy.impl.ConnectionState.AWAITING_CHUNK; -import static org.littleshoot.proxy.impl.ConnectionState.AWAITING_CONNECT_OK; -import static org.littleshoot.proxy.impl.ConnectionState.AWAITING_INITIAL; -import static org.littleshoot.proxy.impl.ConnectionState.CONNECTING; -import static org.littleshoot.proxy.impl.ConnectionState.DISCONNECTED; -import static org.littleshoot.proxy.impl.ConnectionState.HANDSHAKING;; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.AWAITING_CHUNK; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.AWAITING_CONNECT_OK; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.AWAITING_INITIAL; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.CONNECTING; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.DISCONNECTED; +import static de.tomcory.heimdall.core.proxy.littleshoot.impl.ConnectionState.HANDSHAKING;; /** *

* Represents a connection from our proxy to a server on the web. diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ProxyUtils.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyUtils.java similarity index 99% rename from app/src/main/java/org/littleshoot/proxy/impl/ProxyUtils.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyUtils.java index 37aafc0..6bba774 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ProxyUtils.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ProxyUtils.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ServerGroup.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ServerGroup.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/impl/ServerGroup.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ServerGroup.java index d359c7b..32e4fb6 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ServerGroup.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ServerGroup.java @@ -1,10 +1,10 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; import io.netty.channel.EventLoopGroup; import io.netty.channel.udt.nio.NioUdtProvider; -import org.littleshoot.proxy.HttpProxyServer; -import org.littleshoot.proxy.TransportProtocol; -import org.littleshoot.proxy.UnknownTransportProtocolException; +import de.tomcory.heimdall.core.proxy.littleshoot.HttpProxyServer; +import de.tomcory.heimdall.core.proxy.littleshoot.TransportProtocol; +import de.tomcory.heimdall.core.proxy.littleshoot.UnknownTransportProtocolException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/app/src/main/java/org/littleshoot/proxy/impl/ThreadPoolConfiguration.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ThreadPoolConfiguration.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/impl/ThreadPoolConfiguration.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ThreadPoolConfiguration.java index b8e7b05..2aedec7 100644 --- a/app/src/main/java/org/littleshoot/proxy/impl/ThreadPoolConfiguration.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/impl/ThreadPoolConfiguration.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.impl; +package de.tomcory.heimdall.core.proxy.littleshoot.impl; /** * Configuration object for the proxy's thread pools. Controls the number of acceptor and worker threads in the Netty diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/Authority.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/Authority.java similarity index 98% rename from app/src/main/java/org/littleshoot/proxy/mitm/Authority.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/Authority.java index 49f3ed6..5a045cb 100644 --- a/app/src/main/java/org/littleshoot/proxy/mitm/Authority.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/Authority.java @@ -1,6 +1,4 @@ -package org.littleshoot.proxy.mitm; - -import android.util.Log; +package de.tomcory.heimdall.core.proxy.littleshoot.mitm; import java.io.File; import java.io.IOException; diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/BouncyCastleSslEngineSource.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/BouncyCastleSslEngineSource.java similarity index 99% rename from app/src/main/java/org/littleshoot/proxy/mitm/BouncyCastleSslEngineSource.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/BouncyCastleSslEngineSource.java index b865d21..348661d 100644 --- a/app/src/main/java/org/littleshoot/proxy/mitm/BouncyCastleSslEngineSource.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/BouncyCastleSslEngineSource.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.mitm; +package de.tomcory.heimdall.core.proxy.littleshoot.mitm; import io.netty.handler.ssl.util.InsecureTrustManagerFactory; @@ -31,7 +31,7 @@ import org.apache.commons.io.IOUtils; import org.bouncycastle.openssl.jcajce.JcaPEMWriter; import org.bouncycastle.operator.OperatorCreationException; -import org.littleshoot.proxy.SslEngineSource; +import de.tomcory.heimdall.core.proxy.littleshoot.SslEngineSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/CertificateHelper.java similarity index 99% rename from app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/CertificateHelper.java index d6b3874..02f7787 100644 --- a/app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/CertificateHelper.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.mitm; +package de.tomcory.heimdall.core.proxy.littleshoot.mitm; import android.os.Build; diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/CertificateSniffingMitmManager.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/CertificateSniffingMitmManager.java similarity index 87% rename from app/src/main/java/org/littleshoot/proxy/mitm/CertificateSniffingMitmManager.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/CertificateSniffingMitmManager.java index 712b2dc..7533d8f 100644 --- a/app/src/main/java/org/littleshoot/proxy/mitm/CertificateSniffingMitmManager.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/CertificateSniffingMitmManager.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.mitm; +package de.tomcory.heimdall.core.proxy.littleshoot.mitm; import java.nio.ByteBuffer; import java.security.cert.Certificate; @@ -8,11 +8,9 @@ import javax.net.ssl.SSLPeerUnverifiedException; import javax.net.ssl.SSLSession; -import org.littleshoot.proxy.MitmManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import de.tomcory.heimdall.core.proxy.littleshoot.MitmManager; -import de.tomcory.heimdall.util.ByteUtils; +import de.tomcory.heimdall.core.util.ByteUtils; import io.netty.handler.codec.http.HttpRequest; import timber.log.Timber; @@ -22,9 +20,6 @@ */ public class CertificateSniffingMitmManager implements MitmManager { - private static final Logger LOG = LoggerFactory - .getLogger(CertificateSniffingMitmManager.class); - private BouncyCastleSslEngineSource sslEngineSource; public CertificateSniffingMitmManager() throws RootCertificateException { @@ -66,7 +61,7 @@ public SSLEngine clientSslEngineFor(HttpRequest httpRequest, SSLSession serverSs san.addAll(upstreamCert.getSubjectAlternativeNames()); - LOG.debug("Subject Alternative Names: {}", san); + Timber.d("Subject Alternative Names: $san"); return sslEngineSource.createCertForHost(commonName, san); } catch (Exception e) { @@ -88,12 +83,12 @@ private X509Certificate getCertificateFromSession(SSLSession sslSession) } public String getCommonName(X509Certificate c) { - LOG.debug("Subject DN principal name: {}", c.getSubjectDN().getName()); + Timber.d("Subject DN principal name: ${c.getSubjectDN().getName()}"); Timber.d("DN " + c.getSubjectX500Principal().getName() + " hash is " + ByteUtils.bytesToHex(ByteBuffer.allocate(4).putInt(c.getSubjectX500Principal().hashCode()).array())); for (String each : c.getSubjectDN().getName().split(",\\s*")) { if (each.startsWith("CN=")) { String result = each.substring(3); - LOG.debug("Common Name: {}", result); + Timber.d("Common Name: $result"); return result; } } diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/FakeCertificateException.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/FakeCertificateException.java similarity index 80% rename from app/src/main/java/org/littleshoot/proxy/mitm/FakeCertificateException.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/FakeCertificateException.java index e46da34..a498c41 100644 --- a/app/src/main/java/org/littleshoot/proxy/mitm/FakeCertificateException.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/FakeCertificateException.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.mitm; +package de.tomcory.heimdall.core.proxy.littleshoot.mitm; public class FakeCertificateException extends RuntimeException { diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/MergeTrustManager.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/MergeTrustManager.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/mitm/MergeTrustManager.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/MergeTrustManager.java index f5cfa3d..d47a2ac 100644 --- a/app/src/main/java/org/littleshoot/proxy/mitm/MergeTrustManager.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/MergeTrustManager.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.mitm; +package de.tomcory.heimdall.core.proxy.littleshoot.mitm; import java.security.KeyStore; import java.security.KeyStoreException; diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/RootCertificateException.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/RootCertificateException.java similarity index 79% rename from app/src/main/java/org/littleshoot/proxy/mitm/RootCertificateException.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/RootCertificateException.java index c3dafef..db2444c 100644 --- a/app/src/main/java/org/littleshoot/proxy/mitm/RootCertificateException.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/RootCertificateException.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.mitm; +package de.tomcory.heimdall.core.proxy.littleshoot.mitm; public class RootCertificateException extends Exception { diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/SSLEngineDemo.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/SSLEngineDemo.java similarity index 99% rename from app/src/main/java/org/littleshoot/proxy/mitm/SSLEngineDemo.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/SSLEngineDemo.java index 3ae331d..64fcddb 100644 --- a/app/src/main/java/org/littleshoot/proxy/mitm/SSLEngineDemo.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/SSLEngineDemo.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.mitm; +package de.tomcory.heimdall.core.proxy.littleshoot.mitm; /* * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/SubjectAlternativeNameHolder.java b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/SubjectAlternativeNameHolder.java similarity index 97% rename from app/src/main/java/org/littleshoot/proxy/mitm/SubjectAlternativeNameHolder.java rename to core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/SubjectAlternativeNameHolder.java index 9504a22..d1b21ae 100644 --- a/app/src/main/java/org/littleshoot/proxy/mitm/SubjectAlternativeNameHolder.java +++ b/core/proxy/src/main/java/de/tomcory/heimdall/core/proxy/littleshoot/mitm/SubjectAlternativeNameHolder.java @@ -1,4 +1,4 @@ -package org.littleshoot.proxy.mitm; +package de.tomcory.heimdall.core.proxy.littleshoot.mitm; import java.util.ArrayList; import java.util.Collection; diff --git a/core/scanner/.gitignore b/core/scanner/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/core/scanner/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/scanner/build.gradle.kts b/core/scanner/build.gradle.kts new file mode 100644 index 0000000..d265257 --- /dev/null +++ b/core/scanner/build.gradle.kts @@ -0,0 +1,42 @@ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) +} + +kotlin { + jvmToolchain (11) +} + +android { + namespace = "de.tomcory.heimdall.core.scanner" + + defaultConfig { + compileSdk = 34 + minSdk = 24 + } +} + +dependencies { + // Timber + implementation (libs.timber) + + // Dex analyser used to detect tracker libraries in apps + implementation (libs.multidexlib2) + implementation (libs.apk.parser) + + // Retrofit + implementation (libs.retrofit) + implementation (libs.retrofit.converter.moshi) + + // Room dependencies + implementation (libs.androidx.room.runtime) + implementation (libs.androidx.room.ktx) + + implementation (libs.androidx.datastore) + implementation (libs.protobuf.javalite) + + implementation (project(":core:database")) + implementation (project(":core:datastore")) + implementation (project(":core:util")) +} \ No newline at end of file diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/code/ExodusUpdater.kt b/core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/ExodusUpdater.kt similarity index 90% rename from app/src/main/java/de/tomcory/heimdall/scanner/code/ExodusUpdater.kt rename to core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/ExodusUpdater.kt index 15767da..8d03b15 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/code/ExodusUpdater.kt +++ b/core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/ExodusUpdater.kt @@ -1,7 +1,7 @@ -package de.tomcory.heimdall.scanner.code +package de.tomcory.heimdall.core.scanner -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.Tracker +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.entity.Tracker import retrofit2.Response import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory @@ -31,14 +31,16 @@ object ExodusUpdater { Timber.d("Updating database...") trackersRaw?.trackers?.values?.forEach{ - trackerList.add(Tracker( + trackerList.add( + Tracker( name = it.name, categories = it.categories.joinToString(","), codeSignature = it.code_signature, networkSignature = it.network_signature, creationDate = it.creation_date, web = it.website - )) + ) + ) } if(trackerList.isNotEmpty()) { diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/code/LibraryScanner.kt b/core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/LibraryScanner.kt similarity index 90% rename from app/src/main/java/de/tomcory/heimdall/scanner/code/LibraryScanner.kt rename to core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/LibraryScanner.kt index afe003c..3ca18c9 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/code/LibraryScanner.kt +++ b/core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/LibraryScanner.kt @@ -1,10 +1,10 @@ -package de.tomcory.heimdall.scanner.code +package de.tomcory.heimdall.core.scanner import android.content.pm.PackageInfo -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.AppXTracker -import de.tomcory.heimdall.persistence.database.entity.Tracker -import de.tomcory.heimdall.util.Trie +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.entity.AppXTracker +import de.tomcory.heimdall.core.database.entity.Tracker +import de.tomcory.heimdall.core.util.Trie import net.dongliu.apk.parser.ApkFile import timber.log.Timber import java.io.File diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/code/PermissionScanner.kt b/core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/PermissionScanner.kt similarity index 92% rename from app/src/main/java/de/tomcory/heimdall/scanner/code/PermissionScanner.kt rename to core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/PermissionScanner.kt index d400563..562ab45 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/code/PermissionScanner.kt +++ b/core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/PermissionScanner.kt @@ -1,9 +1,9 @@ -package de.tomcory.heimdall.scanner.code +package de.tomcory.heimdall.core.scanner import android.content.pm.PackageInfo -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.AppXPermission -import de.tomcory.heimdall.persistence.database.entity.Permission +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.entity.AppXPermission +import de.tomcory.heimdall.core.database.entity.Permission import timber.log.Timber class PermissionScanner { diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/code/ScanManager.kt b/core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/ScanManager.kt similarity index 81% rename from app/src/main/java/de/tomcory/heimdall/scanner/code/ScanManager.kt rename to core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/ScanManager.kt index 2f41e67..9243d9b 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/code/ScanManager.kt +++ b/core/scanner/src/main/java/de/tomcory/heimdall/core/scanner/ScanManager.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.code +package de.tomcory.heimdall.core.scanner import android.content.Context import android.content.pm.ApplicationInfo @@ -9,9 +9,9 @@ import android.graphics.drawable.Drawable import android.os.Build import de.tomcory.heimdall.MonitoringScopeApps import de.tomcory.heimdall.MonitoringScopeApps.* -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.App -import de.tomcory.heimdall.ui.main.preferencesStore +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.datastore.preferencesStore +import de.tomcory.heimdall.core.database.entity.App import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.first import timber.log.Timber @@ -23,6 +23,8 @@ class ScanManager private constructor( suspend fun scanApp(context: Context, packageName: String) { Timber.d("Collecting app info of $packageName") + val data = context.preferencesStore.data.first() + val pm: PackageManager = context.packageManager val packageInfo = try { @@ -43,7 +45,7 @@ class ScanManager private constructor( } val dataStore = context.preferencesStore.data.first() - val scope = dataStore.scanMonitoringScope + val scope = dataStore.permissionMonitoringScope if(!getScanPredicate(scope)(packageInfo)) { Timber.w("App $packageName is not in scan scope $scope") @@ -54,16 +56,16 @@ class ScanManager private constructor( packageName = packageName, label = packageInfo.applicationInfo.loadLabel(pm).toString(), versionName = packageInfo.versionName, - versionCode = packageInfo.longVersionCode, + versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) packageInfo.longVersionCode else packageInfo.versionCode.toLong(), isSystem = packageInfo.applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM != 0 ) HeimdallDatabase.instance?.appDao?.insertApps(app) - if(dataStore.scanPermissionScannerEnable) { + if(data.permissionOnInstall) { permissionScanner.scanApp(packageInfo) } - if(dataStore.scanLibraryScannerEnable) { + if(data.libraryOnInstall) { libraryScanner?.scanApp(packageInfo) } } @@ -72,6 +74,8 @@ class ScanManager private constructor( progress?.emit(0.01f) + val data = context.preferencesStore.data.first() + val pm: PackageManager = context.packageManager val packages = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { pm.getInstalledPackages(PackageManager.PackageInfoFlags.of(PackageManager.GET_META_DATA.toLong())) @@ -81,8 +85,7 @@ class ScanManager private constructor( progress?.emit(0.05f) - val dataStore = context.preferencesStore.data.first() - val scope = dataStore.scanMonitoringScope + val scope = data.permissionMonitoringScope Timber.d("Scanning apps in scope $scope...") @@ -93,7 +96,7 @@ class ScanManager private constructor( packageName = it.packageName, label = it.applicationInfo.loadLabel(pm).toString(), versionName = it.versionName ?: "", - versionCode = it.longVersionCode, + versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) it.longVersionCode else it.versionCode.toLong(), isSystem = it.applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM != 0 ) } @@ -108,7 +111,7 @@ class ScanManager private constructor( var progressValue = 0.1f filtered.forEach { - if(dataStore.scanPermissionScannerEnable) { + if(data.permissionOnInstall) { try { permissionScanner.scanApp(it) } catch (e: Exception) { @@ -116,7 +119,7 @@ class ScanManager private constructor( } } - if(dataStore.scanLibraryScannerEnable) { + if(data.libraryOnInstall) { try { libraryScanner?.scanApp(it) } catch (e: Exception) { @@ -137,17 +140,19 @@ class ScanManager private constructor( APPS_WHITELIST -> { _ -> true } //TODO APPS_BLACKLIST -> { _ -> true } //TODO UNRECOGNIZED -> { _ -> true } + APPS_NON_SYSTEM_BLACKLIST -> TODO() } companion object { - suspend fun create(context: Context): ScanManager { - return ScanManager( - permissionScanner = PermissionScanner(), - libraryScanner = LibraryScanner.create( - context.preferencesStore.data.first().scanLibraryScannerPrepopulate - ) - ) - } + suspend fun create(context: Context): ScanManager = TODO() + +// return ScanManager( +// permissionScanner = PermissionScanner(), +// libraryScanner = LibraryScanner.create( +// context.preferencesStore.data.first().libraryPrepopulate +// ) +// ) + fun getAppIcon(context: Context, packageName: String): Drawable { val pm: PackageManager = context.packageManager diff --git a/core/util/.gitignore b/core/util/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/core/util/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/util/build.gradle.kts b/core/util/build.gradle.kts new file mode 100644 index 0000000..fad67db --- /dev/null +++ b/core/util/build.gradle.kts @@ -0,0 +1,26 @@ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) +} + +kotlin { + jvmToolchain (11) +} + +android { + namespace = "de.tomcory.heimdall.core.util" + + defaultConfig { + compileSdk = 34 + minSdk = 24 + } +} + +dependencies { + implementation (libs.androidx.legacy.support.v4) + implementation (libs.lifecycle.runtime.ktx) + + // Timber + implementation (libs.timber) +} \ No newline at end of file diff --git a/app/src/main/java/de/tomcory/heimdall/util/ByteUtils.java b/core/util/src/main/java/de/tomcory/heimdall/core/util/ByteUtils.java similarity index 95% rename from app/src/main/java/de/tomcory/heimdall/util/ByteUtils.java rename to core/util/src/main/java/de/tomcory/heimdall/core/util/ByteUtils.java index 66a3647..dc3dc95 100644 --- a/app/src/main/java/de/tomcory/heimdall/util/ByteUtils.java +++ b/core/util/src/main/java/de/tomcory/heimdall/core/util/ByteUtils.java @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.util; +package de.tomcory.heimdall.core.util; public class ByteUtils { private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); diff --git a/app/src/main/java/de/tomcory/heimdall/util/FileUtils.kt b/core/util/src/main/java/de/tomcory/heimdall/core/util/FileUtils.kt similarity index 75% rename from app/src/main/java/de/tomcory/heimdall/util/FileUtils.kt rename to core/util/src/main/java/de/tomcory/heimdall/core/util/FileUtils.kt index 8ce51d3..9084547 100644 --- a/app/src/main/java/de/tomcory/heimdall/util/FileUtils.kt +++ b/core/util/src/main/java/de/tomcory/heimdall/core/util/FileUtils.kt @@ -1,9 +1,7 @@ -package de.tomcory.heimdall.util +package de.tomcory.heimdall.core.util import android.content.Context import android.net.Uri -import de.tomcory.heimdall.scanner.traffic.mitm.Authority -import de.tomcory.heimdall.scanner.traffic.mitm.KeyStoreHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import timber.log.Timber @@ -55,18 +53,6 @@ object FileUtils { return true } - /** - * Generates a Magisk module based on the default Authority credentials and writes it to the app's internal cache directory. - */ - suspend fun generateMagiskModule(context: Context): String { - Timber.d("Generating authority...") - val authority = Authority.getDefaultInstance(context) - Timber.d("Loading KeyStore...") - val keyStore = KeyStoreHelper.initialiseOrLoadKeyStore(authority) - Timber.d("Building Magisk module...") - return KeyStoreHelper.createMagiskModuleWithCertificate(context, keyStore, authority) ?: "" - } - fun populateTrieFromRawFile(context: Context, resId: Int, trie: Trie) { val startTime = System.currentTimeMillis() diff --git a/app/src/main/java/de/tomcory/heimdall/util/OsUtils.kt b/core/util/src/main/java/de/tomcory/heimdall/core/util/OsUtils.kt similarity index 97% rename from app/src/main/java/de/tomcory/heimdall/util/OsUtils.kt rename to core/util/src/main/java/de/tomcory/heimdall/core/util/OsUtils.kt index b376dfb..b4d10b9 100644 --- a/app/src/main/java/de/tomcory/heimdall/util/OsUtils.kt +++ b/core/util/src/main/java/de/tomcory/heimdall/core/util/OsUtils.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.util +package de.tomcory.heimdall.core.util import android.content.Context import android.content.pm.ApplicationInfo diff --git a/app/src/main/java/de/tomcory/heimdall/util/Trie.kt b/core/util/src/main/java/de/tomcory/heimdall/core/util/Trie.kt similarity index 65% rename from app/src/main/java/de/tomcory/heimdall/util/Trie.kt rename to core/util/src/main/java/de/tomcory/heimdall/core/util/Trie.kt index f5e3cd7..ae836af 100644 --- a/app/src/main/java/de/tomcory/heimdall/util/Trie.kt +++ b/core/util/src/main/java/de/tomcory/heimdall/core/util/Trie.kt @@ -1,4 +1,8 @@ -package de.tomcory.heimdall.util +package de.tomcory.heimdall.core.util + +import android.content.Context +import java.io.BufferedReader +import java.io.InputStreamReader class Trie(private val pathSplitter: (String) -> List) { private val root = TrieNode() @@ -35,4 +39,19 @@ class Trie(private val pathSplitter: (String) -> List) { private class TrieNode(var isTerminating: Boolean = false) { val children: MutableMap> = mutableMapOf() var item: T? = null +} + +fun populateTrieFromRawFile(context: Context, resId: Int, trie: Trie) { + val inputStream = context.resources.openRawResource(resId) + val reader = BufferedReader(InputStreamReader(inputStream)) + var lineCounter = 0 + + reader.use { r -> + r.forEachLine { line -> + trie.insert(line, line) + lineCounter++ + } + } + + reader.close() } \ No newline at end of file diff --git a/core/vpn/.gitignore b/core/vpn/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/core/vpn/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/vpn/build.gradle.kts b/core/vpn/build.gradle.kts new file mode 100644 index 0000000..d3a4e7d --- /dev/null +++ b/core/vpn/build.gradle.kts @@ -0,0 +1,37 @@ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) +} + +kotlin { + jvmToolchain (11) +} + +android { + namespace = "de.tomcory.heimdall.core.vpn" + + defaultConfig { + compileSdk = 34 + minSdk = 24 + } +} + +dependencies { + implementation (libs.timber) + implementation (libs.lifecycle.runtime.ktx) + + // Room dependencies + implementation (libs.androidx.room.ktx) + + implementation (libs.bouncycastle.bcpkix.jdk15on) + implementation (libs.guava) + implementation (libs.netty.all) { exclude(group = "org.slf4j") } + + // pcap4j + implementation (libs.pcap4j.core) + implementation (libs.pcap4j.packetfactory.static) + + implementation (project(":core:database")) + implementation (project(":core:util")) +} \ No newline at end of file diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/cache/ConnectionCache.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/cache/ConnectionCache.kt similarity index 89% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/cache/ConnectionCache.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/cache/ConnectionCache.kt index 5c3ca9d..b3263a5 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/cache/ConnectionCache.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/cache/ConnectionCache.kt @@ -1,6 +1,6 @@ -package de.tomcory.heimdall.scanner.traffic.cache +package de.tomcory.heimdall.core.vpn.cache -import de.tomcory.heimdall.scanner.traffic.connection.transportLayer.TransportLayerConnection +import de.tomcory.heimdall.core.vpn.connection.transportLayer.TransportLayerConnection import org.pcap4j.packet.IpPacket import org.pcap4j.packet.TransportPacket import timber.log.Timber @@ -74,7 +74,12 @@ class ConnectionCache { ) } - private fun getKey(remoteAddress: InetAddress, protocol: Int, localPort: Int, remotePort: Int): Int { + private fun getKey( + remoteAddress: InetAddress, + protocol: Int, + localPort: Int, + remotePort: Int + ): Int { return remoteAddress.hashCode() xor (protocol shl 16) xor (localPort shl 8) xor remotePort } } diff --git a/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/cache/DnsCache.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/cache/DnsCache.kt new file mode 100644 index 0000000..5d5a076 --- /dev/null +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/cache/DnsCache.kt @@ -0,0 +1,26 @@ +package de.tomcory.heimdall.core.vpn.cache + +import java.util.LinkedHashMap + +class DnsCache { + private val hosts: LinkedHashMap = object : LinkedHashMap(MAX_SIZE) { + override fun removeEldestEntry(eldest: Map.Entry): Boolean { + return size >= MAX_SIZE + } + } + + companion object { + private const val MAX_SIZE = 128 + + //the singleton + private val cache = DnsCache() + @JvmStatic + fun findHost(ipAddress: String): String? { + return cache.hosts[ipAddress] + } + + fun addHost(ipAddress: String, hostname: String) { + cache.hosts[ipAddress] = hostname + } + } +} \ No newline at end of file diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/ComponentManager.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/ComponentManager.kt similarity index 91% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/ComponentManager.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/ComponentManager.kt index 8b1de96..bcaa391 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/ComponentManager.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/ComponentManager.kt @@ -1,18 +1,18 @@ -package de.tomcory.heimdall.scanner.traffic.components +package de.tomcory.heimdall.core.vpn.components import android.content.Context import android.net.VpnService import android.system.ErrnoException import android.system.Os -import de.tomcory.heimdall.R -import de.tomcory.heimdall.scanner.traffic.cache.ConnectionCache -import de.tomcory.heimdall.scanner.traffic.metadata.AppFinder -import de.tomcory.heimdall.scanner.traffic.metadata.DnsCache -import de.tomcory.heimdall.scanner.traffic.metadata.TlsPassthroughCache -import de.tomcory.heimdall.scanner.traffic.mitm.Authority -import de.tomcory.heimdall.scanner.traffic.mitm.CertificateSniffingMitmManager -import de.tomcory.heimdall.scanner.traffic.mitm.VpnComponentLaunchException -import de.tomcory.heimdall.util.Trie +import de.tomcory.heimdall.core.vpn.R +import de.tomcory.heimdall.core.vpn.cache.ConnectionCache +import de.tomcory.heimdall.core.vpn.metadata.AppFinder +import de.tomcory.heimdall.core.vpn.metadata.DnsCache +import de.tomcory.heimdall.core.vpn.metadata.TlsPassthroughCache +import de.tomcory.heimdall.core.vpn.mitm.Authority +import de.tomcory.heimdall.core.vpn.mitm.CertificateSniffingMitmManager +import de.tomcory.heimdall.core.vpn.mitm.VpnComponentLaunchException +import de.tomcory.heimdall.core.util.Trie import org.pcap4j.packet.IllegalRawDataException import org.pcap4j.packet.IpV4Packet import org.pcap4j.packet.TcpPacket @@ -34,7 +34,11 @@ class ComponentManager( val vpnService: VpnService?, val doMitm: Boolean = false, val maxPacketSize: Int = 16413, - private val trackerTrie: Trie = Trie { it.split(".").reversed() } + private val trackerTrie: de.tomcory.heimdall.core.util.Trie = de.tomcory.heimdall.core.util.Trie { + it.split( + "." + ).reversed() + } ) { private var devicePollThread: DevicePollThread? = null @@ -213,7 +217,7 @@ class ComponentManager( Timber.d("Completed pcap4j configuration") } - private fun populateTrieFromRawFile(context: Context, resId: Int, trie: Trie) { + private fun populateTrieFromRawFile(context: Context, resId: Int, trie: de.tomcory.heimdall.core.util.Trie) { val startTime = System.currentTimeMillis() val inputStream = context.resources.openRawResource(resId) diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/DevicePollThread.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/DevicePollThread.kt similarity index 96% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/DevicePollThread.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/DevicePollThread.kt index 79e9d0c..a4c5be1 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/DevicePollThread.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/DevicePollThread.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.components +package de.tomcory.heimdall.core.vpn.components import android.os.Handler import android.os.Process @@ -6,7 +6,6 @@ import android.system.ErrnoException import android.system.Os import android.system.OsConstants import android.system.StructPollfd -import de.tomcory.heimdall.persistence.VpnStats import org.pcap4j.packet.* import timber.log.Timber import java.io.FileDescriptor @@ -159,10 +158,6 @@ class DevicePollThread internal constructor( } else { IpV6Packet.newPacket(rawPacket, 0, rawPacket.size) } - - // update the Statistics singleton's data - VpnStats.increaseSessionStatsOut(rawPacket) - return parsedPacket } diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/DeviceWriteThread.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/DeviceWriteThread.kt similarity index 96% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/DeviceWriteThread.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/DeviceWriteThread.kt index 5e7b9ab..a04a625 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/DeviceWriteThread.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/DeviceWriteThread.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.components +package de.tomcory.heimdall.core.vpn.components import android.os.Handler import android.os.HandlerThread diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/InboundTrafficHandler.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/InboundTrafficHandler.kt similarity index 91% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/InboundTrafficHandler.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/InboundTrafficHandler.kt index f8b14dc..6d501dd 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/InboundTrafficHandler.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/InboundTrafficHandler.kt @@ -1,7 +1,7 @@ -package de.tomcory.heimdall.scanner.traffic.components +package de.tomcory.heimdall.core.vpn.components import android.os.Process -import de.tomcory.heimdall.scanner.traffic.connection.transportLayer.TransportLayerConnection +import de.tomcory.heimdall.core.vpn.connection.transportLayer.TransportLayerConnection import timber.log.Timber import java.io.IOException diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/OutboundTrafficHandler.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/OutboundTrafficHandler.kt similarity index 89% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/OutboundTrafficHandler.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/OutboundTrafficHandler.kt index ba7b3c1..c02f44d 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/components/OutboundTrafficHandler.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/components/OutboundTrafficHandler.kt @@ -1,10 +1,10 @@ -package de.tomcory.heimdall.scanner.traffic.components +package de.tomcory.heimdall.core.vpn.components import android.os.Handler import android.os.HandlerThread import android.os.Message import android.os.Process -import de.tomcory.heimdall.scanner.traffic.connection.transportLayer.TransportLayerConnection +import de.tomcory.heimdall.core.vpn.connection.transportLayer.TransportLayerConnection import org.pcap4j.packet.IpPacket import timber.log.Timber diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/AppLayerConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/AppLayerConnection.kt similarity index 93% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/AppLayerConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/AppLayerConnection.kt index 8bdc4e0..ff17545 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/AppLayerConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/AppLayerConnection.kt @@ -1,7 +1,7 @@ -package de.tomcory.heimdall.scanner.traffic.connection.appLayer +package de.tomcory.heimdall.core.vpn.connection.appLayer -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.connection.encryptionLayer.EncryptionLayerConnection +import de.tomcory.heimdall.core.vpn.components.ComponentManager +import de.tomcory.heimdall.core.vpn.connection.encryptionLayer.EncryptionLayerConnection import org.pcap4j.packet.DnsPacket import org.pcap4j.packet.Packet diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/DnsConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/DnsConnection.kt similarity index 88% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/DnsConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/DnsConnection.kt index aa42283..8307647 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/DnsConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/DnsConnection.kt @@ -1,7 +1,7 @@ -package de.tomcory.heimdall.scanner.traffic.connection.appLayer +package de.tomcory.heimdall.core.vpn.connection.appLayer -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.connection.encryptionLayer.EncryptionLayerConnection +import de.tomcory.heimdall.core.vpn.components.ComponentManager +import de.tomcory.heimdall.core.vpn.connection.encryptionLayer.EncryptionLayerConnection import org.pcap4j.packet.DnsPacket import org.pcap4j.packet.DnsRDataA import org.pcap4j.packet.DnsRDataAaaa diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/HttpConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/HttpConnection.kt similarity index 96% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/HttpConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/HttpConnection.kt index 71cdbed..a53c66f 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/HttpConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/HttpConnection.kt @@ -1,10 +1,10 @@ -package de.tomcory.heimdall.scanner.traffic.connection.appLayer +package de.tomcory.heimdall.core.vpn.connection.appLayer -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.Request -import de.tomcory.heimdall.persistence.database.entity.Response -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.connection.encryptionLayer.EncryptionLayerConnection +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.entity.Request +import de.tomcory.heimdall.core.database.entity.Response +import de.tomcory.heimdall.core.vpn.components.ComponentManager +import de.tomcory.heimdall.core.vpn.connection.encryptionLayer.EncryptionLayerConnection import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/RawConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/RawConnection.kt similarity index 83% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/RawConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/RawConnection.kt index bb9b63f..2883e60 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/appLayer/RawConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/appLayer/RawConnection.kt @@ -1,7 +1,7 @@ -package de.tomcory.heimdall.scanner.traffic.connection.appLayer +package de.tomcory.heimdall.core.vpn.connection.appLayer -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.connection.encryptionLayer.EncryptionLayerConnection +import de.tomcory.heimdall.core.vpn.components.ComponentManager +import de.tomcory.heimdall.core.vpn.connection.encryptionLayer.EncryptionLayerConnection import org.pcap4j.packet.Packet import timber.log.Timber diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/EncryptionLayerConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/EncryptionLayerConnection.kt similarity index 93% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/EncryptionLayerConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/EncryptionLayerConnection.kt index 0b047fe..eff2b7b 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/EncryptionLayerConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/EncryptionLayerConnection.kt @@ -1,8 +1,8 @@ -package de.tomcory.heimdall.scanner.traffic.connection.encryptionLayer +package de.tomcory.heimdall.core.vpn.connection.encryptionLayer -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.connection.appLayer.AppLayerConnection -import de.tomcory.heimdall.scanner.traffic.connection.transportLayer.TransportLayerConnection +import de.tomcory.heimdall.core.vpn.components.ComponentManager +import de.tomcory.heimdall.core.vpn.connection.appLayer.AppLayerConnection +import de.tomcory.heimdall.core.vpn.connection.transportLayer.TransportLayerConnection import org.pcap4j.packet.Packet import timber.log.Timber diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/PlaintextConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/PlaintextConnection.kt similarity index 82% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/PlaintextConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/PlaintextConnection.kt index 0473782..d0ac987 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/PlaintextConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/PlaintextConnection.kt @@ -1,7 +1,7 @@ -package de.tomcory.heimdall.scanner.traffic.connection.encryptionLayer +package de.tomcory.heimdall.core.vpn.connection.encryptionLayer -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.connection.transportLayer.TransportLayerConnection +import de.tomcory.heimdall.core.vpn.components.ComponentManager +import de.tomcory.heimdall.core.vpn.connection.transportLayer.TransportLayerConnection import org.pcap4j.packet.Packet import timber.log.Timber diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/QuicConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/QuicConnection.kt similarity index 82% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/QuicConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/QuicConnection.kt index 553a83d..4b16919 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/QuicConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/QuicConnection.kt @@ -1,7 +1,7 @@ -package de.tomcory.heimdall.scanner.traffic.connection.encryptionLayer +package de.tomcory.heimdall.core.vpn.connection.encryptionLayer -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.connection.transportLayer.TransportLayerConnection +import de.tomcory.heimdall.core.vpn.components.ComponentManager +import de.tomcory.heimdall.core.vpn.connection.transportLayer.TransportLayerConnection import org.pcap4j.packet.Packet import timber.log.Timber diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/TlsConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/TlsConnection.kt similarity index 97% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/TlsConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/TlsConnection.kt index ef66f2c..08623a1 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/encryptionLayer/TlsConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/encryptionLayer/TlsConnection.kt @@ -1,8 +1,8 @@ -package de.tomcory.heimdall.scanner.traffic.connection.encryptionLayer +package de.tomcory.heimdall.core.vpn.connection.encryptionLayer -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.connection.transportLayer.TransportLayerConnection -import de.tomcory.heimdall.util.ByteUtils +import de.tomcory.heimdall.core.vpn.components.ComponentManager +import de.tomcory.heimdall.core.vpn.connection.transportLayer.TransportLayerConnection +import de.tomcory.heimdall.core.util.ByteUtils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -168,7 +168,7 @@ class TlsConnection( } if(recordType == RecordType.ALERT) { - Timber.w("tls$id outbound alert in state $state ${ByteUtils.bytesToHex(record)}") + Timber.w("tls$id outbound alert in state $state ${de.tomcory.heimdall.core.util.ByteUtils.bytesToHex(record)}") } when (state) { @@ -178,7 +178,7 @@ class TlsConnection( initiateServerHandshake(record) } else { Timber.e("tls$id Invalid outbound record ($recordType in state $state)") - Timber.e("tls$id ${ByteUtils.bytesToHex(record)}") + Timber.e("tls$id ${de.tomcory.heimdall.core.util.ByteUtils.bytesToHex(record)}") //TODO("tls$id error handling") } } @@ -186,7 +186,7 @@ class TlsConnection( // server-facing handshake ongoing, any messages from the client are unexpected ConnectionState.SERVER_HANDSHAKE, ConnectionState.SERVER_ESTABLISHED -> { Timber.e("tls$id handleOutboundRecord Invalid outbound record ($recordType in state $state)") - Timber.e("tls$id ${ByteUtils.bytesToHex(record)}") + Timber.e("tls$id ${de.tomcory.heimdall.core.util.ByteUtils.bytesToHex(record)}") //TODO("tls$id error handling") } @@ -246,7 +246,7 @@ class TlsConnection( } if(recordType == RecordType.ALERT) { - Timber.w("tls$id inbound alert in state $state ${ByteUtils.bytesToHex(record)}") + Timber.w("tls$id inbound alert in state $state ${de.tomcory.heimdall.core.util.ByteUtils.bytesToHex(record)}") } when(state) { @@ -764,8 +764,8 @@ class TlsConnection( } else { // make sure that we have a valid TLS record... if(recordType !in 0x14..0x17) { - Timber.e("tls$id Invalid TLS record type: ${ByteUtils.bytesToHex(recordType.toByte())}") - Timber.e("tls$id ${ByteUtils.bytesToHex(payload)}") + Timber.e("tls$id Invalid TLS record type: ${de.tomcory.heimdall.core.util.ByteUtils.bytesToHex(recordType.toByte())}") + Timber.e("tls$id ${de.tomcory.heimdall.core.util.ByteUtils.bytesToHex(payload)}") return } @@ -888,7 +888,7 @@ class TlsConnection( NEW, /** - * Server-facing SSLEngine initialisedand TLS handshake in progress. + * Server-facing SSLEngine initialised and TLS handshake in progress. */ SERVER_HANDSHAKE, diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/inetLayer/IpPacketBuilder.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/inetLayer/IpPacketBuilder.kt similarity index 91% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/inetLayer/IpPacketBuilder.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/inetLayer/IpPacketBuilder.kt index 198bc8d..3b00e6b 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/inetLayer/IpPacketBuilder.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/inetLayer/IpPacketBuilder.kt @@ -1,12 +1,11 @@ -package de.tomcory.heimdall.scanner.traffic.connection.inetLayer +package de.tomcory.heimdall.core.vpn.connection.inetLayer -import de.tomcory.heimdall.scanner.traffic.cache.ConnectionCache +import de.tomcory.heimdall.core.vpn.cache.ConnectionCache import org.pcap4j.packet.IpPacket import org.pcap4j.packet.IpV4Packet import org.pcap4j.packet.IpV6Packet import org.pcap4j.packet.Packet import org.pcap4j.packet.namednumber.IpNumber -import timber.log.Timber import java.net.InetAddress /** @@ -53,7 +52,7 @@ abstract class IpPacketBuilder protected constructor( is IpV6Packet -> IpV6PacketBuilder.buildStray(strayPacket, payloadBuilder) else -> null } - //Timber.d("Built response for stray packet: %s", strayResponse) + return strayResponse } } diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/inetLayer/IpV4PacketBuilder.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/inetLayer/IpV4PacketBuilder.kt similarity index 97% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/inetLayer/IpV4PacketBuilder.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/inetLayer/IpV4PacketBuilder.kt index 84bc58c..a60137b 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/inetLayer/IpV4PacketBuilder.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/inetLayer/IpV4PacketBuilder.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.connection.inetLayer +package de.tomcory.heimdall.core.vpn.connection.inetLayer import org.pcap4j.packet.IpPacket import org.pcap4j.packet.IpV4Packet diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/inetLayer/IpV6PacketBuilder.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/inetLayer/IpV6PacketBuilder.kt similarity index 97% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/inetLayer/IpV6PacketBuilder.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/inetLayer/IpV6PacketBuilder.kt index 6cb60a0..8cb2171 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/inetLayer/IpV6PacketBuilder.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/inetLayer/IpV6PacketBuilder.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.connection.inetLayer +package de.tomcory.heimdall.core.vpn.connection.inetLayer import org.pcap4j.packet.IpPacket import org.pcap4j.packet.IpV6Packet diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/transportLayer/TcpConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/transportLayer/TcpConnection.kt similarity index 97% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/transportLayer/TcpConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/transportLayer/TcpConnection.kt index eb30a06..994646b 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/transportLayer/TcpConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/transportLayer/TcpConnection.kt @@ -1,12 +1,10 @@ -package de.tomcory.heimdall.scanner.traffic.connection.transportLayer +package de.tomcory.heimdall.core.vpn.connection.transportLayer import android.net.VpnService import android.os.Handler import android.system.OsConstants -import de.tomcory.heimdall.scanner.traffic.cache.ConnectionCache -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.components.DeviceWriteThread -import de.tomcory.heimdall.scanner.traffic.connection.inetLayer.IpPacketBuilder +import de.tomcory.heimdall.core.vpn.components.DeviceWriteThread +import de.tomcory.heimdall.core.vpn.connection.inetLayer.IpPacketBuilder import org.pcap4j.packet.IpPacket import org.pcap4j.packet.Packet import org.pcap4j.packet.TcpPacket @@ -32,7 +30,7 @@ import java.util.Arrays * @param ipPacketBuilder */ class TcpConnection internal constructor( - componentManager: ComponentManager, + componentManager: de.tomcory.heimdall.core.vpn.components.ComponentManager, deviceWriter: Handler, initialPacket: TcpPacket, ipPacketBuilder: IpPacketBuilder, @@ -80,7 +78,7 @@ class TcpConnection internal constructor( private fun connectChannel(selector: Selector): SelectionKey? { // register OP_READ interest for the channel - synchronized(ComponentManager.selectorMonitor) { + synchronized(de.tomcory.heimdall.core.vpn.components.ComponentManager.selectorMonitor) { selector.wakeup() val selectionKey = try { selectableChannel.register(selector, SelectionKey.OP_CONNECT) @@ -230,7 +228,7 @@ class TcpConnection internal constructor( TransportLayerState.CLOSING -> { // closing handshake complete, set status to CLOSED state = TransportLayerState.CLOSED - ConnectionCache.removeConnection(this) + de.tomcory.heimdall.core.vpn.cache.ConnectionCache.removeConnection(this) } else -> { // there is no good reason for an acknowledgement in any other flow state, abort @@ -301,7 +299,7 @@ class TcpConnection internal constructor( if (state == TransportLayerState.CLOSING) { // client and server agree that the connection is close state = TransportLayerState.CLOSED - ConnectionCache.removeConnection(this) + de.tomcory.heimdall.core.vpn.cache.ConnectionCache.removeConnection(this) } else { // connection closed by server, move to CLOSING state and send a FIN to initiate the local closing handshake Timber.d("tcp$id SocketChannel closed, state transition $state -> CLOSING") diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/transportLayer/TransportLayerConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/transportLayer/TransportLayerConnection.kt similarity index 87% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/transportLayer/TransportLayerConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/transportLayer/TransportLayerConnection.kt index 20bda02..e4e79aa 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/transportLayer/TransportLayerConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/transportLayer/TransportLayerConnection.kt @@ -1,12 +1,11 @@ -package de.tomcory.heimdall.scanner.traffic.connection.transportLayer +package de.tomcory.heimdall.core.vpn.connection.transportLayer import android.os.Handler -import de.tomcory.heimdall.persistence.database.HeimdallDatabase -import de.tomcory.heimdall.persistence.database.entity.Connection -import de.tomcory.heimdall.scanner.traffic.cache.ConnectionCache -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.connection.encryptionLayer.EncryptionLayerConnection -import de.tomcory.heimdall.scanner.traffic.connection.inetLayer.IpPacketBuilder +import de.tomcory.heimdall.core.database.HeimdallDatabase +import de.tomcory.heimdall.core.database.entity.Connection +import de.tomcory.heimdall.core.vpn.cache.ConnectionCache +import de.tomcory.heimdall.core.vpn.connection.encryptionLayer.EncryptionLayerConnection +import de.tomcory.heimdall.core.vpn.connection.inetLayer.IpPacketBuilder import kotlinx.coroutines.runBlocking import org.pcap4j.packet.IpPacket import org.pcap4j.packet.Packet @@ -23,7 +22,7 @@ import java.nio.channels.Selector */ abstract class TransportLayerConnection protected constructor( val deviceWriter: Handler, - val componentManager: ComponentManager, + val componentManager: de.tomcory.heimdall.core.vpn.components.ComponentManager, val localPort: Int, val remotePort: Int, val remoteHost: String?, @@ -129,17 +128,19 @@ abstract class TransportLayerConnection protected constructor( 0 } else { runBlocking { - val ids = HeimdallDatabase.instance?.connectionDao?.insert(Connection( - protocol = protocol, - initialTimestamp = System.currentTimeMillis(), - initiatorId = appId ?: -1, - initiatorPkg = appPackage ?: appId.toString(), - localPort = localPort, - remoteHost = remoteHost ?: "", - remoteIp = ipPacketBuilder.remoteAddress.hostAddress ?: "", - remotePort = remotePort, - isTracker = isTracker - )) + val ids = HeimdallDatabase.instance?.connectionDao?.insert( + Connection( + protocol = protocol, + initialTimestamp = System.currentTimeMillis(), + initiatorId = appId ?: -1, + initiatorPkg = appPackage ?: appId.toString(), + localPort = localPort, + remoteHost = remoteHost ?: "", + remoteIp = ipPacketBuilder.remoteAddress.hostAddress ?: "", + remotePort = remotePort, + isTracker = isTracker + ) + ) return@runBlocking ids?.first() ?: -1 } @@ -183,7 +184,7 @@ abstract class TransportLayerConnection protected constructor( */ fun getInstance( initialPacket: IpPacket, - componentManager: ComponentManager, + componentManager: de.tomcory.heimdall.core.vpn.components.ComponentManager, deviceWriter: Handler,) : TransportLayerConnection? { diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/transportLayer/UdpConnection.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/transportLayer/UdpConnection.kt similarity index 94% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/transportLayer/UdpConnection.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/transportLayer/UdpConnection.kt index 8f76e3a..1bcc09c 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/connection/transportLayer/UdpConnection.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/connection/transportLayer/UdpConnection.kt @@ -1,11 +1,10 @@ -package de.tomcory.heimdall.scanner.traffic.connection.transportLayer +package de.tomcory.heimdall.core.vpn.connection.transportLayer import android.net.VpnService import android.os.Handler import android.system.OsConstants -import de.tomcory.heimdall.scanner.traffic.components.ComponentManager -import de.tomcory.heimdall.scanner.traffic.components.DeviceWriteThread -import de.tomcory.heimdall.scanner.traffic.connection.inetLayer.IpPacketBuilder +import de.tomcory.heimdall.core.vpn.components.DeviceWriteThread +import de.tomcory.heimdall.core.vpn.connection.inetLayer.IpPacketBuilder import org.pcap4j.packet.Packet import org.pcap4j.packet.UdpPacket import org.pcap4j.packet.UnknownPacket @@ -29,7 +28,7 @@ import java.util.Arrays * @param ipPacketBuilder */ class UdpConnection internal constructor( - componentManager: ComponentManager, + componentManager: de.tomcory.heimdall.core.vpn.components.ComponentManager, deviceWriter: Handler, initialPacket: UdpPacket, ipPacketBuilder: IpPacketBuilder, @@ -70,7 +69,7 @@ class UdpConnection internal constructor( private fun connectChannel(selector: Selector): SelectionKey? { // register OP_READ interest for the channel - synchronized(ComponentManager.selectorMonitor) { + synchronized(de.tomcory.heimdall.core.vpn.components.ComponentManager.selectorMonitor) { selector.wakeup() val selectionKey = try { selectableChannel.register(selector, SelectionKey.OP_READ) diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/metadata/AppFinder.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/metadata/AppFinder.kt similarity index 98% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/metadata/AppFinder.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/metadata/AppFinder.kt index d14fc30..a08a3bc 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/metadata/AppFinder.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/metadata/AppFinder.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.metadata +package de.tomcory.heimdall.core.vpn.metadata import android.content.Context import android.content.pm.PackageManager diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/metadata/DnsCache.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/metadata/DnsCache.kt similarity index 96% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/metadata/DnsCache.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/metadata/DnsCache.kt index 8fa9314..3368a44 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/metadata/DnsCache.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/metadata/DnsCache.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.metadata +package de.tomcory.heimdall.core.vpn.metadata import timber.log.Timber import java.util.concurrent.TimeUnit diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/metadata/TlsPassthroughCache.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/metadata/TlsPassthroughCache.kt similarity index 93% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/metadata/TlsPassthroughCache.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/metadata/TlsPassthroughCache.kt index af6b98b..88aa6fb 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/metadata/TlsPassthroughCache.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/metadata/TlsPassthroughCache.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.metadata +package de.tomcory.heimdall.core.vpn.metadata import timber.log.Timber import java.util.concurrent.locks.ReentrantReadWriteLock diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/Authority.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/Authority.kt similarity index 97% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/Authority.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/Authority.kt index 46f2af2..bbd9e45 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/Authority.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/Authority.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm +package de.tomcory.heimdall.core.vpn.mitm import android.content.Context import timber.log.Timber @@ -102,7 +102,7 @@ class Authority ( Timber.d("convertStreamToString") val reader = BufferedReader(InputStreamReader(`is`)) val sb = StringBuilder() - var line: String? = null + var line: String? while (reader.readLine().also { line = it } != null) { sb.append(line).append("\n") } diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/CertificateHelper.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/CertificateHelper.kt similarity index 99% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/CertificateHelper.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/CertificateHelper.kt index 45eaab5..381049e 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/CertificateHelper.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/CertificateHelper.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm +package de.tomcory.heimdall.core.vpn.mitm import org.bouncycastle.jce.provider.BouncyCastleProvider import org.bouncycastle.operator.OperatorCreationException diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/CertificateSniffingMitmManager.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/CertificateSniffingMitmManager.kt similarity index 98% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/CertificateSniffingMitmManager.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/CertificateSniffingMitmManager.kt index 4e16294..f85e878 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/CertificateSniffingMitmManager.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/CertificateSniffingMitmManager.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm +package de.tomcory.heimdall.core.vpn.mitm import java.security.cert.X509Certificate import javax.net.ssl.SSLEngine diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/Exceptions.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/Exceptions.kt similarity index 87% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/Exceptions.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/Exceptions.kt index d6550d1..c758612 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/Exceptions.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/Exceptions.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm +package de.tomcory.heimdall.core.vpn.mitm import java.lang.RuntimeException import kotlin.Exception diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/KeyStoreHelper.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/KeyStoreHelper.kt similarity index 99% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/KeyStoreHelper.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/KeyStoreHelper.kt index ce8e8ce..556afbb 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/KeyStoreHelper.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/KeyStoreHelper.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm +package de.tomcory.heimdall.core.vpn.mitm import android.content.Context import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/MergeTrustManager.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/MergeTrustManager.kt similarity index 97% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/MergeTrustManager.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/MergeTrustManager.kt index ac916b0..edaefed 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/MergeTrustManager.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/MergeTrustManager.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm +package de.tomcory.heimdall.core.vpn.mitm import java.lang.IllegalStateException import java.security.KeyStore diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/SSLEngineSource.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/SSLEngineSource.kt similarity index 99% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/SSLEngineSource.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/SSLEngineSource.kt index 2e06fee..59ad693 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/SSLEngineSource.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/SSLEngineSource.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm +package de.tomcory.heimdall.core.vpn.mitm import com.google.common.cache.Cache import com.google.common.cache.CacheBuilder diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/SubjectAlternativeNameHolder.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/SubjectAlternativeNameHolder.kt similarity index 97% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/SubjectAlternativeNameHolder.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/SubjectAlternativeNameHolder.kt index d92d8bf..b1ad8ac 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/SubjectAlternativeNameHolder.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/SubjectAlternativeNameHolder.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm +package de.tomcory.heimdall.core.vpn.mitm import org.bouncycastle.asn1.ASN1Encodable import org.bouncycastle.cert.CertIOException diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/nio/NioSslClient.java b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/nio/NioSslClient.java similarity index 99% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/nio/NioSslClient.java rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/nio/NioSslClient.java index 595c24c..c94944e 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/nio/NioSslClient.java +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/nio/NioSslClient.java @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm.nio; +package de.tomcory.heimdall.core.vpn.mitm.nio; /** * An SSL/TLS client that connects to a server using its IP address and port. diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/nio/NioSslPeer.kt b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/nio/NioSslPeer.kt similarity index 99% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/nio/NioSslPeer.kt rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/nio/NioSslPeer.kt index 6a6796f..e1cee35 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/nio/NioSslPeer.kt +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/nio/NioSslPeer.kt @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm.nio +package de.tomcory.heimdall.core.vpn.mitm.nio import kotlin.Throws import timber.log.Timber @@ -416,13 +416,13 @@ abstract class NioSslPeer( * @return A new buffer with a larger capacity. `` */ protected fun enlargeBuffer(buffer: ByteBuffer, sessionProposedCapacity: Int): ByteBuffer { - var buffer = buffer - buffer = if (sessionProposedCapacity > buffer.capacity()) { + var b = buffer + b = if (sessionProposedCapacity > b.capacity()) { ByteBuffer.allocate(sessionProposedCapacity) } else { - ByteBuffer.allocate(buffer.capacity() * 2) + ByteBuffer.allocate(b.capacity() * 2) } - return buffer + return b } /** diff --git a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/nio/NioSslServer.java b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/nio/NioSslServer.java similarity index 99% rename from app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/nio/NioSslServer.java rename to core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/nio/NioSslServer.java index 0e53d48..c60e9f6 100644 --- a/app/src/main/java/de/tomcory/heimdall/scanner/traffic/mitm/nio/NioSslServer.java +++ b/core/vpn/src/main/java/de/tomcory/heimdall/core/vpn/mitm/nio/NioSslServer.java @@ -1,4 +1,4 @@ -package de.tomcory.heimdall.scanner.traffic.mitm.nio; +package de.tomcory.heimdall.core.vpn.mitm.nio; import java.io.IOException; import java.net.InetSocketAddress; diff --git a/app/src/main/res/raw/adhosts.txt b/core/vpn/src/main/res/raw/adhosts.txt similarity index 100% rename from app/src/main/res/raw/adhosts.txt rename to core/vpn/src/main/res/raw/adhosts.txt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..a1861b5 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,132 @@ +[versions] +accompanist = "0.30.1" +activity-compose = "1.8.1" +android-gradle = "8.1.4" +androidx-junit = "1.1.5" +apk-parser = "2.6.10" +appcompat = "1.6.1" +bouncycastle = "1.69" +commonsIo = "2.6" +compose = "1.5.4" +compose-compiler = "1.5.3" # must match kotlin, see https://developer.android.com/jetpack/androidx/releases/compose-kotlin +compose-material3 = "1.2.0-alpha11" +constraintlayout = "2.1.4" +datastore = "1.0.0" +dnssec4j = "0.1.6" +espresso = "3.5.1" +guava = "24.1-jre" +hilt-navigation-compose = "1.1.0" +hilt = "2.48.1" +junit = "4.13.2" +jzlib = "1.1.3" +kotlin = "1.9.10" +kotlin-serialization-plugin = "1.8.21" +kotlinx-serialization-json = "1.6.0" +ksp = "1.9.10-1.0.13" # must match kotlin +legacy-support-v4 = "1.0.0" +lifecycle = "2.6.2" +lightbody-mitm = "2.1.5" +mpAndroidChart = "v3.1.0" +multidexlib2 = "2.3.4.r2" +navigation = "2.7.5" +netty= "4.1.58.Final" +okhttp = "5.0.0-alpha.2" +opencsv = "5.6" +palette-ktx = "1.0.0" +pcap4j = "1.7.6" +preference-ktx = "1.2.1" +protobuf-plugin = "0.9.0" +protobuf-base = "3.25.1" +retrofit = "2.9.0" +robolectric = "4.10.3" +room = "2.6.0" +runner = "1.5.2" +test = "1.5.0" +test-runner = "1.5.2" +timber = "4.7.1" +toolchain = "0.4.0" +vico = "1.12.0" +material = "1.8.0" + +[libraries] +accompanist-drawablepainter = { module = "com.google.accompanist:accompanist-drawablepainter", version.ref = "accompanist" } +accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" } +activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activity-compose" } +androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" } +androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" } +androidx-datastore = { module = "androidx.datastore:datastore", version.ref = "datastore" } +androidx-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso" } +androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hilt-navigation-compose" } +androidx-legacy-support-v4 = { module = "androidx.legacy:legacy-support-v4", version.ref = "legacy-support-v4" } +androidx-compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "compose-material3" } +androidx-compose-material3-windowsizeclass = { module = "androidx.compose.material3:material3-window-size-class", version.ref = "compose-material3" } +androidx-kotlin = { group = "androidx.core", name = "core-ktx", version.ref = "kotlin" } +androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigation" } +androidx-navigation-fragment-ktx = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "navigation" } +androidx-navigation-ui-ktx = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "navigation" } +androidx-palette-ktx = { module = "androidx.palette:palette-ktx", version.ref = "palette-ktx" } +androidx-preference-ktx = { module = "androidx.preference:preference-ktx", version.ref = "preference-ktx" } +androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } +androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" } +androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" } +androidx-test-core = { module = "androidx.test:core", version.ref = "test" } +androidx-test-junit = { module = "androidx.test.ext:junit", version.ref = "androidx-junit" } +androidx-test-runner = { module = "androidx.test:runner", version.ref = "test-runner" } +androidx-test-rules = { module = "androidx.test:rules", version.ref = "test" } +androidx-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" } +androidx-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" } +androidx-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" } +apk-parser = { module = "net.dongliu:apk-parser", version.ref = "apk-parser" } +bouncycastle-bcpkix-jdk15on = { module = "org.bouncycastle:bcpkix-jdk15on", version.ref = "bouncycastle" } +bouncycastle-bcprov-jdk15on = { module = "org.bouncycastle:bcprov-jdk15on", version.ref = "bouncycastle" } +commons-io = { module = "commons-io:commons-io", version.ref = "commonsIo" } +dagger-compiler = { module = "com.google.dagger:dagger-compiler", version.ref = "hilt" } +dnssec4j = { module = "org.littleshoot:dnssec4j", version.ref = "dnssec4j" } +gradle = { module = "com.android.tools.build:gradle", version.ref = "android-gradle" } +guava = { module = "com.google.guava:guava", version.ref = "guava" } +hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" } +hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" } +junit = { module = "junit:junit", version.ref = "junit" } +jzlib = { module = "com.jcraft:jzlib", version.ref = "jzlib" } +kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +hilt-android-gradle-plugin = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "hilt" } +kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" } +lifecycle-common-java8 = { module = "androidx.lifecycle:lifecycle-common-java8", version.ref = "lifecycle" } +lifecycle-livedata-ktx = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "lifecycle" } +lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "lifecycle" } +lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle" } +lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycle" } +lightbody-mitm = { module = "net.lightbody.bmp:mitm", version.ref = "lightbody-mitm" } +mpAndroidChart = { module = "com.github.PhilJay:MPAndroidChart", version.ref = "mpAndroidChart" } +multidexlib2 = { module = "com.github.lanchon.dexpatcher:multidexlib2", version.ref = "multidexlib2" } +navigation-safe-args-gradle-plugin = { module = "androidx.navigation:navigation-safe-args-gradle-plugin", version.ref = "navigation" } +netty-all = { module = "io.netty:netty-all", version.ref = "netty" } +okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } +opencsv = { module = "com.opencsv:opencsv", version.ref = "opencsv" } +pcap4j-core = { module = "org.pcap4j:pcap4j-core", version.ref = "pcap4j" } +pcap4j-packetfactory-static = { module = "org.pcap4j:pcap4j-packetfactory-static", version.ref = "pcap4j" } +protobuf-javalite = { module = "com.google.protobuf:protobuf-javalite", version.ref = "protobuf-base" } +protobuf-kotlin-lite = { group = "com.google.protobuf", name = "protobuf-kotlin-lite", version.ref = "protobuf-base" } +protobuf-protoc = { module = "com.google.protobuf:protoc", version.ref = "protobuf-base" } +retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } +retrofit-converter-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "retrofit" } +robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" } +timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } +ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "compose" } +ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "compose" } +vico-compose = { module = "com.patrykandpatrick.vico:compose", version.ref = "vico" } +vico-composem3 = { module = "com.patrykandpatrick.vico:compose-m3", version.ref = "vico" } +vico-core = { module = "com.patrykandpatrick.vico:core", version.ref = "vico" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "android-gradle" } +android-library = { id = "com.android.library", version.ref = "android-gradle" } +androidx-navigation-safeargs = { id = "androidx.navigation.safeargs", version.ref = "protobuf-plugin" } +hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin-serialization-plugin" } +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } +protobuf = { id = "com.google.protobuf", version.ref = "protobuf-plugin" } +toolchain = { id = "org.gradle.toolchains.foojay-resolver-convention", version.ref = "toolchain" } \ No newline at end of file diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index f0c8e14..0000000 --- a/settings.gradle +++ /dev/null @@ -1,6 +0,0 @@ -plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0' -} - -include ':app' -rootProject.name='Heimdall' \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..a9af609 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,35 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id ("org.gradle.toolchains.foojay-resolver-convention") version "0.4.0" +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + maven { + url = uri("https://jitpack.io") + name = "Jitpack" + } + } +} + +rootProject.name = "Heimdall" + +include (":app") +include(":core:database") +include (":core:datastore") +include (":core:datastore-proto") +include(":core:export") +include(":core:vpn") +include(":core:util") +include(":core:proxy") +include(":core:scanner")