From df2cb49ebf87f2a775d305220e614c9eed2025df Mon Sep 17 00:00:00 2001 From: Evan Kaloudis Date: Thu, 18 Jan 2024 11:29:43 -0500 Subject: [PATCH] Temporarily remove new Tor binary --- android/app/build.gradle | 4 +- .../installer/AndroidTorInstaller.java | 89 ---------- .../app/src/main/java/com/zeus/LndMobile.java | 8 +- .../zeus/LndMobileScheduledSyncWorker.java | 132 +++++++------- .../main/java/com/zeus/MainApplication.java | 2 +- .../app/src/main/java/com/zeus/ZeusTor.java | 165 ------------------ .../main/java/com/zeus/ZeusTorPackage.java | 22 --- .../src/main/java/com/zeus/ZeusTorUtils.java | 16 -- 8 files changed, 69 insertions(+), 369 deletions(-) delete mode 100644 android/app/src/main/java/com/msopentech/thali/android/installer/AndroidTorInstaller.java delete mode 100644 android/app/src/main/java/com/zeus/ZeusTor.java delete mode 100644 android/app/src/main/java/com/zeus/ZeusTorPackage.java delete mode 100644 android/app/src/main/java/com/zeus/ZeusTorUtils.java diff --git a/android/app/build.gradle b/android/app/build.gradle index 0ad92b57a9..3cf8a933a1 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -210,8 +210,8 @@ dependencies { // Tor + Persistent LND implementation "com.jakewharton:process-phoenix:2.0.0" - implementation 'info.guardianproject:tor-android:0.4.7.8' - implementation 'info.guardianproject:jtorctl:0.4.5.7' + // implementation 'info.guardianproject:tor-android:0.4.7.8' + // implementation 'info.guardianproject:jtorctl:0.4.5.7' implementation('dev.doubledot.doki:library:0.0.1@aar') { transitive = true diff --git a/android/app/src/main/java/com/msopentech/thali/android/installer/AndroidTorInstaller.java b/android/app/src/main/java/com/msopentech/thali/android/installer/AndroidTorInstaller.java deleted file mode 100644 index 38e70804e1..0000000000 --- a/android/app/src/main/java/com/msopentech/thali/android/installer/AndroidTorInstaller.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.msopentech.thali.android.installer;/* -Copyright (c) Microsoft Open Technologies, Inc. -All Rights Reserved -Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the -License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, -INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. -See the Apache 2 License for the specific language governing permissions and limitations under the License. -*/ -//package com.msopentech.thali.android.installer; - - -import android.content.Context; -import android.util.Log; -//import com.msopentech.thali.toronionproxy.TorInstaller; -//import org.torproject.android.binary.TorResourceInstaller; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.concurrent.TimeoutException; - -/** - * Installs Tor for an Android app. This is a wrapper around the TorResourceInstaller. - * - * Since this class only deals with installing Tor, it is up to the developer to implement - * the openBridgesStream which will give the bridges for pluggable transports. A - * typical implementation looks like: - * - * - * public InputStream openBridgesStream() throws IOException { - * return context.getResources().openRawResource(R.raw.bridges); - * } - * - */ -public class AndroidTorInstaller { - -// private final TorResourceInstaller resourceInstaller; - - private static final String TAG = "AndroidTorInstaller"; - - protected final Context context; - - protected File torrcFile; - - /** - * The configDir will be the location of tor configuration files. It contains the files, geoip, geoip6, - * bridges.txt and the default torrc file. - * - * The location of tor executable will be in the Android native library directory for the app. - */ - public AndroidTorInstaller(Context context, File configDir) { -// this.resourceInstaller = new TorResourceInstaller(context, configDir); - this.context = context; - } - - public void updateTorConfigCustom(String content) throws IOException, TimeoutException { - if(torrcFile == null) { - throw new FileNotFoundException("Unable to find torrc file. Have you installed Tor resources?"); - } -// resourceInstaller.updateTorConfigCustom(torrcFile, content); - } - -// @Override - public void setup() throws IOException { -// try { -// File torFile = resourceInstaller.installResources(); -// if(torFile != null) { -// Log.d("AndroidTorInstaller", "tor executable = " + torFile.getAbsolutePath()); -// } else { -// Log.w(TAG, "Failed to setup tor. No tor executable installed"); -// throw new IOException("Failed to Failed to setup tor. No tor executable installed"); -// } - -// this.torrcFile = resourceInstaller.getTorrcFile(); -// if(torrcFile != null) { -// Log.d("AndroidTorInstaller", "torrc = " + torrcFile.getAbsolutePath()); -// } else { -// Log.w(TAG, "Failed to setup tor. No torrc file installed"); -// throw new IOException("Failed to Failed to setup tor. No torrc file installed"); -// } - -// } catch (TimeoutException e) { -// Log.w(TAG, "Failed to setup tor: " + e.getMessage()); -// throw new IOException(e); -// } - } -} diff --git a/android/app/src/main/java/com/zeus/LndMobile.java b/android/app/src/main/java/com/zeus/LndMobile.java index afad94098a..63f0b789cf 100644 --- a/android/app/src/main/java/com/zeus/LndMobile.java +++ b/android/app/src/main/java/com/zeus/LndMobile.java @@ -348,10 +348,10 @@ public void startLnd(String args, Boolean isTorEnabled, Boolean isTestnet, Promi String params = "--lnddir=" + getReactApplicationContext().getFilesDir().getPath(); if (isTorEnabled) { - int listenPort = ZeusTorUtils.getListenPort(isTestnet); - String controlSocket = "unix://" + getReactApplicationContext().getDir(TorService.class.getSimpleName(), Context.MODE_PRIVATE).getAbsolutePath() + "/data/ControlSocket"; - params += " --tor.active --tor.control=" + controlSocket; - params += " --tor.v3 --listen=localhost:" + listenPort; + // int listenPort = ZeusTorUtils.getListenPort(isTestnet); + // String controlSocket = "unix://" + getReactApplicationContext().getDir(TorService.class.getSimpleName(), Context.MODE_PRIVATE).getAbsolutePath() + "/data/ControlSocket"; + // params += " --tor.active --tor.control=" + controlSocket; + // params += " --tor.v3 --listen=localhost:" + listenPort; } else { // If Tor isn't active, make sure we aren't // listening at all diff --git a/android/app/src/main/java/com/zeus/LndMobileScheduledSyncWorker.java b/android/app/src/main/java/com/zeus/LndMobileScheduledSyncWorker.java index 4561efa566..1a598d4966 100644 --- a/android/app/src/main/java/com/zeus/LndMobileScheduledSyncWorker.java +++ b/android/app/src/main/java/com/zeus/LndMobileScheduledSyncWorker.java @@ -56,7 +56,7 @@ public class LndMobileScheduledSyncWorker extends ListenableWorker { // we'll close down lnd and the worker private int numGetInfoCalls = 0; - ZeusTor zeusTor; + // ZeusTor zeusTor; // private enum WorkState { // NOT_STARTED, BOUND, WALLET_UNLOCKED, WAITING_FOR_SYNC, DONE; @@ -72,7 +72,7 @@ public class LndMobileScheduledSyncWorker extends ListenableWorker { public LndMobileScheduledSyncWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); dbSupplier = ReactDatabaseSupplier.getInstance(getApplicationContext()); - zeusTor = new ZeusTor(new ReactApplicationContext(getApplicationContext())); + // zeusTor = new ZeusTor(new ReactApplicationContext(getApplicationContext())); } @Override @@ -116,38 +116,32 @@ public void onSuccess(@Nullable Object value) { // Hyperlog.d(TAG, "Password retrieved"); if (torEnabled) { - // boolean startTorResult = startTor(); - // if (!startTorResult) { - // Log.e(TAG, "Could not start Tor"); - // future.set(Result.failure()); - // return; - // } - zeusTor.startTor(new PromiseWrapper() { - @Override - void onSuccess(@Nullable Object value) { - // Hyperlog.i(TAG, "Tor started"); - // Hyperlog.i(TAG, "torSocksPort: " + (int) value); - torStarted = true; - torSocksPort = (int) value; - - startLndWorkThread(completer, password); - } - - @Override - void onFail(Throwable throwable) { - // Hyperlog.e(TAG, "Failed to start Tor", throwable); - zeusTor.stopTor(new PromiseWrapper() { - @Override - void onSuccess(@Nullable Object value) { - } - - @Override - void onFail(Throwable throwable) { - } - }); - completer.set(Result.failure()); - } - }); + // zeusTor.startTor(new PromiseWrapper() { + // @Override + // void onSuccess(@Nullable Object value) { + // // Hyperlog.i(TAG, "Tor started"); + // // Hyperlog.i(TAG, "torSocksPort: " + (int) value); + // torStarted = true; + // torSocksPort = (int) value; + + // startLndWorkThread(completer, password); + // } + + // @Override + // void onFail(Throwable throwable) { + // // Hyperlog.e(TAG, "Failed to start Tor", throwable); + // zeusTor.stopTor(new PromiseWrapper() { + // @Override + // void onSuccess(@Nullable Object value) { + // } + + // @Override + // void onFail(Throwable throwable) { + // } + // }); + // completer.set(Result.failure()); + // } + // }); } else { startLndWorkThread(completer, password); } @@ -322,19 +316,17 @@ private void stopWorker(boolean success, CallbackToFutureAdapter.Completer completer) { - // Hyperlog.i(TAG, "Starting Tor"); - zeusTor.startTor(new PromiseWrapper() { - @Override - void onSuccess(@Nullable Object value) { - // Hyperlog.i(TAG, "Tor started"); - // Hyperlog.i(TAG, "torSocksPort: " + (int) value); - torStarted = true; - torSocksPort = (int) value; - } - - @Override - void onFail(Throwable throwable) { - // Hyperlog.e(TAG, "Failed to start Tor", throwable); - zeusTor.stopTor(new PromiseWrapper() { - @Override - void onSuccess(@Nullable Object value) {} - - @Override - void onFail(Throwable throwable) {} - }); - completer.set(Result.failure()); - } - }); + Hyperlog.i(TAG, "Starting Tor"); + // zeusTor.startTor(new PromiseWrapper() { + // @Override + // void onSuccess(@Nullable Object value) { + // // Hyperlog.i(TAG, "Tor started"); + // // Hyperlog.i(TAG, "torSocksPort: " + (int) value); + // torStarted = true; + // torSocksPort = (int) value; + // } + + // @Override + // void onFail(Throwable throwable) { + // // Hyperlog.e(TAG, "Failed to start Tor", throwable); + // zeusTor.stopTor(new PromiseWrapper() { + // @Override + // void onSuccess(@Nullable Object value) {} + + // @Override + // void onFail(Throwable throwable) {} + // }); + // completer.set(Result.failure()); + // } + // }); int torTries = 0; while (!torStarted) { if (torTries++ > 40) { diff --git a/android/app/src/main/java/com/zeus/MainApplication.java b/android/app/src/main/java/com/zeus/MainApplication.java index b26ff81feb..05b1e01e13 100644 --- a/android/app/src/main/java/com/zeus/MainApplication.java +++ b/android/app/src/main/java/com/zeus/MainApplication.java @@ -49,7 +49,7 @@ protected List getPackages() { packages.add(new LndMobileToolsPackage()); packages.add(new LndMobileScheduledSyncPackage()); packages.add(new LncPackage()); - packages.add(new ZeusTorPackage()); + // packages.add(new ZeusTorPackage()); return packages; } diff --git a/android/app/src/main/java/com/zeus/ZeusTor.java b/android/app/src/main/java/com/zeus/ZeusTor.java deleted file mode 100644 index 575076d482..0000000000 --- a/android/app/src/main/java/com/zeus/ZeusTor.java +++ /dev/null @@ -1,165 +0,0 @@ -package app.zeusln.zeus; - -import android.app.Notification; -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.app.PendingIntent; - -import android.content.BroadcastReceiver; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.ServiceConnection; -import android.database.sqlite.SQLiteDatabase; -import android.os.Build; -import android.os.IBinder; -import android.util.Log; -import android.widget.Toast; - -import java.util.Stack; - -import androidx.core.app.NotificationManagerCompat; - -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.reactnativecommunity.asyncstorage.AsyncLocalStorageUtil; -import com.reactnativecommunity.asyncstorage.ReactDatabaseSupplier; - -import org.torproject.jni.TorService; - - -public class ZeusTor extends ReactContextBaseJavaModule { - static private final String TAG = "ZeusTor"; - static TorService torService; - static String currentTorStatus = TorService.STATUS_OFF; - static Stack calleeResolvers = new Stack<>(); - static NotificationManagerCompat notificationManager; - - static private boolean getPersistentServicesEnabled(Context context) { - ReactDatabaseSupplier dbSupplier = ReactDatabaseSupplier.getInstance(context); - SQLiteDatabase db = dbSupplier.get(); - String persistentServicesEnabled = AsyncLocalStorageUtil.getItemImpl(db, "persistentServicesEnabled"); - if (persistentServicesEnabled != null) { - return persistentServicesEnabled.equals("true"); - } - Log.w(TAG, "Could not find persistentServicesEnabled in asyncStorage"); - return false; - } - - static private final ServiceConnection torServiceConnection = new ServiceConnection() { - @Override - public void onServiceConnected(ComponentName className, IBinder service) { - // We've bound to LocalService, cast the IBinder and get LocalService instance - TorService.LocalBinder binder = (TorService.LocalBinder) service; - torService = binder.getService(); - Log.i(TAG, "torService.getService()"); - boolean persistentServicesEnabled = getPersistentServicesEnabled(torService); - if (persistentServicesEnabled) { - torService.startForeground(0xc0feefee, getNotification(torService)); - } - Log.i(TAG, "onServiceConnected"); - } - - @Override - public void onServiceDisconnected(ComponentName arg0) { - Log.i(TAG, "onServiceDisconnected"); - } - - public Notification getNotification(Context context) { - Intent notificationIntent = new Intent (context, MainActivity.class); - PendingIntent pendingIntent = - PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - NotificationChannel channel = new NotificationChannel(BuildConfig.APPLICATION_ID, "zeus", NotificationManager.IMPORTANCE_NONE); - channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); - notificationManager = NotificationManagerCompat.from(context); - notificationManager.createNotificationChannel(channel); - notificationManager.createNotificationChannel(channel); - } - return new Notification.Builder(context, BuildConfig.APPLICATION_ID) - .setContentTitle("Tor") - .setContentText("Tor is running in the background") - .setSmallIcon(R.drawable.ic_stat_ic_notification_tor) - .setContentIntent(pendingIntent) - .setTicker("ZEUS") - .setOngoing(true) - .build(); - } - }; - - private final BroadcastReceiver torBroadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { -// Toast.makeText(context, intent.getStringExtra(TorService.EXTRA_STATUS), Toast.LENGTH_SHORT).show(); - String status = intent.getStringExtra(TorService.EXTRA_STATUS); - if (intent != null && intent.getAction() != null && intent.getAction().equals("org.torproject.android.intent.action.STOP")) { - torService.stopSelf(); - } - currentTorStatus = status; - Log.i(TAG, "onReceive " + status); - if (status.equals(TorService.STATUS_ON)) { - while (calleeResolvers.size() > 0) { - calleeResolvers.pop().resolve(TorService.socksPort); - } - } else if (status.equals(TorService.STATUS_OFF)) { - getReactApplicationContext().unregisterReceiver(torBroadcastReceiver); - } - } - }; - - public ZeusTor(ReactApplicationContext reactContext) { - super(reactContext); - } - - public String getName() { - return "ZeusTor"; - } - - @ReactMethod - public void startTor(Promise promise) { - Log.i(TAG, "startTor()"); -// if (calleeResolver != null) { -// Log.i(TAG, "calleeResolver != null"); -// promise.reject(TAG, "Tor already in progress starting"); -// return; -// } - if (currentTorStatus.equals(TorService.STATUS_ON)) { - Log.i(TAG, "socksPort = " + TorService.socksPort + ", currentTorStatus.equals(TorService.STATUS_ON) " + currentTorStatus.equals(TorService.STATUS_ON)); - promise.resolve(TorService.socksPort); - return; - } - calleeResolvers.add(promise); - - boolean persistentServicesEnabled = getPersistentServicesEnabled(getReactApplicationContext()); - getReactApplicationContext().registerReceiver(torBroadcastReceiver, new IntentFilter(TorService.ACTION_STATUS)); - Intent intent = new Intent(getReactApplicationContext(), TorService.class); - - if (persistentServicesEnabled) { - getReactApplicationContext().startForegroundService(intent); - } - getReactApplicationContext().bindService(intent, torServiceConnection, Context.BIND_AUTO_CREATE); - } - - @ReactMethod - public void stopTor(Promise promise) { - if (notificationManager != null) { - notificationManager.cancelAll(); - } - Log.i(TAG,"Unbinding TorService"); - try { - getReactApplicationContext().unbindService(torServiceConnection); - } catch (IllegalArgumentException e) { - Log.w(TAG, "Tried to unbindService on unbound service"); - } - promise.resolve(true); - }; - - @ReactMethod - public void showMsg(Promise promise) { - MainActivity.getActivity().showMsg(); - promise.resolve(true); - } -} diff --git a/android/app/src/main/java/com/zeus/ZeusTorPackage.java b/android/app/src/main/java/com/zeus/ZeusTorPackage.java deleted file mode 100644 index a92c42b571..0000000000 --- a/android/app/src/main/java/com/zeus/ZeusTorPackage.java +++ /dev/null @@ -1,22 +0,0 @@ -package app.zeusln.zeus; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class ZeusTorPackage implements ReactPackage { - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList(); - } - - @Override - public List createNativeModules(ReactApplicationContext reactContext) { - return Arrays.asList(new ZeusTor(reactContext)); - } -} diff --git a/android/app/src/main/java/com/zeus/ZeusTorUtils.java b/android/app/src/main/java/com/zeus/ZeusTorUtils.java deleted file mode 100644 index f85270bada..0000000000 --- a/android/app/src/main/java/com/zeus/ZeusTorUtils.java +++ /dev/null @@ -1,16 +0,0 @@ -package app.zeusln.zeus; - -import app.zeusln.zeus.BuildConfig; - -public class ZeusTorUtils { - public static int getListenPort(Boolean isTestnet) { - int listenPort = 9760; - if (isTestnet) { - listenPort += 10; - } - if (BuildConfig.DEBUG) { - listenPort += 100; - } - return listenPort; - } -} \ No newline at end of file