[tor-commits] [orbot/master] add overall preference for enabling/disabling onion service hosting

n8fr8 at torproject.org n8fr8 at torproject.org
Wed Dec 22 21:55:07 UTC 2021


commit 0e39a7776c03d82f8e5dc08a639b401b75de0f08
Author: n8fr8 <nathan at guardianproject.info>
Date:   Thu May 20 10:50:49 2021 -0400

    add overall preference for enabling/disabling onion service hosting
---
 orbotservice/build.gradle                          |   2 +-
 orbotservice/src/main/assets/fronts                |   5 +-
 .../torproject/android/service/OrbotService.java   | 126 ++++++++++-----------
 .../org/torproject/android/service/util/Prefs.java |  10 ++
 4 files changed, 75 insertions(+), 68 deletions(-)

diff --git a/orbotservice/build.gradle b/orbotservice/build.gradle
index 9f79f17f..67770146 100644
--- a/orbotservice/build.gradle
+++ b/orbotservice/build.gradle
@@ -64,5 +64,5 @@ dependencies {
     api 'info.guardianproject:jtorctl:0.4.5.7'
     implementation 'info.guardianproject:tor-android:0.4.5.7'
 
-    implementation 'com.github.tladesignz:IPtProxy:0.5.2'
+    implementation 'com.github.tladesignz:IPtProxy:0.6.0'
 }
diff --git a/orbotservice/src/main/assets/fronts b/orbotservice/src/main/assets/fronts
index 6782446d..6cafa57b 100644
--- a/orbotservice/src/main/assets/fronts
+++ b/orbotservice/src/main/assets/fronts
@@ -1,5 +1,6 @@
-snowflake https://d2kt284300pde7.cloudfront.net/
-snowflake-stun stun:stun.l.google.com:19302
+snowflake-target https://snowflake-broker.torproject.net.global.prod.fastly.net/
+snowflake-front cdn.sstatic.net
+snowflake-stun stun:stun.stunprotocol.org:3478
 moat-cdn https://d50gd378qj74g.cloudfront.net/
 moat-url https://moat.torproject.org.global.prod.fastly.net/
 moat-front cdn.sstatic.net
\ No newline at end of file
diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
index 5077ed6c..ed463752 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
@@ -296,32 +296,29 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
 
     private void stopTorAsync() {
 
-        new Thread(() -> {
-            Log.i("OrbotService", "stopTor");
-            try {
-                sendCallbackStatus(STATUS_STOPPING);
-                sendCallbackLogMessage(getString(R.string.status_shutting_down));
-
-                if (useIPtObfsMeekProxy())
-                    IPtProxy.stopObfs4Proxy();
+        Log.i("OrbotService", "stopTor");
+        try {
+            sendCallbackStatus(STATUS_STOPPING);
+            sendCallbackLogMessage(getString(R.string.status_shutting_down));
 
-                if (useIPtSnowflakeProxy())
-                    IPtProxy.stopSnowflake();
+            if (useIPtObfsMeekProxy())
+                IPtProxy.stopObfs4Proxy();
 
+            if (useIPtSnowflakeProxy())
+                IPtProxy.stopSnowflake();
 
-                stopTorDaemon(true);
+            stopTor();
 
-                //stop the foreground priority and make sure to remove the persistant notification
-                stopForeground(true);
+            //stop the foreground priority and make sure to remove the persistant notification
+            stopForeground(true);
 
-                sendCallbackLogMessage(getString(R.string.status_disabled));
-            } catch (Exception e) {
-                logNotice("An error occured stopping Tor: " + e.getMessage());
-                sendCallbackLogMessage(getString(R.string.something_bad_happened));
-            }
-            clearNotifications();
-            sendCallbackStatus(STATUS_OFF);
-        }).start();
+            sendCallbackLogMessage(getString(R.string.status_disabled));
+        } catch (Exception e) {
+            logNotice("An error occured stopping Tor: " + e.getMessage());
+            sendCallbackLogMessage(getString(R.string.something_bad_happened));
+        }
+        clearNotifications();
+        sendCallbackStatus(STATUS_OFF);
     }
 
     private void stopTorOnError(String message) {
@@ -377,11 +374,12 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
 
     private void startSnowflakeClient() {
         //this is using the current, default Tor snowflake infrastructure
-        String front = getCdnFront(this,"snowflake");
+        String target = getCdnFront(this, "snowflake-target");
+        String front = getCdnFront(this,"snowflake-front");
         String stunServer = getCdnFront(this, "snowflake-stun");
 
-        IPtProxy.startSnowflake(stunServer, front,
-                null, null, true, false, true, 3);
+        IPtProxy.startSnowflake(stunServer, target, front,
+                 null, true, false, true, 3);
 
     }
 
@@ -408,41 +406,33 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
         boolean unsafeLogging = false;
         IPtProxy.startSnowflakeProxy(capacity, broker, relay, stun, logFile, keepLocalAddresses, unsafeLogging);
     }
+
+    private void stopSnowflakeProxy () {
+
+        IPtProxy.stopSnowflakeProxy();
+    }
     /**
      * if someone stops during startup, we may have to wait for the conn port to be setup, so we can properly shutdown tor
      */
-    private void stopTorDaemon(boolean waitForConnection) throws Exception {
+    private void stopTor() throws Exception {
 
-        int tryCount = 0;
-
-        while (tryCount++ < 3) {
-            if (conn != null) {
-                logNotice("Using control port to shutdown Tor");
-
-                try {
-                    logNotice("sending HALT signal to Tor process");
-                    conn.shutdownTor(TorControlCommands.SIGNAL_SHUTDOWN);
-
-                } catch (IOException e) {
-                    Log.d(OrbotConstants.TAG, "error shutting down Tor via connection", e);
-                }
+        if (conn != null) {
+            logNotice("Using control port to shutdown Tor");
 
-                if (shouldUnbindTorService) {
-                    unbindService(torServiceConnection);
-                    shouldUnbindTorService = false;
-                }
+            try {
+                logNotice("sending HALT signal to Tor process");
+                conn.shutdownTor(TorControlCommands.SIGNAL_SHUTDOWN);
 
-                conn = null;
-                break;
+            } catch (IOException e) {
+                Log.d(OrbotConstants.TAG, "error shutting down Tor via connection", e);
             }
 
-            if (!waitForConnection)
-                break;
-
-            try {
-                Thread.sleep(3000);
-            } catch (Exception e) {
+            if (shouldUnbindTorService) {
+                unbindService(torServiceConnection);
+                shouldUnbindTorService = false;
             }
+
+            conn = null;
         }
     }
 
@@ -728,7 +718,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
             sendCallbackStatus(STATUS_STARTING);
 
             // make sure there are no stray daemons running
-            stopTorDaemon(false);
+            stopTor();
 
             showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.ic_stat_tor);
             //sendCallbackLogMessage(getString(R.string.status_starting_up));
@@ -742,15 +732,18 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
                 }
 
             runTorShellCmd();
-            try {
-                updateLegacyV2OnionNames();
-            } catch (SecurityException se) {
-                logNotice("unable to upload legacy v2 onion names");
-            }
-            try {
-                updateV3OnionNames();
-            } catch (SecurityException se) {
-                logNotice("unable to upload v3 onion names");
+
+            if (Prefs.hostOnionServicesEnabled()) {
+                try {
+                    updateLegacyV2OnionNames();
+                } catch (SecurityException se) {
+                    logNotice("unable to upload legacy v2 onion names");
+                }
+                try {
+                    updateV3OnionNames();
+                } catch (SecurityException se) {
+                    logNotice("unable to upload v3 onion names");
+                }
             }
         } catch (Exception e) {
             logException("Unable to start Tor: " + e.toString(), e);
@@ -1205,11 +1198,14 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
             return null;
         }
 
-        ContentResolver contentResolver = getApplicationContext().getContentResolver();
-        addV3OnionServicesToTorrc(extraLines, contentResolver);
-        addV3ClientAuthToTorrc(extraLines, contentResolver);
-        addV2HiddenServicesToTorrc(extraLines, contentResolver);
-        addV2ClientCookiesToTorrc(extraLines, contentResolver);
+        if (Prefs.hostOnionServicesEnabled()) {
+            ContentResolver contentResolver = getApplicationContext().getContentResolver();
+            addV3OnionServicesToTorrc(extraLines, contentResolver);
+            addV3ClientAuthToTorrc(extraLines, contentResolver);
+            addV2HiddenServicesToTorrc(extraLines, contentResolver);
+            addV2ClientCookiesToTorrc(extraLines, contentResolver);
+        }
+
         return extraLines;
     }
 
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java b/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java
index 1b2922a7..5c36793d 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java
@@ -21,6 +21,8 @@ public class Prefs {
     private final static String PREF_USE_VPN = "pref_vpn";
     private final static String PREF_EXIT_NODES = "pref_exit_nodes";
     private final static String PREF_BE_A_SNOWFLAKE = "pref_be_a_snowflake";
+    private final static String PREF_HOST_ONION_SERVICES = "pref_host_onionservices";
+
 
     private static SharedPreferences prefs;
 
@@ -37,6 +39,14 @@ public class Prefs {
         prefs.edit().putString(key, value).apply();
     }
 
+    public static boolean hostOnionServicesEnabled () {
+        return prefs.getBoolean(PREF_HOST_ONION_SERVICES, true);
+    }
+
+    public static void putHostOnionServicesEnabled(boolean value) {
+        putBoolean(PREF_HOST_ONION_SERVICES, value);
+    }
+
     public static boolean bridgesEnabled() {
         //if phone is in Farsi, enable bridges by default
         boolean bridgesEnabledDefault = Locale.getDefault().getLanguage().equals("fa");





More information about the tor-commits mailing list