From 8841aa9a10605187336703ecc5e85eae095cb00f Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 9 Sep 2024 19:42:43 -0400 Subject: [PATCH] Adds Tor --- amethyst/build.gradle | 3 ++ .../vitorpamplona/amethyst/ui/MainActivity.kt | 36 +++++++++++++++++++ gradle/libs.versions.toml | 4 +++ settings.gradle | 1 + 4 files changed, 44 insertions(+) diff --git a/amethyst/build.gradle b/amethyst/build.gradle index f0e902af9..176dc3db5 100644 --- a/amethyst/build.gradle +++ b/amethyst/build.gradle @@ -288,6 +288,9 @@ dependencies { // Cbor for cashuB format implementation libs.kotlinx.serialization.cbor + implementation libs.tor.android + implementation libs.jtorctl + testImplementation libs.junit testImplementation libs.mockk diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/MainActivity.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/MainActivity.kt index 7c787222e..3a97de9a5 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/MainActivity.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/MainActivity.kt @@ -21,14 +21,18 @@ package com.vitorpamplona.amethyst.ui import android.annotation.SuppressLint +import android.content.ComponentName import android.content.Context import android.content.Intent +import android.content.ServiceConnection import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities import android.os.Build import android.os.Bundle +import android.os.IBinder import android.util.Log +import android.widget.Toast import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.activity.result.contract.ActivityResultContracts @@ -63,6 +67,8 @@ import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import org.torproject.jni.TorService +import org.torproject.jni.TorService.LocalBinder import java.net.URLEncoder import java.nio.charset.StandardCharsets import java.util.Timer @@ -133,6 +139,34 @@ class MainActivity : AppCompatActivity() { // resets state until next External Signer Call Timer().schedule(350) { shouldPauseService = true } + + bindService( + Intent(this, TorService::class.java), + object : ServiceConnection { + override fun onServiceConnected( + name: ComponentName, + service: IBinder, + ) { + // moved torService to a local variable, since we only need it once + + val torService = (service as LocalBinder).service + + while (torService.torControlConnection == null) { + try { + Thread.sleep(500) + } catch (e: InterruptedException) { + e.printStackTrace() + } + } + + Toast.makeText(this@MainActivity, "Got Tor control connection", Toast.LENGTH_LONG).show() + } + + override fun onServiceDisconnected(name: ComponentName) { + } + }, + BIND_AUTO_CREATE, + ) } override fun onPause() { @@ -155,6 +189,8 @@ class MainActivity : AppCompatActivity() { (getSystemService(ConnectivityManager::class.java) as ConnectivityManager) .unregisterNetworkCallback(networkCallback) + stopService(Intent(baseContext, TorService::class.java)) + super.onPause() } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f50fd11a8..52e12d2f3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,6 +22,7 @@ fragmentKtx = "1.8.3" gms = "4.4.2" jacksonModuleKotlin = "2.17.2" jna = "5.14.0" +jtorctl = "0.4.5.7" junit = "4.13.2" kotlin = "2.0.0" kotlinxCollectionsImmutable = "0.3.7" @@ -41,6 +42,7 @@ rfc3986 = "0.1.0" secp256k1KmpJniAndroid = "0.15.0" securityCryptoKtx = "1.1.0-alpha06" spotless = "6.25.0" +torAndroid = "0.4.8.12" translate = "17.0.3" unifiedpush = "2.3.1" urlDetector = "0.1.23" @@ -99,6 +101,7 @@ google-mlkit-language-id = { group = "com.google.mlkit", name = "language-id", v google-mlkit-translate = { group = "com.google.mlkit", name = "translate", version.ref = "translate" } jackson-module-kotlin = { group = "com.fasterxml.jackson.module", name = "jackson-module-kotlin", version.ref = "jacksonModuleKotlin" } jna = { group = "net.java.dev.jna", name = "jna", version.ref = "jna" } +jtorctl = { module = "info.guardianproject:jtorctl", version.ref = "jtorctl" } junit = { group = "junit", name = "junit", version.ref = "junit" } kotlinx-collections-immutable = { group = "org.jetbrains.kotlinx", name = "kotlinx-collections-immutable", version.ref = "kotlinxCollectionsImmutable" } kotlinx-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization-cbor", version.ref = "kotlinxSerialization" } @@ -110,6 +113,7 @@ mockk = { group = "io.mockk", name = "mockk", version.ref = "mockk" } okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } rfc3986-normalizer = { group = "org.czeal", name = "rfc3986", version.ref = "rfc3986" } secp256k1-kmp-jni-android = { group = "fr.acinq.secp256k1", name = "secp256k1-kmp-jni-android", version.ref = "secp256k1KmpJniAndroid" } +tor-android = { module = "info.guardianproject:tor-android", version.ref = "torAndroid" } trbl-blurhash = { group = "io.trbl", name = "blurhash", version.ref = "blurhash" } unifiedpush = { group = "com.github.UnifiedPush", name = "android-connector", version.ref = "unifiedpush" } url-detector = { group = "io.github.url-detector", name = "url-detector", version.ref = "urlDetector" } diff --git a/settings.gradle b/settings.gradle index 03c0ea0b2..4208f4fde 100644 --- a/settings.gradle +++ b/settings.gradle @@ -24,6 +24,7 @@ dependencyResolutionManagement { google() mavenCentral() maven { url "https://jitpack.io" } + maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" } } }